R 混合效应模型预测区间的绘制

R 混合效应模型预测区间的绘制,r,ggplot2,prediction,modeling,lme4,R,Ggplot2,Prediction,Modeling,Lme4,我已经为我的实验实现了一个混合效应模型,用于研究错误率如何影响反应时间。我现在想计算预测区间,然后绘制它们 这里是我的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.

我已经为我的实验实现了一个混合效应模型,用于研究错误率如何影响反应时间。我现在想计算预测区间,然后绘制它们

这里是我的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))


我的图对我来说很有意义:我有一条黑线,指示每个错误率的预测值,还有一个阴影区域,表示间隔。然而,我不确定为什么我在数据点内的每个错误率级别中间都得到了直的垂直线。而且我的水平预测线似乎不可靠。。。有人知道为什么会这样,以及如何根除它吗?非常感谢

用一条线连接
错误率
值而不使用垂直线的一种方法是绘制
y
变量
fit
的平均值。这是通过
stat\u 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值?

如果运行
table(pred$error\u rate)
您将只看到3个唯一的值。这些线似乎在连接这些点。另外,代码会抛出一个错误,
error in FUN(X[[i]],…):找不到对象“FirstSteeringTime”
@ruibradas抱歉,错误是因为我切换了变量名-FirstSteeringTime应该是RT(现在在示例中编辑)。所以为了去掉连接点,我可以在很大的错误率范围内模拟新的数据,而不是我得到的三个?也许你可以满足于平均线?请看我的答案。@RuiBarradas我明白了,所以通过平均每个错误率内的拟合,我最终得到每个错误率的一个值,从而得到一条直线水平线,而不是垂直线。有道理。非常感谢。
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")