Puede ajustar GLMM multinivel con una distribución de Poisson (con sobredispersión) usando R de múltiples maneras. Unos R
paquetes son: lme4
, MCMCglmm
, arm
, etc. Una referencia buena para ver que es Gelman y Hill (2007)
Daré un ejemplo de esto usando el rjags
paquete in R
. Es una interfaz entre R
y JAGS
(me gusta OpenBUGS
o WinBUGS
).
log θ i j = β 0 + β 1 T r e a t m e n t i + δ i j δ i j ∼ N ( 0 , σ 2 ϵ ) i = 1 ... I ,
norteyo j∼ P o i s s o n ( θyo j)
Iniciar sesiónθyo j= β0 0+ β1 T r e a t me n tyo+ δyo j
δyo j∼ N( 0 , σ2ϵ)
i = 1 ... I,j = 1 ... J
T r e a t me n tyo= 0 o 1 , ... , J- 1 si el it h la observación pertenece al grupo de tratamiento 1 o 2,..., J
La parte en el código anterior modela la sobredispersión. Pero no hay nadie que le impida modelar la correlación entre individuos (no cree que los individuos sean realmente independientes) y dentro de los individuos (medidas repetidas). Además, el parámetro de velocidad puede ser escalado por alguna otra constante como en . Consulte Gelman y Hill (2007) para obtener más referencias. Aquí está el código para el modelo simple:δyo 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)
}
Aquí está el R
código para implementar el uso que (dicen que se denomina: 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])
Puede jugar con las partes posteriores de sus parámetros y puede introducir más parámetros para que su modelado sea más preciso ( nos gusta pensar esto ). Básicamente, te haces una idea.
Para obtener más detalles sobre el uso rjags
y JAGS
, consulte la página de John Myles White