绘制混合效应模型的预测区间
Plotting prediction intervals for mixed effects model
我已经为错误率如何影响反应时间的实验实施了混合效应模型。我现在想计算预测区间,然后绘制它们。
这是我的 df 的例子
ppid error_rate RT pNum
1 1_1_4 2.865371 0.43339 1
2 1_1_77 11.459301 0.45000 1
3 1_1_80 2.865371 0.38320 1
4 1_2_26 3.820155 0.49990 1
5 1_2_31 2.865371 0.56680 1
6 1_2_32 3.820155 0.58330 1
7 1_2_33 2.865371 0.50000 1
8 1_2_40 3.820155 0.44980 1
9 1_2_43 2.865371 0.56660 1
10 1_2_54 11.459301 0.46670 1
11 1_2_63 2.865371 0.43350 1
12 1_2_64 2.865371 0.46680 1
13 1_2_71 2.865371 0.54990 1
14 1_2_76 2.865371 0.48350 1
15 1_2_85 2.865371 0.53340 1
16 1_2_88 3.820155 0.43340 1
17 1_2_89 3.820155 0.53320 1
18 1_3_0 3.820155 0.45080 1
19 1_3_1 2.865371 0.45022 1
20 1_3_19 2.865371 0.46651 1
然后我实施混合效应模型,为每个数据点生成一些预测区间,然后将我的原始数据与预测相结合:
library(lme4)
library(merTools)
library(ggplot2)
fit <- lmer(formula = RT ~ error_rate + (1 + error_rate | pNum), data = data)
pred <- cbind(data, predictInterval(fit, data))
然后我使用 ggplot 绘制它并得到以下图:
ggplot(pred) +
geom_line(aes(x = error_rate, y = fit)) +
geom_ribbon(aes(x = error_rate, ymin = lwr, ymax = upr), alpha = .2) +
geom_jitter(aes(x = error_rate, y = RT), alpha = .1) +
ylab("RT")
我的情节对我来说很有意义:黑线表示每个错误率的预测值,阴影区域表示间隔。但是我不确定为什么我会在数据点内的每个错误率级别的中间得到垂直直线?而且我的水平预测线看起来很不稳定......有谁知道为什么会这样,以及如何根除它?非常感谢!
一种不用垂直线连接 error_rate
值的方法是绘制 y
变量 [=13] 的 mean 值=].这是通过 stat_summary
完成的,如下所示。
ggplot(pred, aes(x = error_rate, y = fit)) +
stat_summary(fun.y = mean, geom = "line", show.legend = FALSE) +
geom_ribbon(aes(x = error_rate, ymin = lwr, ymax = upr), alpha = 0.2) +
geom_jitter(aes(x = error_rate, y = RT), alpha = 0.1) +
ylab("RT")
注:问题代码中,色带用alpha = 0.2
绘制,点用alpha = 0.1
绘制。让这些点比基础预测带更不透明会更有意义吗?因此要交换 alpha 值?
我已经为错误率如何影响反应时间的实验实施了混合效应模型。我现在想计算预测区间,然后绘制它们。
这是我的 df 的例子
ppid error_rate RT pNum
1 1_1_4 2.865371 0.43339 1
2 1_1_77 11.459301 0.45000 1
3 1_1_80 2.865371 0.38320 1
4 1_2_26 3.820155 0.49990 1
5 1_2_31 2.865371 0.56680 1
6 1_2_32 3.820155 0.58330 1
7 1_2_33 2.865371 0.50000 1
8 1_2_40 3.820155 0.44980 1
9 1_2_43 2.865371 0.56660 1
10 1_2_54 11.459301 0.46670 1
11 1_2_63 2.865371 0.43350 1
12 1_2_64 2.865371 0.46680 1
13 1_2_71 2.865371 0.54990 1
14 1_2_76 2.865371 0.48350 1
15 1_2_85 2.865371 0.53340 1
16 1_2_88 3.820155 0.43340 1
17 1_2_89 3.820155 0.53320 1
18 1_3_0 3.820155 0.45080 1
19 1_3_1 2.865371 0.45022 1
20 1_3_19 2.865371 0.46651 1
然后我实施混合效应模型,为每个数据点生成一些预测区间,然后将我的原始数据与预测相结合:
library(lme4)
library(merTools)
library(ggplot2)
fit <- lmer(formula = RT ~ error_rate + (1 + error_rate | pNum), data = data)
pred <- cbind(data, predictInterval(fit, data))
然后我使用 ggplot 绘制它并得到以下图:
ggplot(pred) +
geom_line(aes(x = error_rate, y = fit)) +
geom_ribbon(aes(x = error_rate, ymin = lwr, ymax = upr), alpha = .2) +
geom_jitter(aes(x = error_rate, y = RT), alpha = .1) +
ylab("RT")
我的情节对我来说很有意义:黑线表示每个错误率的预测值,阴影区域表示间隔。但是我不确定为什么我会在数据点内的每个错误率级别的中间得到垂直直线?而且我的水平预测线看起来很不稳定......有谁知道为什么会这样,以及如何根除它?非常感谢!
一种不用垂直线连接 error_rate
值的方法是绘制 y
变量 [=13] 的 mean 值=].这是通过 stat_summary
完成的,如下所示。
ggplot(pred, aes(x = error_rate, y = fit)) +
stat_summary(fun.y = mean, geom = "line", show.legend = FALSE) +
geom_ribbon(aes(x = error_rate, ymin = lwr, ymax = upr), alpha = 0.2) +
geom_jitter(aes(x = error_rate, y = RT), alpha = 0.1) +
ylab("RT")
注:问题代码中,色带用alpha = 0.2
绘制,点用alpha = 0.1
绘制。让这些点比基础预测带更不透明会更有意义吗?因此要交换 alpha 值?