绘制平均值,标准差,最小值和最大值的汇总统计信息?


10

我来自经济学背景,通常在该学科中,变量的摘要统计信息记录在表格中。但是,我希望将它们绘制出来。

我可以修改箱形图以使其显示均值,标准差,最小值和最大值,但我不希望这样做,因为箱形图传统上用于显示中位数以及Q1和Q3。

我所有的变量都有不同的标度。如果有人可以提出一种有意义的方式来汇总这些摘要统计信息,那将是很好的。我可以使用R或Stata。


1
欢迎来到清单。如果您在询问R命令,则此问题不在此处。但是,您似乎主要是在询问一个好的情节是什么样子,其次是如何创建它。如果是这样,我建议从标题中删除“带有R”,并在正文中声明您R有空。
彼得·弗洛姆

Answers:


16

Tukey箱形图具有通用性是有原因的,它可以应用于从高斯到泊松等不同分布派生的数据。当数据偏离常态。但是,均值和标准差更容易出现离群值,因此应针对基本分布进行解释。以下解决方案更适用于常规或对数常规数据。您可以通过选择稳健的措施浏览这里,探索WRS [R包在这里

# simulating dataset
set.seed(12)
d1 <- rnorm(100, sd=30)
d2 <- rnorm(100, sd=10)
d <- data.frame(value=c(d1,d2), condition=rep(c("A","B"),each=100))

# function to produce summary statistics (mean and +/- sd), as required for ggplot2
data_summary <- function(x) {
   mu <- mean(x)
   sigma1 <- mu-sd(x)
   sigma2 <- mu+sd(x)
   return(c(y=mu,ymin=sigma1,ymax=sigma2))
}

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_crossbar(stat="summary", fun.y=data_summary, fun.ymax=max, fun.ymin=min)

此外,通过在上面的代码中添加+ geom_jitter()+ geom_point(),您可以同时可视化原始数据值。


感谢@Roland指出小提琴情节。它在与汇总统计数据同时可视化概率密度方面具有优势:

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_violin() + stat_summary(fun.data=data_summary)

这两个示例如下所示。

在此处输入图片说明


2
我更喜欢小提琴情节。
罗兰

1
根据分析的目的,均值和标准差正是您所需要的。但是,我不理解R的summary.data.frame中的不一致。它显示平均值但没有sds。我认为在很多情况下平均值是有用的,但标准差会引起误解。
Michael M

确实,有时您需要查看均值和标准差,以便判断它们是否有用....
Nick Cox

1
@TWL:这个话题太广泛了,无法在这里讨论。但是以药物的经济评估为例:对于患者而言,了解中位治疗时间可能很重要,而对于健康保险公司而言,这是平均治疗时间,因为他们需要为每位患者付费。一个奇怪的事实:在指数分布的情况下,平均值+/- 1标准偏差覆盖了所有质量的68%,平均值+/- 2 SDs覆盖了所有质量的95%。至于正常。(但这只是偶然;)
迈克尔·M

1
谢谢大家,我喜欢提议的小提琴
乐谱

9

有无数种可能性。

我见过的一种避免与箱线图混淆的选项(假设您有中位数或原始数据可用)是绘制箱线图并添加一个标记平均值的符号(希望有一个图例将其明确化)。箱形图的这种形式为平均值添加了标记,例如在Frigge等人(1989)[1]中提到:

箱形图也显示均值

左边的图显示+符号作为均值标记,右边的图在边缘使用三角形,以适应Doane&Tracy的光束和支点图[2]的均值标记。

另请参阅本SO帖子

如果您没有(或真的不想显示)中位数,则需要一个新的绘图,这样在视觉上与箱形图有所区别将是一件好事。

也许是这样的:

在此处输入图片说明

... 使用不同的符号绘制每个样本的最小,最大,均值和均值 sd,然后绘制一个矩形,或者更好的方法是:±

在此处输入图片说明

... 使用不同的符号绘制每个样本的最小,最大,均值和均值 sd,然后绘制一条线(实际上,目前实际上像以前一样是一个矩形,但是绘制得很窄;应该更改为绘制一个线)±

如果您的数字比例大不相同,但都是正数,则可以考虑使用对数,也可以使用不同(但清楚标记)的小倍数

代码(目前还不是特别好的代码,但是目前这只是在探索思想,还不是编写好的R代码的教程):

fivenum.ms=function(x) {r=range(x);m=mean(x);s=sd(x);c(r[1],m-s,m,m+s,r[2])}
eps=.015

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-1.2*eps,fivenum.ms(A)[2],1+1.4*eps,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-1.2*eps,fivenum.ms(B)[2],2+1.4*eps,fivenum.ms(B)[4],lwd=2,col=4,den=0)

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-eps/9,fivenum.ms(A)[2],1+eps/3,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-eps/9,fivenum.ms(B)[2],2+eps/3,fivenum.ms(B)[4],lwd=2,col=4,den=0)

[1] Frigge,M.,DC Hoaglin和B. Iglewicz(1989),
“箱形图的某些实现”。
美国统计学家43(2月):50-54。

[2] Doane DP和RL Tracy(2000),
“使用光束和支点显示器来探索数据” ,《
美国统计学家》54(4):289–290,十一月

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.