Comment analyser les données de comptage longitudinal: prise en compte de l'autocorrélation temporelle dans le GLMM?


16

Bonjour gourous statistiques et assistants de programmation R,

Je m'intéresse à la modélisation des captures d'animaux en fonction des conditions environnementales et du jour de l'année. Dans le cadre d'une autre étude, j'ai dénombré des captures sur environ 160 jours sur trois ans. Chaque jour, j'ai la température, les précipitations, la vitesse du vent, l'humidité relative, etc. Parce que les données ont été collectées à plusieurs reprises sur les 5 mêmes parcelles, j'utilise la parcelle comme un effet aléatoire.

Ma compréhension est que nlme peut facilement expliquer l'autocorrélation temporelle dans les résidus mais ne gère pas les fonctions de liaison non gaussiennes comme lme4 (qui ne peut pas gérer l'autocorrélation?). Actuellement, je pense que cela pourrait fonctionner pour utiliser le paquet nlme dans R sur log (count). Donc, ma solution en ce moment serait d'exécuter quelque chose comme:

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)

où DOY = Jour de l'année. Il peut y avoir plus d'interactions dans le modèle final, mais c'est mon idée générale. Je pourrais aussi essayer de modéliser davantage la structure de la variance avec quelque chose comme

weights = v1Pow

Je ne sais pas s'il y a une meilleure façon de faire avec une régression de modèle mixte de Poisson ou quoi que ce soit? Je viens de trouver une discussion mathématique dans le chapitre 4 de "Modèles de régression pour l'analyse de séries chronologiques" de Kedem et Fokianos. Cela me dépassait un peu en ce moment, surtout en application (codage en R). J'ai également vu une solution MCMC dans Zuur et al. Livre sur les modèles d'effets mixtes (Chp 23) en langage BUGS (en utilisant winBUGS ou JAG). Est-ce ma meilleure option? Existe-t-il un package MCMC simple dans R qui pourrait gérer cela? Je ne suis pas vraiment familier avec les techniques GAMM ou GEE, mais je serais prêt à explorer ces possibilités si les gens pensaient qu'ils fourniraient une meilleure compréhension.Mon objectif principal est de créer un modèle pour prédire les captures d'animaux compte tenu des conditions environnementales. Secondairement, je voudrais expliquer à quoi les animaux répondent en termes d'activité.

Toute réflexion sur la meilleure façon de procéder (philosophiquement), comment coder cela en R ou en BUGS serait appréciée. Je suis assez nouveau pour R et BUGS (winBUGS) mais j'apprends. C'est aussi la première fois que j'essaie de traiter l'autocorrélation temporelle.

Merci, Dan


1
Je suis un grand fan de GEE en général, mais j'éviterais de l'utiliser ici car vous n'avez que 5 clusters (parcelles). Pour bien fonctionner asymptotiquement, GEE nécessite généralement un plus grand nombre (environ 40 environ) de grappes.
StatsStudent

En tant que propriétaire de Mac, j'ai eu plus de facilité avec STAN qu'avec WINBUGS.
eric_kernfeld

Réponses:


3

Le journal transformant votre réponse est une option bien qu'elle ne soit pas idéale. Un cadre GLM est généralement préféré. Si vous n'êtes pas familier avec les GLM, commencez par les examiner avant de regarder les extensions de modèle mixtes. Pour les données de dénombrement, les hypothèses de distribution de Poisson ou de binôme négatif conviendront probablement. Un binôme négatif est indiqué si la variance est supérieure à la moyenne indiquant une sur-dispersion ( https://en.wikipedia.org/wiki/Overdispersion ). L'interprétation des estimations des paramètres est équivalente pour les deux.

Plusieurs options existent dans R avec lme4 étant le plus souvent cité dans mon expérience.

#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))

Ces liens peuvent également être utiles:

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

Les deux sont de Ben Bolker, auteur de lme4.

Je n'ai pas testé les exemples mais ils devraient vous donner une idée par où commencer. Veuillez fournir des données si vous souhaitez vérifier leur mise en œuvre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.