R:防止“~”。在来自 运行 的线性混合效应模型中,自变量既是固定效应又是随机效应
R: Prevent "~." in a linear mixed effect model from running an independent variable as both a fixed and random effect
当我 运行 下面的代码时,我似乎 运行 遇到了一些问题:
library(lme4)
columns <- c("disp", "hp", "wt", "qsec", "vs")
X <- mtcars[,c(columns, 'cyl', 'carb', 'gear')] # data
rf <- lmer(cyl~ (carb | gear) +., data = X)
rf
### The output that I don't want (lists 'carb' and 'gear' as fixed variables):
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ (carb | gear) + .
Data: X
REML criterion at convergence: 76.9662
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.2887
carb 0.2039 -1.00
Residual 0.5202
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) carb gear disp hp wt
10.179140 0.025990 -0.873174 0.003883 0.008190 0.089656
qsec vs
-0.159582 -0.779400
如您所见,当我只需要将它们用于我的随机效应变量时,它将 'carb' 和 'gear' 计为固定变量。
我的目标是让代码保持类似的格式,并且能够 运行 没有变量 'carb' 和 'gear' 的模型被作为固定效应(仅作为随机效应)。
如何防止“~”。在第一个模型中选择 'carb' 和 'gear' 作为固定变量,以便它可以产生与下面第二个模型相同的输出?
我需要的输出:(仅 'carb' 和 'gear' 列为随机效果):
> el <- lmer(cyl~ disp + hp + wt + qsec + vs + (carb | gear), data = mtcars)
> el
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ disp + hp + wt + qsec + vs + (carb | gear)
Data: mtcars
REML criterion at convergence: 79.7548
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.9932
carb 0.1688 -0.82
Residual 0.5263
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) disp hp wt qsec vs
6.848103 0.004024 0.006929 0.172789 -0.169145 -0.785878
非常感谢任何帮助!
R 公式符号中的 .
快捷方式表示“data
中的每个变量,但公式 left-hand 一侧的变量除外。”这只是一个方便的 shorthand,最初是为了与 lm()
功能一起使用。它不是很灵活,因为您在尝试将它应用到与预期不同的上下文中时发现了这一点。 lmer()
公式包括因变量、固定效应和随机效应。所以在这种情况下 .
快捷方式将不起作用。为避免 hard-coding 变量名称,您可以通过粘贴字符串将公式放在一起,如下所示:
columns <- c("disp", "hp", "wt", "qsec", "vs")
fixed_effects <- paste(columns, collapse = '+')
model_formula <- as.formula(paste('cyl ~ (carb|gear) +', fixed_effects))
model_formula
# cyl ~ (carb | gear) + disp + hp + wt + qsec + vs
rf <- lmer(model_formula, data = mtcars)
这里我们使用 paste()
和 collapse
参数来连接 columns
的所有元素,每个元素之间有一个 +
。然后我们再次 paste()
将公式中带有 left-hand 的部分和随机效应与固定效应结合起来。这为我们提供了作为字符串的完整模型公式,我们可以使用 as.formula()
.
将其转换为公式
当我 运行 下面的代码时,我似乎 运行 遇到了一些问题:
library(lme4)
columns <- c("disp", "hp", "wt", "qsec", "vs")
X <- mtcars[,c(columns, 'cyl', 'carb', 'gear')] # data
rf <- lmer(cyl~ (carb | gear) +., data = X)
rf
### The output that I don't want (lists 'carb' and 'gear' as fixed variables):
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ (carb | gear) + .
Data: X
REML criterion at convergence: 76.9662
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.2887
carb 0.2039 -1.00
Residual 0.5202
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) carb gear disp hp wt
10.179140 0.025990 -0.873174 0.003883 0.008190 0.089656
qsec vs
-0.159582 -0.779400
如您所见,当我只需要将它们用于我的随机效应变量时,它将 'carb' 和 'gear' 计为固定变量。
我的目标是让代码保持类似的格式,并且能够 运行 没有变量 'carb' 和 'gear' 的模型被作为固定效应(仅作为随机效应)。
如何防止“~”。在第一个模型中选择 'carb' 和 'gear' 作为固定变量,以便它可以产生与下面第二个模型相同的输出?
我需要的输出:(仅 'carb' 和 'gear' 列为随机效果):
> el <- lmer(cyl~ disp + hp + wt + qsec + vs + (carb | gear), data = mtcars)
> el
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ disp + hp + wt + qsec + vs + (carb | gear)
Data: mtcars
REML criterion at convergence: 79.7548
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.9932
carb 0.1688 -0.82
Residual 0.5263
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) disp hp wt qsec vs
6.848103 0.004024 0.006929 0.172789 -0.169145 -0.785878
非常感谢任何帮助!
R 公式符号中的 .
快捷方式表示“data
中的每个变量,但公式 left-hand 一侧的变量除外。”这只是一个方便的 shorthand,最初是为了与 lm()
功能一起使用。它不是很灵活,因为您在尝试将它应用到与预期不同的上下文中时发现了这一点。 lmer()
公式包括因变量、固定效应和随机效应。所以在这种情况下 .
快捷方式将不起作用。为避免 hard-coding 变量名称,您可以通过粘贴字符串将公式放在一起,如下所示:
columns <- c("disp", "hp", "wt", "qsec", "vs")
fixed_effects <- paste(columns, collapse = '+')
model_formula <- as.formula(paste('cyl ~ (carb|gear) +', fixed_effects))
model_formula
# cyl ~ (carb | gear) + disp + hp + wt + qsec + vs
rf <- lmer(model_formula, data = mtcars)
这里我们使用 paste()
和 collapse
参数来连接 columns
的所有元素,每个元素之间有一个 +
。然后我们再次 paste()
将公式中带有 left-hand 的部分和随机效应与固定效应结合起来。这为我们提供了作为字符串的完整模型公式,我们可以使用 as.formula()
.