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