如何在二项模型中对序列相关性建模?海滩动物采样比例趋势分析求助
解决方案
你可以直接在glmmTMB框架内加入一阶自回归(AR1)结构处理时间序列相关性,不需要更换工具包,具体操作步骤如下:
步骤1:数据预处理
glmmTMB的AR1随机效应要求时间变量为有序因子,先对year做格式转换:
dat$year_fac <- factor(dat$year, ordered = TRUE)
你的数据每个海滩刚好对应12个完整年度的观测,没有缺失值,完全满足AR1结构对时间点等间隔、无缺失的要求。
步骤2:拟合加入自相关结构的模型
在随机效应部分指定每个海滩分组下的AR1自相关结构:
require(glmmTMB) dat.TMB_ar1 <- glmmTMB( cbind(notthisbeach, thisbeach) ~ year * fBeach, family = "betabinomial", random = ~ ar1(year_fac + 0 | fBeach), data = dat )
步骤3:验证自相关是否消除
用DHARMa重新做杜宾-沃森检验,确认序列相关问题已经解决:
require(DHARMa) simres_ar1 <- simulateResiduals(dat.TMB_ar1, plot = T) res_ar1 <- recalculateResiduals(simres_ar1, group = dat$year) testTemporalAutocorrelation(res_ar1, time = unique(dat$year))
如果DW检验p值大于0.05,说明自相关已经被有效控制。
步骤4:提取每个海滩的单独趋势检验结果
使用emmeans包提取交互项中每个海滩对应的年份斜率和显著性:
require(emmeans) # 提取每个海滩的year趋势值 beach_trends <- emtrends(dat.TMB_ar1, ~ fBeach, var = "year") print(beach_trends)
输出结果中会直接给出每个海滩的趋势估计值、标准误、95%置信区间和对应p值,满足你单独做趋势检验的需求。
备选方案
如果glmmTMB的AR1结构无法完全消除自相关,可以改用brms包拟合贝叶斯beta二项模型,支持更灵活的自相关结构指定,参考代码:
require(brms) dat_brm <- brm( cbind(notthisbeach, thisbeach) ~ year * fBeach + ar(year, gr = fBeach), family = "beta_binomial2", data = dat, chains = 4, cores = 4 )
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

