【问题标题】:Plotting prediction intervals for mixed effects model绘制混合效应模型的预测区间
【发布时间】:2019-08-21 12:32:56
【问题描述】:

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

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

我的情节对我来说很有意义:黑线表示每个错误率的预测值,阴影区域表示间隔。但是我不确定为什么我的数据点中每个错误率级别的中间都有垂直线?此外,我的水平预测线似乎很不稳定......有人知道为什么会这样,以及如何根除它吗?非常感谢!

【问题讨论】:

  • 如果您运行 table(pred$error_rate),您将只看到 3 个唯一值。这些线似乎连接了这些点。此外,代码会引发错误,Error in FUN(X[[i]], ...) : object 'FirstSteeringTime' not found
  • @RuiBarradas 抱歉,错误是因为我切换了变量名称 - FirstSteeringTime 应该是 RT(现在在示例中编辑)。因此,为了摆脱连接点,我也许可以在大范围的错误率上模拟新数据,而不是我得到的三个?
  • 也许你可以接受平均线?看我的回答。
  • @RuiBarradas 我看到了,所以通过平均每个错误率内的拟合,我最终得到每个错误率一个值,因此是一条直线而不是垂直线。说得通。谢谢!

标签: r ggplot2 prediction modeling lme4


【解决方案1】:

用一条线连接error_rate 值而不用垂直线的一种方法是绘制y 变量fitmean 值。这是通过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 值?

【讨论】:

  • 也许这是一个愚蠢的问题,但是假设您想根据您创建的 lmer 模型绘制一个新的预测。例如,在图中,您绘制了从 ~2.5 到 ~10.5 的 lmer 和标准误差。如何扩展 lmer 模型的预测,例如从 (0,2.5) 和 (10.5,15)?你需要创建一个新的数据框吗?谢谢。
  • @Rachel 您可以创建一个data.frame,然后predict(fit, newdata = new_df) 以获取响应值。在新的 df 中创建一个新列,以与问题中类似的方式 cbind(...) 并使用 geom_point(data = new_df, aes(etc)) 绘制。
  • pff 我卡住了,呵呵,你能帮帮我吗? stackoverflow.com/questions/71210932/…
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
相关资源
最近更新 更多