R:创建一个线性混合效应模型循环,删除一个固定的自变量,然后将其添加回并删除另一个



我正在寻找一种方法来创建一个线性混合效果模型循环,该循环删除一个固定效果自变量,运行模型,将其添加回中,并从模型中删除另一个固定自变量。

例如:

library(lme4)

L1 <- lmer(cyl ~ disp + hp + mpg (carb|gear), mtcars)

我如何创建这个模型的循环,以便每次新的回归循环迭代都删除一个固定效果自变量,在下一次迭代中重新添加,并删除一个不同的固定自变量?

这样做将产生以下模型:

原始完整型号:lmer(cyl ~ disp + mpg + (carb|gear), mtcars)

去除mpg的部分模型:lmer(cyl ~ disp + hp + (carb|gear), mtcars)

重新添加mpg并删除disp的部分模型:lmer(cyl ~ hp + mpg (carb|gear), mtcars)

重新添加disp并删除hp的部分型号:lmer(cyl ~ disp + mpg (carb|gear), mtcars)

我也很好奇如何在每次循环迭代后将每个模型添加到列表中。

非常感谢!

Map在固定变量上使用reformulate并运行lmer构建公式fo。这将生成一个"lmerMod"对象的命名列表,fixed的每个组件都有一个对象,这样该模型就省略了该组件。完整模型将有一个空名称。

library(lme4)
fixed <- c("", "disp", "hp", "mpg")
f <- function(v, data) {
fo <- reformulate(c(setdiff(fixed, v), "(carb | gear)"), "cyl")
cat("Running", format(fo), "n")
lmer(fo, data = data)
}
out <- Map(f, fixed, MoreArgs = list(data = mtcars))
## Running cyl ~ disp + hp + mpg + (carb | gear) 
## boundary (singular) fit: see ?isSingular
## Running cyl ~ hp + mpg + (carb | gear) 
## Running cyl ~ disp + mpg + (carb | gear) 
## boundary (singular) fit: see ?isSingular
## Running cyl ~ disp + hp + (carb | gear) 

drop1

此外,lme4具有用于drop1"merMod"方法,该方法将使用extractAIC来计算每个单项删除的AIC值。

fm <- lmer(cyl ~ disp + hp + mpg + (carb | gear), data = mtcars)
## boundary (singular) fit: see ?isSingular
drop1(fm)
## boundary (singular) fit: see ?isSingular
## Single term deletions
##
## Model:
## cyl ~ disp + hp + mpg + (carb | gear)
##        npar    AIC
## <none>      79.239
## disp      1 86.511
## hp        1 81.417
## mpg       1 78.901

这与以下内容类似,显示了每个单项删除的自由度和AIC。

sapply(out, extractAIC)
##                  disp       hp      mpg
## [1,]  8.00000  7.00000  7.00000  7.00000
## [2,] 79.23877 86.51109 81.41726 78.90149

查看用于模型平均的MuMIn包。通常从运行完整模型开始,dredge函数可用于迭代运行具有所有预测因子组合的模型。你可以指定你想要保持一致的效果,例如你的(碳水化合物|装备(随机效果。输出可以为您提供每个模型的结果表。