GLMM-是否可以限制变量组合?

时间:2016-07-12 21:34:52

标签: r lme4

让我们假设我想看到GLMM的所有可能变量的组合(使用lme4),但我不想在模型中同时考虑两个变量。我怎么做?例如,我想考虑3个固定效果和3个随机效果,但我不希望在模型中同时考虑任何随机或固定效果。如果我以这种方式构建模型:

model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),
 data=data1)

我使用MuMIn::dredge()函数(稍后执行模型平均),我将获得它们之间的所有可能组合,但我不希望(1|var4)与{{1}在同一模型中}}

那么,是否可以限制模型组合?这样我就可以避免不必要的模型并节省计算时间。

2 个答案:

答案 0 :(得分:2)

以防万一有人在寻找更新的解决方案...您现在可以使用subset dredge参数来简化此操作:

[{"id": 1},{"id": 2},{"id": 3}]

答案 1 :(得分:1)

我不知道如何在MuMIn::dredge()内执行此操作(但请参阅下面的尝试)。

 set.seed(101)
 dd <- data.frame(x=rnorm(1000),
                 var1=rnorm(1000),
                 var2=rnorm(1000),
                 var3=rnorm(1000),
                 var4=sample(factor(sample(1:20,size=1000,replace=TRUE))),
                 var5=sample(factor(sample(1:20,size=1000,replace=TRUE))),
                 var6=sample(factor(sample(1:20,size=1000,replace=TRUE))))
 library(lme4)
 m0 <- lmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),dd,REML=FALSE,
            na.action=na.fail)

如果我们尝试使用m.lim参数,它只会固定固定效果,但会留下所有随机效果词:

dredge(m0,m.lim=c(0,1))
## Model selection table 
##   (Intrc)      var1     var2    var3 df    logLik   AICc delta weight
## 1 0.02350                             5 -1417.485 2845.0  0.00  0.412
## 3 0.02389           -0.03256          6 -1416.981 2846.0  1.02  0.248
## 5 0.02327                    0.02168  6 -1417.254 2846.6  1.56  0.189
## 2 0.02349 -0.002981                   6 -1417.480 2847.0  2.02  0.151
## Models ranked by AICc(x) 
## Random terms (all models): 
## ‘1 | var4’, ‘1 | var5’, ‘1 | var6’

关注demo(dredge.subset),我尝试了这个例子:

dredge(m0,
     subset=expression(!( (var1 && var2) || ((1|var4) && (1|var5)))))

但得到了

Error in dredge(m0, subset = expression(!((var1 && var2) || ((1 | var4) &&  : 
  unrecognized names in 'subset' expression: "var4" and "var5"

我找不到任何关于如何在具有不同随机效应的模型中使用MuMIn::dredge()进行疏浚/模型平均的文档(实际上,我不相信这是一个好主意)。 如果你希望所有模型只有一个固定效果和一个随机效应项,你可以按如下方式进行:

设置所有组合:

fvars <- paste0("var",1:3)
gvars <- paste0("(1|var",4:6,")")
combs <- as.matrix(expand.grid(fvars,gvars))

现在适合他们:

mList <- list()
for (i in 1:nrow(combs)) {
    mList[[i]] <- update(m0,
          formula=reformulate(combs[i,],response="x"))
}

现在,您可以使用lapplysapply来操作列表中的元素,例如:

lapply(mList,formula)
## [[1]]
## x ~ var1 + (1 | var4)
## 
## [[2]]
## x ~ var2 + (1 | var4)
## 
## [[3]]
## x ~ var3 + (1 | var4)
## 
## [[4]]
## x ~ var1 + (1 | var5)
## ... et cetera ...

bbmle::AICtab(mList,weights=TRUE)
##        dAIC df weight
## model5 0.0  4  0.344 
## model6 0.5  4  0.262 
## model4 1.0  4  0.213 
## model8 4.1  4  0.044 
## ... et cetera ...

...但你必须更加努力地进行模型平均。您可以尝试r-sig-mixed-models@r-project.orgr-sig-ecology@r-project.org或发送电子邮件至MuMInmaintainer("MuMIn"))的维护者...