使用stat_summary的标准误差条

ale*_*ph4 20 r ggplot2 plyr

以下代码使用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()
Run Code Online (Sandbox Code Playgroud)

但是,使用诸如mean_sdl之类的辅助函数实现上述功能似乎要好得多.例如,以下代码生成具有95%CI错误条的图:

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

我的问题是如何使用stat_summary实现标准误差条.问题是要计算SE,你需要每个条件的观测数量,这必须在mean_sdl的乘数中访问.

如何在ggplot中访问此信息?对此有一个简洁的非hacky解决方案吗?

aos*_*ith 46

好吧,我不能告诉你如何按组进入乘数stat_summary.

但是,看起来您的目标是绘制平均值和误差线,这些平均值表示平均值中的一个标准误差,ggplot而不会在绘图之前汇总数据集.

有一个mean_se在功能上GGPLOT2,我们可以代替使用mean_cl_normalHmisc.该mean_se函数的乘数为1,因此如果我们需要标准误差条,我们不需要传递任何额外的参数.

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

如果要使用mean_cl_normal函数from Hmisc,则必须将乘数更改为1,以便从均值获得一个标准误差.这个mult论点是一个论据mean_cl_normal.您需要传递给正在使用的汇总函数的fun.args参数需要作为参数的列表给出:

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))
Run Code Online (Sandbox Code Playgroud)

在2.0版本的ggplot2中,参数可以直接传递:

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

  • 根据该[简介](http://www.ling.upenn.edu/~joseff/rstudy/summer2010_ggplot2_intro.html),``mean_cl_normal返回"样本平均值和95%置信区间假定正常性." (2认同)
  • @SolLago我更新了答案以提供当前版本的*ggplot2*的解决方案 (2认同)