Стандартные бары ошибок с использованием stat_summary

Следующий код создает штриховые графики со стандартными барами ошибок с использованием Hmisc, ddply и ggplot:

means_se <- ddply(mtcars,.(cyl),
                  function(df) smean.sdl(df$qsec,mult=sqrt(length(df$qsec))^-1))
colnames(means_se) <- c("cyl","mean","lower","upper")
ggplot(means_se,aes(cyl,mean,ymax=upper,ymin=lower,group=1)) + 
  geom_bar(stat="identity") +  
  geom_errorbar()

Однако реализация вышеперечисленного с использованием вспомогательных функций, таких как mean_sdl, кажется намного лучше. Например, следующий код создает график с 95% CI ошибками:

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_sdl, geom = "errorbar")

Мой вопрос заключается в том, как использовать реализацию stat_summary для стандартных баров ошибок. Проблема в том, что для вычисления SE вам необходимо количество наблюдений за состояние, и к этому нужно обращаться в мультипликаторе mean_sdl.

Как мне получить доступ к этой информации в ggplot? Для этого есть аккуратное не-хакерское решение?

Ответы

Ответ 1

Ну, я не могу сказать вам, как получить множитель по группам в stat_summary.

Однако, похоже, что ваша цель состоит в построении сред и баров ошибок, которые представляют собой одну стандартную ошибку из среднего значения в ggplot без суммирования набора данных перед построением графика. Вот простой способ сделать это, используя функцию mean_cl_normal из Hmisc и сменив множитель на 1, чтобы вы получили стандартную ошибку от среднего.

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", mult = 1)

EDIT Обновление для ggplot_2.0.0

Начиная с версии ggplot2 версии 2.0.0, аргументы, которые необходимо передать в используемую итоговую функцию, должны быть представлены как список аргумента fun.args. Аргумент mult является аргументом для mean_cl_normal.

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1))

Однако теперь в ggplot2 есть функция mean_se, которую мы можем использовать вместо mean_cl_normal из Hmisc. Функция mean_se имеет множитель по умолчанию 1, поэтому нам не нужно передавать какие-либо дополнительные аргументы, если мы хотим стандартные бары ошибок.

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_se, geom = "errorbar")