我试图在GLMM中考虑自相关。我的响应变量是布尔值,它表示在一组蜜蜂巢的生命周期中是否存在en事件。我试图用一组描述每个巢状态的数值变量预测这种事件的概率。因此,我在一个广义模型中使用二项分布,其中嵌套作为随机效应(使用glmer())。然而,事件是自相关的,所以我的残差中有一个非常可怕的模式。如果我在没有随机效应的错误中使用高斯分布,我会使用gls()的相关结构来估计一些相关参数,但在这种情况下这不会起作用。我一直在寻找在GLMM中包含这种自相关的方法,但我似乎并没有把它弄好。我发现可以使用函数ts()和diff()转换数据集,以允许模型包含响应的先前值作为预测器。这适用于线性模型lm(),使残差更好。
basket.1<-subset(basket,select=c(Nest,day,number_cells,provitioning_cells,closed_cells,
reopened_cells,eclosed_cells,pollen))
basket.ts<-ts(as.matrix.data.frame(basket.1),start=1,frequency=9)
m.basket.ts1<-lm(pollen~provitioning_cells+reopened_cells+closed_cells
+eclosed_cells+day,data=diff(basket.ts,differences=2))`
但是,lmer()和glm()都不接受这些函数的输出。问题似乎是转换使得某些值为负值,而glm()不接受二项式模型的负值(这是有道理的)。我已经读过可以考虑自相关glm(),这已经是一个改进,但我不能使它工作。我还读到glmmPQL()可以包含相关结构。该模型运行,但它不会改善残差中的模式。它们似乎仍然是自相关的。
m.basket.glmm1<-glmmPQL(pollen~provitioning_cells+reopened_cells+closed_cells
+eclosed_cells+day,random=~1|Nest,family=binomial,correlation=corAR1(form=~day),
data=basket)
我尝试了不同的相关结构,但似乎都没有。
最后,我尝试了dyn包,它应该允许回归函数处理时间序列。但是再一次,该函数不会与转换产生的值一起运行。
m.bas.glm.dyn1<-dyn$glm(pollen~provitioning_cells+reopened_cells+closed_cells
+eclosed_cells+day,family=poisson,data = diff(basket.ts,differences=3))
总而言之,我需要运行具有时间相关性的GLMM,但我找不到这样做的方法。我非常感谢一些帮助。
干杯!!!
答案 0 :(得分:1)
你能给我们一个可重复的例子吗?原则上,“手动”滞后值不应太难,例如
basket.1 <- subset(basket,select=c(Nest,day,number_cells,
provitioning_cells,closed_cells,
reopened_cells,eclosed_cells,pollen))
n <- nrow(basket.1)
basket.2 <- transform(basket.1,pollen.lag1=c(pollen[2:n],NA),
pollen.lag2=c(pollen[3:n],rep(NA,2)))
library("lme4")
m.basket.glmm1 <- glmer(pollen~provitioning_cells+
reopened_cells+ closed_cells+
eclosed_cells+day+pollen.lag1+pollen.lag2+
(1|Nest),
family=binomial,data=basket.2)
根据您的数据集的大小,如果day
是数字而不是您可能想要的因素(day|Nest)
而不是(1|Nest)
...