考虑GLMM中的时间相关性

时间:2014-06-27 13:14:54

标签: r time-series logistic-regression mixed-models lmer

我试图在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,但我找不到这样做的方法。我非常感谢一些帮助。

干杯!!!

1 个答案:

答案 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) ...