GLMM- 是否可以限制变量组合?
GLMM- Is it possible to limit variable combinations?
假设我想查看 GLMM 的所有可能变量组合(使用 lme4
),但我不想在模型中同时考虑两个变量。我怎么做?例如,我想考虑 3 个固定效应和 3 个随机效应,但我不希望在模型中同时考虑任何随机效应或固定效应。如果我这样构建模型:
model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),
data=data1)
并且我使用 MuMIn::dredge()
函数(稍后执行模型平均),我将获得它们之间所有可能的组合,但我不希望 (1|var4)
与 (1|var5)
.
那么,是否可以限制模型组合?这样我就可以避免不必要的模型并节省计算时间。
我不知道如何在 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()
进行 dredging/model 平均的文档(事实上,我不相信这是个好主意)。 如果你想用恰好一个固定效应项和一个随机效应项拟合所有模型,你可以按如下方式进行:
设置所有组合:
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"))
}
现在可以使用lapply
或sapply
对列表的元素进行操作,例如:
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.org
、r-sig-ecology@r-project.org
,或向 MuMIn
(maintainer("MuMIn")
) 的维护者发送电子邮件...
以防万一有人正在寻找更新的解决方案...您现在可以使用 dredge 的 subset 参数更轻松地完成此操作:
#full model
model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),data=data1)
#exclude models containing both (1|var4) & (1|var5) at the same time
dredge(model1, subset = !((1|var4) && (1|var5)))
假设我想查看 GLMM 的所有可能变量组合(使用 lme4
),但我不想在模型中同时考虑两个变量。我怎么做?例如,我想考虑 3 个固定效应和 3 个随机效应,但我不希望在模型中同时考虑任何随机效应或固定效应。如果我这样构建模型:
model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),
data=data1)
并且我使用 MuMIn::dredge()
函数(稍后执行模型平均),我将获得它们之间所有可能的组合,但我不希望 (1|var4)
与 (1|var5)
.
那么,是否可以限制模型组合?这样我就可以避免不必要的模型并节省计算时间。
我不知道如何在 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()
进行 dredging/model 平均的文档(事实上,我不相信这是个好主意)。 如果你想用恰好一个固定效应项和一个随机效应项拟合所有模型,你可以按如下方式进行:
设置所有组合:
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"))
}
现在可以使用lapply
或sapply
对列表的元素进行操作,例如:
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.org
、r-sig-ecology@r-project.org
,或向 MuMIn
(maintainer("MuMIn")
) 的维护者发送电子邮件...
以防万一有人正在寻找更新的解决方案...您现在可以使用 dredge 的 subset 参数更轻松地完成此操作:
#full model
model1 <- glmer(x~var1+var2+var3+(1|var4)+(1|var5)+(1|var6),data=data1)
#exclude models containing both (1|var4) & (1|var5) at the same time
dredge(model1, subset = !((1|var4) && (1|var5)))