如何协调 afex 混合效果模型输出与 sjPlot 可视化
How to reconcile afex mixed-effects model output with sjPlot visualisation
我在 R 中用 afex::mixed
拟合了一个混合效果模型(通常我使用 lme4::lmer
但我读到 ||
符号不起作用适合该包中的分类变量,see here),像这样:
>str(DF)
'data.frame': 1521 obs. of 3 variables:
$ p: Factor w/ 100 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 2 2 ...
$ a: Factor w/ 2 levels "Down","Up": 2 2 2 2 2 2 2 2 2 2 ...
$ y: num 12 0 13 0 0 10 5 0 0 5 ...
>
>
> # fit mixed effects model with afex::mixed
> m1 <- mixed(y ~ a + (a||p), # random slopes and intercepts by participant, no correlation parameters
+ data = DF,
+ expand_re = TRUE,
+ method = "S",
+ return = "merMod")
Contrasts set to contr.sum for the following variables: a, p
我主要感兴趣的是a
对y
的固定效果,所以我这样检查:
> fixef(m1)
(Intercept) a1
6.837455 4.608073
我(也许不正确?)将此解释为模型预测 a == "down"
、y
将比 a == "up"
.
大 4.61
然后我用 sjPlot::plot_model
可视化模型,如下所示:
plot_model(m1, type = "pred", terms = "a")
为什么这个图似乎比模型的统计输出显示出更大的固定效应?两点之差不应该是4.61吗?如果不是,情节显示的是什么?
我可以使用 sjPlot::get_model_data
:
检索正在可视化的确切数据
> get_model_data(m1, terms = "a", type = "pred")
# Predicted values of y
# x = a
x | Predicted | SE | group_col | 95% CI
-------------------------------------------------
1 | 11.45 | 0.40 | 1 | [10.65, 12.24]
2 | 2.23 | 0.55 | 1 | [ 1.15, 3.31]
Adjusted for:
* re1.a1 = -0.05
* p = 0 (population-level)
但是我仍然对这与模型输出的关系感到困惑,特别是 a
的固定效应。
我还可以使用 afex::afex_plot
:
重新创建 sjPlot
可视化
> afex_plot(m1, x = "a", mapping = c("color"))
Aggregating data over: p
这里最有趣的是消息Aggregating data over: p
。这是说没有考虑p
的随机效应吗?如果是这样,这与根本不引用模型的绘图有何不同?例如,尽管只是 y ~ x
行,但以下内容似乎绘制了相同的值...
ggplot(DF, aes(x = a, y = y, color = a))+
geom_smooth(aes(group = 1), method = "lm", se = T, color = "black")
这是由变量从 Afex 获取总和对比引起的,这是对 lme4 标准虚拟编码的重要改进。
本质上你说的是对的,你可能错误地解释了模型系数,因为和对比编码可以将你的变量级别'Down'设置为-1,而将'Up'设置为1。简单算术表明这可能是正确的:6.83 - 4.61 ~ 2.23; 6.83 + 4.61 ~ 11.45.
您可以尝试查看模型中因子水平的编码方式以解决此问题。我自己无法做到这一点,因为您没有提供可重现的示例。
我在 R 中用 afex::mixed
拟合了一个混合效果模型(通常我使用 lme4::lmer
但我读到 ||
符号不起作用适合该包中的分类变量,see here),像这样:
>str(DF)
'data.frame': 1521 obs. of 3 variables:
$ p: Factor w/ 100 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 2 2 ...
$ a: Factor w/ 2 levels "Down","Up": 2 2 2 2 2 2 2 2 2 2 ...
$ y: num 12 0 13 0 0 10 5 0 0 5 ...
>
>
> # fit mixed effects model with afex::mixed
> m1 <- mixed(y ~ a + (a||p), # random slopes and intercepts by participant, no correlation parameters
+ data = DF,
+ expand_re = TRUE,
+ method = "S",
+ return = "merMod")
Contrasts set to contr.sum for the following variables: a, p
我主要感兴趣的是a
对y
的固定效果,所以我这样检查:
> fixef(m1)
(Intercept) a1
6.837455 4.608073
我(也许不正确?)将此解释为模型预测 a == "down"
、y
将比 a == "up"
.
然后我用 sjPlot::plot_model
可视化模型,如下所示:
plot_model(m1, type = "pred", terms = "a")
为什么这个图似乎比模型的统计输出显示出更大的固定效应?两点之差不应该是4.61吗?如果不是,情节显示的是什么?
我可以使用 sjPlot::get_model_data
:
> get_model_data(m1, terms = "a", type = "pred")
# Predicted values of y
# x = a
x | Predicted | SE | group_col | 95% CI
-------------------------------------------------
1 | 11.45 | 0.40 | 1 | [10.65, 12.24]
2 | 2.23 | 0.55 | 1 | [ 1.15, 3.31]
Adjusted for:
* re1.a1 = -0.05
* p = 0 (population-level)
但是我仍然对这与模型输出的关系感到困惑,特别是 a
的固定效应。
我还可以使用 afex::afex_plot
:
sjPlot
可视化
> afex_plot(m1, x = "a", mapping = c("color"))
Aggregating data over: p
这里最有趣的是消息Aggregating data over: p
。这是说没有考虑p
的随机效应吗?如果是这样,这与根本不引用模型的绘图有何不同?例如,尽管只是 y ~ x
行,但以下内容似乎绘制了相同的值...
ggplot(DF, aes(x = a, y = y, color = a))+
geom_smooth(aes(group = 1), method = "lm", se = T, color = "black")
这是由变量从 Afex 获取总和对比引起的,这是对 lme4 标准虚拟编码的重要改进。
本质上你说的是对的,你可能错误地解释了模型系数,因为和对比编码可以将你的变量级别'Down'设置为-1,而将'Up'设置为1。简单算术表明这可能是正确的:6.83 - 4.61 ~ 2.23; 6.83 + 4.61 ~ 11.45.
您可以尝试查看模型中因子水平的编码方式以解决此问题。我自己无法做到这一点,因为您没有提供可重现的示例。