我正在尝试使用 ggplot2 用阴影区域表示的“置信区间”来绘制某些数据的ECDF。我在将geom_ribbon()stat_ecdf()结合使用时遇到了麻烦。

考虑以下示例数据:

set.seed(1)
dat <- data.frame(variable = rlnorm(100) + 2)
dat <- transform(dat, lower = variable - 2, upper = variable + 2)

> head(dat)
  variable     lower    upper
1 2.534484 0.5344838 4.534484
2 3.201587 1.2015872 5.201587
3 2.433602 0.4336018 4.433602
4 6.929713 4.9297132 8.929713
5 3.390284 1.3902836 5.390284
6 2.440225 0.4402254 4.440225

我能够使用以下方式生成variable的ECDF
library("ggplot2")
ggplot(dat, aes(x = variable)) +
    geom_step(stat = "ecdf")

但是,我无法使用lowerupper作为yminymaxgeom_ribbon()美学来将置信区间叠加在另一层上。我试过了:
ggplot(dat, aes(x = variable)) +
    geom_ribbon(aes(ymin = lower, ymax = upper), stat = "ecdf") +
    geom_step(stat = "ecdf")

但这会引发以下错误
Error: geom_ribbon requires the following missing aesthetics: ymin, ymax

有没有办法哄骗geom_ribbon()stat_ecdf()一起使用以产生阴影置信区间?或者,有人可以建议一种替代方法,将由lowerupper定义的阴影多边形添加为ECDF图的图层吗?

最佳答案

尝试以下操作(在黑暗中拍摄一些照片):

ggplot(dat, aes(x = variable)) +
  geom_ribbon(aes(x = variable,ymin = ..y..-2,ymax = ..y..+2), stat = "ecdf",alpha=0.2) +
  geom_step(stat = "ecdf")

好的,这与您尝试做的事情不同,但是应该可以解释正在发生的事情。 stat返回的数据帧仅包含原始x和计算出的y,所以我认为这就是您要做的全部工作。即stat_ecdf一次只计算单个x的累积分布函数。

我唯一想到的另一件事是显而易见的,分别计算上下限,如下所示:
l <- ecdf(dat$lower)
u <- ecdf(dat$upper)
v <- ecdf(dat$variable)
dat$lower1 <- l(dat$variable)
dat$upper1 <- u(dat$variable)
dat$variable1 <- v(dat$variable)

ggplot(dat,aes(x = variable)) +
  geom_step(aes(y = variable1)) +
  geom_ribbon(aes(ymin = upper1,ymax = lower1),alpha = 0.2)

关于r - 如何将stat_ecdf与geom_ribbon结合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20277658/

10-16 23:29