Я пытаюсь нарисовать ECDF некоторых данных с «доверительным интервалом», представленным через затененную область, используя ggplot2. У меня возникли проблемы с объединением geom_ribbon()
с stat_ecdf()
для достижения эффекта, которым я пользуюсь.Как совместить stat_ecdf с geom_ribbon?
Рассмотрим следующий пример данных:
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
Я могу производить ECDF из variable
использованием
library("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?
Спасибо, Джоран. Не могли бы вы расширить свое последнее предложение? Не уверен, что я полностью следую этому, но насколько я могу судить по вашему ответу, я не могу сделать это через 'stat_ecdf', если' lower' и 'upper' уже существуют? +/- 2 бит - это просто фиктивные данные; информация CI, которую я имею, является результатом последующего моделирования производной статистики, вычисленной по установленной модели. –
@GavinSimpson Да, я думаю, что это невозможно сразу в ggplot (хотя это будет хорошая возможность добавить, я думаю). Все, что я имел в виду с последним, было то, что вам, возможно, придется вычислять все значения ECDF вручную, а затем строить их. – joran
Спасибо, я понимаю, что вы имеете в виду, вычислите совокупную долю напрямую. Я дам это. +1 –