使用ggplot2和R创建正态分布散点图的置信区间

11

我有一些数据,比如说(实际上,我有大量的数据):

x   y
0.1 0.267
0.2 0.254
0.3 0.182
0.4 0.173
0.5 0.121
0.6 0.089
0.7 0.070
0.8 0.056
0.9 0.031

这些数据大致遵循着一条趋势曲线,我使用ggplot的stat_smooth()函数进行了绘制。stat_smooth()创建了一个灰色区域,该区域内有95%的置信度认为趋势线将处于其中。

相反,我想要做的是,在大概率正态分布的情况下,创建一个灰色区域,使其覆盖数据点将会落入的地方(即在趋势线周围以95%的置信度范围内)。

换句话说,我想要在ggplot中用平滑线连接误差条的顶部和底部,并对它们之间进行着色。请问我应该如何处理?

谢谢。

1个回答

22

你所需要的实际上是称为预测区间的东西。以下是在 ggplot2 中执行此操作的其中一种方法。

library(ggplot2)

# RUN REGRESSION AND APPEND PREDICTION INTERVALS
lm_fit  = lm(total_bill ~ tip, data = tips)
tips_with_pred = data.frame(tips, predict(lm_fit, interval = 'prediction'))

# PLOT WITH REGRESSION LINE, CONFIDENCE INTERVAL AND PREDICTION INTERVAL
p0 <- ggplot(tips_with_pred, aes(x = tip, y = total_bill)) + 
  geom_point() +
  geom_smooth(method = 'lm', aes(fill = 'confidence'), alpha = 0.5) +
  geom_ribbon(aes(y = fit, ymin = lwr, ymax = upr, fill = 'prediction'),
    alpha = 0.2) +
  scale_fill_manual('Interval', values = c('green', 'blue')) +
  opts(legend.position = c(0.20, 0.85))

在此输入图片描述


有趣的数据...有很多慷慨的人。不过,我认为x轴和y轴应该反转,对吧? - yosukesabai
是的,我只是匆忙拼凑了一些东西来说明这两个间隔的构造。 - Ramnath
3
美丽。我认为这篇文章终于让我下定决心学习第三个R图形系统。 - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接