Bạn có thể điều chỉnh GLMM đa cấp với phân phối Poisson (với độ phân tán quá mức) bằng R theo nhiều cách. Vài R
gói là: lme4
, MCMCglmm
, arm
, vv Một tốt tài liệu tham khảo để xem là Gelman và Hill (2007)
Tôi sẽ đưa ra một ví dụ về việc làm điều này bằng cách sử dụng rjags
gói trong R
. Nó là một giao diện giữa R
và JAGS
(như OpenBUGS
hoặc WinBUGS
).
đăng θ i j = β 0 + β 1 T r e một t m e n t i + δ i j δ i j ~ N ( 0 , σ 2 ε ) i = 1 ... tôi ,
ntôi j~ P o i s s o n ( θtôi j)
đăng nhậpθtôi j= β0+ β1 T r e a t me n ttôi+ δtôi j
δtôi j~ N( 0 , σ2ε)
i = 1 Lôi I,j = 1 ... J
T r e a t me n ttôi= 0 hoặc 1 , ... , J- 1 nếu tôit h quan sát thuộc nhóm điều trị 1 , hoặc 2,...,J
Phần trong mã trên mô hình quá mức. Nhưng không có ai ngăn bạn mô hình hóa mối tương quan giữa các cá nhân (bạn không tin rằng các cá nhân thực sự độc lập) và trong các cá nhân (các biện pháp lặp đi lặp lại). Ngoài ra, tham số tốc độ có thể được thu nhỏ bởi một số hằng số khác như trong . Vui lòng xem Gelman và Hill (2007) để tham khảo thêm. Đây là mã cho mô hình đơn giản:δtôi jrate models
JAGS
data{
for (i in 1:I){
ncount[i,1] <- obsTrt1[i]
ncount[i,2] <- obsTrt2[i]
## notice I have only 2 treatments and I individuals
}
}
model{
for (i in 1:I){
nCount[i, 1] ~ dpois( means[i, 1] )
nCount[i, 2] ~ dpois( means[i, 2] )
log( means[i, 1] ) <- mu + b * trt1[i] + disp[i, 1]
log( means[i, 2] ) <- mu + b * trt2[i] + disp[i, 2]
disp[i, 1] ~ dnorm( 0, tau)
disp[i, 2] ~ dnorm( 0, tau)
}
mu ~ dnorm( 0, 0.001)
b ~ dnorm(0, 0.001)
tau ~ dgamma( 0.001, 0.001)
}
Đây là R
mã để thực hiện sử dụng nó (giả sử nó được đặt tên overdisp.bug
:)
dataFixedEffect <- list("I" = 10,
"obsTrt1" = obsTrt1 , #vector of n_i1
"obsTrt2" = obsTrt2, #vector of n_i2
"trt1" = trt1, #vector of 0
"trt2" = trt2, #vector of 1
)
initFixedEffect <- list(mu = 0.0 , b = 0.0, tau = 0.01)
simFixedEffect <- jags.model(file = "overdisp.bug",
data = dataFixedEffect,
inits = initFixedEffect,
n.chains = 4,
n.adapt = 1000)
sampleFixedEffect <- coda.samples(model = simFixedEffect,
variable.names = c("mu", "b", "means"),
n.iter = 1000)
meansTrt1 <- as.matrix(sampleFixedEffect[ , 2:11])
meansTrt2 <- as.matrix(sampleFixedEffect[ , 12:21])
Bạn có thể chơi xung quanh với các thông số sau của bạn và bạn có thể giới thiệu nhiều tham số hơn để giúp bạn mô hình hóa chính xác hơn ( chúng tôi muốn nghĩ điều này ). Về cơ bản, bạn có được ý tưởng.
Để biết thêm chi tiết về cách sử dụng rjags
và JAGS
, vui lòng xem trang của John Myles White