Как отобразить полосы ошибок на графике R geom_violin

Где-то я делаю очень простую ошибку. Спасибо, что указали, где эта ошибка происходит...

Я хотел бы создать график скрипки с наложением доверительных интервалов и групповых средних. Очень похоже на пример в этот потрясающий новый пакет.

Общий сюжет скрипки без каких-либо CI работает нормально:

p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +
  geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
  geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean, 
                fatten=2, width=.5)

Мои проблемы включают в себя доверительные интервалы.

Я начинаю с создания необходимой сводной статистики:

errbar_lims <- group_by(diamonds, cut) %>% 
  summarize(mean=mean(price), se=sd(price)/sqrt(n()),             
  upper=mean+(2*se), lower=mean-(2*se))

Потом подумал добавить в сюжет с geom_errorbar:

p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +
  geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
  geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean, 
                fatten=2, width=.5) +
  geom_errorbar(aes(x= ymax=errbar_lims$upper, ymin=errbar_lims$lower), 
                stat='identity', width=.25)

Но ошибка ggplot продолжает информировать меня о том, что я сопоставляю эстетику одной группы вместо 5 групп, которые я пытаюсь построить.

Возможно, моя ошибка в том, как я установил отображение в самом начале?


ОБНОВИТЬ

После просмотра нескольких комментариев после первоначальной публикации полный сценарий теперь выглядит следующим образом:

errbar_lims <- group_by(diamonds, cut) %>% 
  summarize(mean=mean(price), se=sd(price)/sqrt(n()), 
        upper=mean+(2*se), lower=mean-(2*se))

p <- ggplot(data=diamonds, aes(x=cut, y=price))
p + geom_violin(aes(x=cut, y=price)) +    
  geom_jitter(height = 0, width = 0.1, alpha = 0.05) +
  geom_crossbar(stat="summary", fun.y=mean, fun.ymax=mean, fun.ymin=mean, 
            fatten=2, width=.5) +
  geom_errorbar(aes(x = cut, ymin = lower, ymax = upper), errbar_lims, inherit = FALSE)

Тем не менее, ошибка сохраняется:

Error in FUN(X[[i]], ...) : object 'price' not found

person Devon O'Rourke    schedule 03.09.2018    source источник
comment
Вы не должны указывать aes с $lower. Передайте данные в geom_errorbar в качестве аргумента и укажите значения, как в любом другом слое геометрии. Что-то вроде этого: geom_errorbar(aes(ymin = lower, ymax = upper), errbar_lims)   -  person pogibas    schedule 03.09.2018
comment
Что-то странное: Error in FUN(X[[i]], ...) : object 'price' not found Есть ли шанс, что предложенные вами аргументы не работают из-за того, что данные, содержащие информацию CI, находятся в отдельном объекте data.frame (errbar_lims), чем остальные (ромбы)?   -  person Devon O'Rourke    schedule 03.09.2018
comment
В последней строке x= ymax=errbar_lims$upper недействительный код R.   -  person Rui Barradas    schedule 03.09.2018
comment
@ DevonO'Rourke Ваша интуиция в правильном направлении. Слой ищет price на основе верхнего уровня aes(y = price). Добавление inherit.aes = FALSE отменяет это. Но вам нужно будет указать x = cut и в этом случае: geom_errorbar(aes(x = cut, ymin = lower, ymax = upper), errbar_lims, inherit = FALSE)   -  person Z.Lin    schedule 03.09.2018
comment
Спасибо @Z.Lin. Это сработало после настройки inherit = FALSE на inherit.aes=FALSE   -  person Devon O'Rourke    schedule 03.09.2018


Ответы (1)


Применительно к этому невероятному коду на github, который вы мне тоже указали.

library(ggplot2)
View(ggplot2::diamonds)

ggstatsplot::ggbetweenstats(data = ggplot2::diamonds, x=cut, y=price, messages=FALSE)

person tcratius    schedule 03.09.2018