¿Cómo analizar los datos de conteo longitudinal: contabilizando la autocorrelación temporal en GLMM?

16

Hola, gurús estadísticos y asistentes de programación R,

Estoy interesado en modelar capturas de animales en función de las condiciones ambientales y el día del año. Como parte de otro estudio, tengo recuentos de capturas en ~ 160 días durante tres años. En cada uno de estos días tengo temperatura, lluvia, velocidad del viento, humedad relativa, etc. Debido a que los datos se recopilaron repetidamente de las mismas 5 parcelas, utilizo la parcela como un efecto aleatorio.

Tengo entendido que nlme puede explicar fácilmente la autocorrelación temporal en los residuos, pero no maneja funciones de enlace no gaussianas como lme4 (¿cuál no puede manejar la autocorrelación?). Actualmente, creo que podría funcionar usar el paquete nlme en R en log (count). Entonces, mi solución en este momento sería ejecutar algo como:

m1 <- lme(lcount ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + 
      sin(2*pi/360*DOY) + cos(2*pi/360*DOY), random = ~1|plot, correlation =
      corARMA(p = 1, q = 1, form = ~DOY|plot), data = Data)

donde DOY = Día del año. Puede haber más interacciones en el modelo final, pero esta es mi idea general. También podría intentar modelar aún más la estructura de varianza con algo como

weights = v1Pow

No estoy seguro de si hay una mejor manera de hacer con una regresión de modelo mixto de Poisson o algo así. Acabo de encontrar una discusión matemática en el Capítulo 4 de "Modelos de regresión para el análisis de series temporales" de Kedem y Fokianos. Estaba un poco más allá de mí en este momento, especialmente en la aplicación (codificándolo en R). También vi una solución MCMC en Zuur et al. Libro de modelos de efectos mixtos (Capítulo 23) en el lenguaje BUGS (usando winBUGS o JAG). ¿Esa es mi mejor opción? ¿Hay un paquete MCMC fácil en R que pueda manejar esto? No estoy realmente familiarizado con las técnicas GAMM o GEE, pero estaría dispuesto a explorar estas posibilidades si las personas pensaran que proporcionarían una mejor visión.Mi objetivo principal es crear un modelo para predecir las capturas de animales dadas las condiciones ambientales. En segundo lugar, me gustaría explicar a qué responden los animales en términos de su actividad.

Cualquier idea sobre la mejor manera de proceder (filosóficamente), cómo codificar esto en R o en ERRORES sería apreciada. Soy bastante nuevo en R y BUGS (winBUGS) pero estoy aprendiendo. Esta es también la primera vez que trato de abordar la autocorrelación temporal.

Gracias dan

djhocking
fuente
1
Soy un gran admirador de GEE en general, pero evitaría usarlo aquí ya que solo tiene 5 grupos (parcelas). Para desempeñarse bien asintóticamente, GEE generalmente requiere un mayor número (aproximadamente 40) de grupos.
StatsStudent
Como propietario de Mac, he tenido un tiempo más fácil con STAN en lugar de WINBUGS.
eric_kernfeld

Respuestas:

3

El registro que transforma su respuesta es una opción, aunque no es ideal. Generalmente se prefiere un marco GLM. Si no está familiarizado con los GLM, comience por revisarlos antes de buscar extensiones de modelos mixtos. Para los datos de recuento, los supuestos de distribución de Poisson o binomio negativo probablemente sean adecuados. El binomio negativo se indica si la varianza es mayor que la media que indica sobredispersión ( https://en.wikipedia.org/wiki/Overdispersion ). La interpretación de las estimaciones de los parámetros es equivalente para los dos.

Existen varias opciones en R con lme4 que se cita más comúnmente en mi experiencia.

#glmer
library(lme4) 
glmer(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) + (1|plot), family=poisson, data = Data) 
# use glmer.nb with identical syntax but no family for negative binomial.

# glmmADMB with negative binomial
install.packages("glmmADMB", repos=c("http://glmmadmb.r-forge.r-project.org/repos", getOption("repos")),type="source") 
require(glmmADMB)
glmmadmb(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) + (1|plot), 
           family="nbinom", zeroInflation=FALSE, data=Data)

# glmmPQL, requires an estimate for theta which can be obtained from a 
# glm model in which the correlation structure is ignored.
library(MASS)
glmmPQL(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) , random = list(~1 | plot), data = Data,family = negative.binomial(theta = 4.22, link = log))

Estos enlaces también pueden ser de ayuda:

https://udrive.oit.umass.edu/xythoswfs/webui/_xy-11096203_1-t_yOxYgf1s http://www.cell.com/trends/ecology-evolution/pdf/S0169-5347(09)00019-6.pdf

Ambos son de Ben Bolker, autor de lme4.

No he probado los ejemplos, pero deberían darte una idea de por dónde empezar. Proporcione datos si desea verificar su implementación.

t-student
fuente