Як проаналізувати дані поздовжнього рахунку: облік тимчасової автокореляції в ГЛММ?


16

Привіт, майстри програмування статистичних гуру та R,

Мені цікаво моделювати захоплення тварин як залежність від умов навколишнього середовища та дня року. Як частина іншого дослідження, я зафіксував кількість знімань за ~ 160 днів протягом трьох років. Кожен з цих днів у мене температура, кількість опадів, швидкість вітру, відносна вологість тощо. Оскільки дані збиралися неодноразово з тих же 5 ділянок, я використовую графік як випадковий ефект.

Я розумію, що nlme може легко пояснювати тимчасову автокореляцію в залишках, але не обробляє не-гауссові функції зв'язку, як lme4 (яка не може впоратися з автокореляцією?). В даний час, я думаю, це може спрацювати з використанням пакету nlme в R для журналу (count). Тож зараз моїм рішенням було б запустити щось на зразок:

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)

де DOY = День року. У кінцевій моделі може бути більше взаємодій, але це моя загальна ідея. Я також міг би спробувати далі моделювати структуру дисперсії з чимось подібним

weights = v1Pow

Я не впевнений, чи є кращий спосіб поступити зі змішаною регресією моделі Пуассона чи що-небудь ще? Щойно я знайшов математичну дискусію в главі 4 "Регресійних моделей для аналізу часових рядів" Кедема і Фокіаноса. На даний момент це було трохи поза мене, особливо в застосуванні (кодування його в R). Я також бачив рішення MCMC у Zuur et al. Книга моделей змішаних ефектів (гл. 23) мовою BUGS (використовуючи winBUGS або JAG). Це мій найкращий варіант? Чи є легкий пакет MCMC в R, який би впорався з цим? Я не дуже знайомий з методами GAMM або GEE, але хотів би вивчити ці можливості, якби люди думали, що вони зможуть краще зрозуміти.Моя головна мета - створити модель для прогнозування захоплення тварин в умовах навколишнього середовища. По-друге, я хотів би пояснити, на що реагують тварини з точки зору своєї активності.

Будемо вдячні будь-які думки щодо найкращого способу (філософськи), як це кодувати в R чи BUGS. Я досить новачок у R та BUGS (winBUGS), але навчаюсь. Це також перший раз, коли я коли-небудь намагався зайнятися тимчасовою автокореляцією.

Спасибі, Ден


1
Я взагалі великий фанат GEE, але я б уникав використовувати його тут, оскільки у вас є лише 5 кластерів (сюжетів). Щоб добре працювати асимптотично, для GEE зазвичай потрібно більша кількість (приблизно 40 або більше) кластерів.
СтатистикаСтудент

Як власник Mac, я мав простіший час із STAN, а не з WINBUGS.
eric_kernfeld

Відповіді:


3

Журнал, який трансформує вашу відповідь, - це варіант, хоча не ідеальний. Як правило, рамки GLM є кращими. Якщо ви не знайомі з GLM, почніть з їх перегляду, перш ніж переглянути змішані розширення моделі. Для підрахунку даних, ймовірно, будуть придатні пуассонські або негативні біноміальні припущення. Негативний двочлен вказується, якщо дисперсія вища за середню, що вказує на перевищення дисперсії ( https://en.wikipedia.org/wiki/Overdispersion ). Інтерпретація оцінок параметрів рівнозначна для двох.

У R існує декілька варіантів, найчастіше в моєму досвіді цитується lme4.

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

Ці посилання також можуть бути корисними:

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

Обидва - Бен Болкер, автор lme4.

Я не перевіряв приклади, але вони повинні дати вам уявлення, з чого почати. Будь ласка, надайте дані, якщо ви хочете перевірити їх виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.