Como analisar os dados da contagem longitudinal: contabilizando a autocorrelação temporal no GLMM?

16

Olá gurus estatísticos e assistentes de programação R,

Estou interessado em modelar capturas de animais em função das condições ambientais e do dia do ano. Como parte de outro estudo, tenho contagens de capturas em ~ 160 dias em três anos. Em cada um desses dias, tenho temperatura, precipitação, velocidade do vento, umidade relativa, etc. Como os dados foram coletados repetidamente das mesmas 5 parcelas, utilizo a plotagem como um efeito aleatório.

Meu entendimento é que o nlme pode facilmente explicar a autocorrelação temporal nos resíduos, mas não lida com funções de link não gaussianas como lme4 (que não pode lidar com a autocorrelação?). Atualmente, acho que pode funcionar para usar o pacote nlme no R no log (contagem). Portanto, minha solução agora seria executar 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)

onde DOY = dia do ano. Pode haver mais interações no modelo final, mas essa é minha ideia geral. Eu também poderia tentar modelar ainda mais a estrutura de variação com algo como

weights = v1Pow

Não tenho certeza se existe uma maneira melhor de fazer uma regressão de modelo misto de Poisson ou algo assim? Acabei de encontrar uma discussão matemática no capítulo 4 de "Modelos de regressão para análise de séries temporais", de Kedem e Fokianos. Estava um pouco além de mim no momento, especialmente na aplicação (codificando-a em R). Eu também vi uma solução MCMC em Zuur et al. Livro Modelos de Efeitos Mistos (Cap. 23) no idioma BUGS (usando winBUGS ou JAG). Essa é a minha melhor opção? Existe um pacote MCMC fácil no R que resolva isso? Eu não estou realmente familiarizado com as técnicas GAMM ou GEE, mas estaria disposto a explorar essas possibilidades se as pessoas pensassem que forneceriam uma melhor compreensão.Meu principal objetivo é criar um modelo para prever capturas de animais, dadas as condições ambientais. Secundariamente, eu gostaria de explicar a que os animais estão respondendo em termos de suas atividades.

Qualquer pensamento sobre a melhor maneira de proceder (filosoficamente), como codificar isso em R ou em BUGS seria apreciado. Eu sou bastante novo para R e BUGS (winBUGS), mas estou aprendendo. Esta é também a primeira vez que tentei resolver a autocorrelação temporal.

Obrigado Dan

djhocking
fonte
1
Eu sou um grande fã de GEE em geral, mas evitaria usá-lo aqui, pois você tem apenas 5 clusters (parcelas). Para ter um bom desempenho assintoticamente, o GEE geralmente requer um número maior (cerca de 40 ou mais) de clusters.
StatsStudent
Como proprietário de um Mac, tive mais facilidade com o STAN do que com os WINBUGS.
Eric_kernfeld

Respostas:

3

O log que transforma sua resposta é uma opção, embora não seja o ideal. Uma estrutura GLM é geralmente preferida. Se você não estiver familiarizado com os GLMs, comece revendo-os antes de examinar extensões de modelo mistas. Para dados de contagem, provavelmente, as premissas de distribuição de Poisson ou Binomial Negativo provavelmente serão adequadas. Binomial negativo é indicado se a variação for maior que a média indicando super dispersão ( https://en.wikipedia.org/wiki/Overdispersion ). A interpretação das estimativas dos parâmetros é equivalente para os dois.

Existem várias opções no R, com o lme4 sendo mais comumente citado na minha experiência.

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

Esses links também podem ser úteis:

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 são de Ben Bolker, autor de lme4.

Não testei os exemplos, mas eles devem lhe dar uma idéia de por onde começar. Por favor, forneça dados se desejar verificar sua implementação.

t-student
fonte