Answers:
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)
这两个示例如下所示。
有无数种可能性。
我见过的一种避免与箱线图混淆的选项(假设您有中位数或原始数据可用)是绘制箱线图并添加一个标记平均值的符号(希望有一个图例将其明确化)。箱形图的这种形式为平均值添加了标记,例如在Frigge等人(1989)[1]中提到:
左边的图显示+符号作为均值标记,右边的图在边缘使用三角形,以适应Doane&Tracy的光束和支点图[2]的均值标记。
如果您没有(或真的不想显示)中位数,则需要一个新的绘图,这样在视觉上与箱形图有所区别将是一件好事。
也许是这样的:
... 使用不同的符号绘制每个样本的最小,最大,均值和均值 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,十一月
R
命令,则此问题不在此处。但是,您似乎主要是在询问一个好的情节是什么样子,其次是如何创建它。如果是这样,我建议从标题中删除“带有R”,并在正文中声明您R
有空。