33 votos

¿Cómo puedo ajustar un modelo multinivel para más dispersos de poisson resultados?

Me quieren encajar un multinivel GLMM con una distribución de Poisson (con la sobre-dispersión) mediante R. En este momento estoy usando lme4 pero me di cuenta de que, recientemente, el quasipoisson familia fue eliminado.

He visto en otros lugares que usted puede servir de modelo aditivo sobre-dispersión de distribuciones binomiales mediante la adición de un azar interceptar con un nivel por observación. Aplica esto a la distribución de poisson?

Hay una manera mejor de hacerlo? Hay otros paquetes que usted recomendaría?

Muchas gracias.

24voto

merriam Puntos 67

Usted puede caber multinivel GLMM con una distribución de Poisson (con la sobre-dispersión) el uso de R en múltiples formas. Pocos R paquetes: lme4, MCMCglmm, arm, etc. Una buena referencia para ver es Gelman y Hill (2007)

Voy a dar un ejemplo de esto rjags paquete en R. Es una interfaz entre R y JAGS (como OpenBUGS o WinBUGS).

$$n_{ij} \sim \mathrm{Poisson}(\theta_{ij})$$ $$\log \theta_{ij} = \beta_0 + \beta_1 \mbox{ } \mathtt{Tratamiento}_{i} + \delta_{ij}$$ $$\delta_{ij} \sim N(0, \sigma^2_{\epsilon})$$ $$i=1 \ldots I, \quad j = 1\ldots J$$ $\mathtt{Tratamiento}_i = 0 \mbox{ o } 1, \ldots, J-1 \mbox{ si } i^{th} \mbox{ observación pertenece al grupo de tratamiento } 1 \mbox {o, } 2, \ldots, J$

El $\delta_{ij}$ parte en el código de los modelos anteriores de la sobredispersión. Pero no hay nadie que te detenga de modelado de correlación entre los individuos (que no creo que las personas son realmente independientes), y dentro de los individuos (medidas repetidas). Asimismo, la tasa parámetro, pueden ser escaladas por alguna otra constante como en rate models. Por favor, consulte Gelman y Hill (2007) para más referencia. Aquí es el JAGS código para el modelo simple:

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í es el R código para implementar el uso (digamos que es el nombre: 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])

Usted puede jugar con sus parámetros posteriores y se pueden introducir parámetros más para hacer el modelado más preciso (nos gusta pensar que este). Básicamente, usted consigue la idea.

Para más detalles sobre el uso de rjags y JAGS, véase Juan Myles Blanco de la página

20voto

jgauffin Puntos 54

No hay necesidad de dejar el paquete lme4 para dar cuenta de sobredispersión; basta con incluir un efecto aleatorio para la observación número. Los ERRORES/EXIGENCIAS de las soluciones mencionadas son probablemente demasiado para usted, y si no es así, usted debe tener la facilidad para adaptarse a lme4 resultados para la comparación.

data$obs_effect<-1:nrow(data)
overdisp.fit<-lmer(y~1+obs_effect+x+(1|obs_effect)+(1+x|subject_id),data=data,family=poisson)

Esto se explica aquí: http://article.gmane.org/gmane.comp.lang.r.lme4.devel/4727 de manera informal y académicamente por Elston et al. (2001).

7voto

Anders Hansson Puntos 179

Creo que el glmmADMB paquete es exactely lo que usted está buscando.

instalar.paquetes("glmmADMB", repos="http://r-forge.r-project.org")

Pero en un bayesiano punto de vista, usted puede utilizar el MCMCglmm paquete o los ERRORES/PUNTAS de software, son muy flexibles y pueden adaptarse a este tipo de modelo. (y la sintaxis está cerca de la R uno)

EDITAR gracias a @randel

Si desea instalar el glmmADMB y R2admb paquetes es mejor hacer:

install.packages("glmmADMB", repos="http://glmmadmb.r-forge.r-project.org/repos"‌​)   
install.packages("R2admb")

5voto

Craig Walker Puntos 13478

Buenas sugerencias hasta el momento. Aquí uno más. Usted puede caber una jerárquico binomial negativa modelo de regresión utilizando el rhierNegbinRw función de la bayesm paquete.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X