Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用统计汇总的标准误差条_R_Ggplot2_Plyr - Fatal编程技术网

R 使用统计汇总的标准误差条

R 使用统计汇总的标准误差条,r,ggplot2,plyr,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=upp

以下代码使用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()
我的问题是如何使用标准错误条的stat_摘要实现。问题是,要计算SE,您需要每个条件的观测数,并且必须在mean_sdl的乘数中访问


如何在ggplot中访问此信息?有没有一个简洁的非黑客解决方案?

好吧,我不能告诉你如何在
stat\u summary
中按组获取乘数

但是,您的目标似乎是绘制表示
ggplot
中平均值的一个标准误差的均值和误差条,而无需在绘制前汇总数据集

ggplot2中有一个
mean_se
函数,我们可以使用它代替Hmisc中的
mean_cl_normal
mean_se
函数的默认乘数为1,因此如果需要标准错误条,则无需传递任何额外参数

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_se, geom = "errorbar")
如果要使用
Hmisc
中的
mean\u cl\u normal
函数,则必须将乘数更改为1,以便从平均值中获得一个标准误差。
mult
参数是
mean\u cl\u normal
的参数。需要传递给正在使用的summary函数的参数需要作为
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))
在ggplot2的2.0之前版本中,可以直接传递参数:

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

对不起,我不太明白你写的“你需要每个条件的观察次数,这必须在mean_sdl的乘数中访问”是什么意思。从
?smean.sdl
:“
mult
是用于获取样本平均值覆盖区间的标准偏差的乘数。默认值为mult=2,使用正负2个标准偏差”。我假设您已经看到了
stat\u summary
和错误条上的所有示例,它们似乎“自动”运行。标准错误是SD除以sqrt(n)。正如您在我的第一个代码片段中所看到的,mult这样做是为了得到标准错误。但是,在ggplot中,您无法访问数据帧每一次折叠的N,因为这种“摘要”是在内部完成的。在ddply中,很容易“手动”访问折叠以查询其长度(n)。在stat_summary中您将如何做到这一点?为了清楚起见,此参数必须如下所示:stat_summary(fun.data=mean_sdl,mult=sqrt(length(df$qsec))^-1),geom=“errorbar”)。问题是我不能为mtcars的每个子集访问df$qsec来获得长度太棒了!我的印象是,mean_cl_normal产生了95%的CI。如果不是1,那么默认乘数是什么?根据
smean.cl.normal
的帮助页面,它是基于置信区间大小的n-1自由度t分布的适当分位数(默认为95%)。因此它是
mult=qt((1+conf.int)/2,n-1)
。根据这一点,
mean\u cl\u normal
返回“假设正态的样本平均值和95%置信区间”。@aosmith:感谢您的解决方案!它一直在为我工作,直到我更新到最新版本的ggplot2(2.2.0)。现在,我不能再使用mean_cl_normal来计算标准误差条了。有人解决了这个问题吗?@SolLago I更新了答案,用当前版本的ggplot2给出了解决方案
ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", mult = 1)