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

R: Create a linear mixed-effect model loop that removes one fixed independent variable, then adds it back in and removes another

我正在寻找一种创建线性混合效应模型循环的方法,该循环移除一个固定效应独立变量,运行模型,将其重新添加,然后从模型中移除另一个固定独立变量。

例如:

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)

重新添加了显示并移除了生命值的部分模型:lmer(cyl ~ disp + mpg (carb|gear), mtcars)

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

非常感谢!

查看 MuMIn 模型平均包。您通常从 运行 完整模型开始,dredge 函数可用于迭代 运行 具有所有预测变量组合的模型。您可以指定要保持一致的效果,例如你的 (carb|gear) 随机效应。输出可以为每个模型提供 table 个结果。

Map 在构造公式 fo 的固定变量上,使用 reformulate 和 运行 lmer。这将生成一个 "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