我正在尝试使用 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
的ECDFlibrary("ggplot2")
ggplot(dat, aes(x = variable)) +
geom_step(stat = "ecdf")
但是,我无法使用
lower
和upper
作为ymin
的ymax
和geom_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()
一起使用以产生阴影置信区间?或者,有人可以建议一种替代方法,将由lower
和upper
定义的阴影多边形添加为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/