与重尾分布相对应的Boxplot吗?


13

对于近似正态分布的数据,箱形图是快速可视化数据的中值和散布以及任何异常值的好方法。

但是,对于更重尾的分布,很多点显示为离群值,因为离群被定义为不在IQR的固定因子范围内,而对于重尾分布,这种情况当然会更频繁地发生。

那么人们使用什么可视化此类数据呢?还有更适应的东西吗?如果重要的话,我在R上使用ggplot。


1
与中间50%的样本相比,来自重尾分布的样本的样本范围往往较大。您要如何处理?
Glen_b-恢复莫妮卡

7
已经有几个相关的线程,例如stats.stackexchange.com/questions/13086/…简短的回答是先转换!直方图 各种分位数图;各种地带。
尼克·考克斯

@Glen_b:这正是我的问题,它使箱线图不可读。
static_rtti

2
问题是,有不止一两件事,可能做......那么你有什么它做什么?
Glen_b-恢复莫妮卡

2
也许值得注意的是,大多数统计界都从1970年代John Tukey的命名和(重新)介绍中了解箱型图。(它们在气候学和地理学领域已经使用了几十年。)但是,在他1977年关于探索性数据分析的书(雷丁,马萨诸塞州:Addison-Wesley)的后几章中,他对处理重尾分布有完全不同的想法。似乎根本没有流行。但是分位数图具有类似的精神。
Nick Cox

Answers:


8

在OP似乎有问题的关键是,他们有非常重尾数据-我不认为目前大多数的答案实际上这个问题处理在所有的,所以我推动我以前的一个答案评论。

如果您确实想保留箱形图,则下面列出了一些选项。我在R中创建了一些数据,这些数据显示了基本问题:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

箱形图不令人满意

数据的中间部分缩小为几毫米宽的小条。相同的问题困扰着其他大多数建议-包括QQ图,带状图,蜂箱/蜂巢图和小提琴图。

现在,一些潜在的解决方案:

1)变换

如果对数或倒数产生可读的箱线图,则可能是一个很好的主意,并且原始刻度仍可以显示在轴上。

最大的问题是有时没有“直观”的转变。还有一个较小的问题,即分位数本身可以很好地进行单调变换,而栅栏则不能。如果仅对转换后的数据进行箱线绘图(如我在此处所做的那样),则晶须的x值将不同于原始图。

转换值的箱线图

在这里,我使用了反双曲正弦(asinh)。它的尾部有点像对数,类似于接近零的线性,但是人们通常不会发现它是一种直观的变换,因此,除非像log这样的相当直观的变换很明显,否则我一般不建议使用此选项。为此的代码:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2)缩放比例破坏-采取极端离群值并将其压缩到两端的狭窄窗口中,压缩比例远大于中心。如果您这样做,我强烈建议您在整个范围内彻底休息。

带刻度的箱线图

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3)修剪极端离群值(通常我不建议您不要非常清楚地指出这一点,但是它看起来像下一个图,两端都没有“ <5”和“ 2>”),并且

4)我称之为极端的“箭头”-与修整类似,但修整后的值计数在每一端均指示

带有极值计数和箭头指向的箱线图

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

感谢您抽出宝贵的时间写这篇文章!这正是我所期望的答案。现在,我只需要找出如何使用R实现这些图的方法即可:
static_rtti 2013年

1
现在有一些代码。我没有给出3)的代码,因为它是4)的简单版本;您应该能够从中删除线来获得它。
Glen_b-恢复莫妮卡2013年

顺便说一下,这些想法中的大多数也可以与此处建议的其他出色展示一起使用-抖动的脱衣舞图表,蜂巢/蜂巢图和小提琴图等。
Glen_b-恢复莫妮卡2013年

再次感谢。我相信这个答案对相当多的人有用。
static_rtti 2013年

我同意,这比我的回答更好地解决了这个问题。好东西。
TooTone 2013年

4

就我个人而言,我至少喜欢使用带抖动的带状图来了解数据。下面的图是R中的晶格(对不起,ggplot2)。我喜欢这些情节,因为它们很容易解释。如您所说,这样做的原因之一是没有任何变换。

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

在此处输入图片说明

beeswarm包提供了stripplot一个伟大的选择(感谢@January您的建议)。

beeswarm(df2$values ~ df2$ind)

在此处输入图片说明

与您的数据,因为它的近似正态分布,另一件事尝试可能是一个qqplot,qqnorm在这种情况下。

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

在此处输入图片说明


2
我也喜欢Stripplots,但是问题很明显是如何处理重尾分布。
Nick Cox

1
关键是要使用的建议(例如qqnorm)与问题不匹配。我同意,其他种类的分位数-分位数图可能是一个好主意,正如我前面提到的。
Nick Cox

1
beeswarm软件包中的图甚至比R中的带状图好。
2013

1
@January是的,这很酷,我正在将其添加到我的答案中(如果您反对,请这样说)。
TooTone 2013年

1
我的答案发布在stats.stackexchange.com/questions/13086上,我认为它是该问题的(因此不那么狭窄)版本。我将其总结为“不要更改boxplot算法:改为重新表达数据”。探索性数据分析的标准技术可以解决该问题中“已适应”所提示的问题,该技术可用于查找有用的变量重新表达。
Whuber

2

您可以坚持使用箱线图。定义晶须有不同的可能性。根据尾部的厚度,样本数量和对异常值的容忍度,您可以选择两个或多个或两个以上的极值分位数。鉴于您的问题,我将避免通过IQR定义的晶须。
当然,除非您要转换数据,否则这种情况会使理解变得更加困难。


1
最后一句话太不合格,无法不加评论地通过。转换不是万能的药,但是不转换高度偏斜的数据并不会更容易理解。如果数据都是正数,则至少可以尝试使用根,对数或倒数刻度。如果确实没有帮助,请退后。
Nick Cox

您指的是在理解倾斜数据时遇到什么困难?那些具有依赖IQR的晶须?即使是轻尾巴也是一个问题。而且我们不是在谈论偏斜的尾巴吗?减轻尾巴的变换肯定会提供更多规则的箱线图,但会增加解释层,以换取舒适感。但如果他愿意,可以将其称为功能。
石英

2
转型通常会有所帮助:这就是我的底线。尚未了解许多事物(尤其是对数尺度)看起来更清晰的统计人员正在认真地错过最古老,最有效的技巧之一。您似乎否认了这一点;我希望我读错了。
Nick Cox

1
我不同意。我一直都在转换高度偏斜的数据,而我的经验是,这不仅仅是美学问题。它经常有效。一位匿名统计学家前段时间写道,对数正态比正常更正常。他/她虽然有点滑稽,但那里也有一个重要的道理。(并不是说许多其他发行版可能不太合适。)
Nick Cox

1
我想我需要在这里停下来让其他人进行评判,但是我的观点并不奇怪。例如,在stats.stackexchange.com/questions/13086/…上讨论了将转换作为一种可能性的方法。我建议您在那里回答或评论,以解释为什么该建议不合理。
Nick Cox

0

我假设这个问题是关于理解数据的(而不是“管理”它的)相反。
如果数据是重尾的和/或多模式的,我发现ggplot2的这些“层” 对于此目的非常有用:geom_violingeom_jitter


3
您能总结一下为什么小提琴图和/或抖动点对重尾分布有用吗?
chl
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.