小提琴曲线:如何确定相邻的数值范围,为什么它与箱线图不同?

时间:2015-10-02 11:47:47

标签: r boxplot violin-plot iqr

理论上,vioplot包的小提琴图是一个箱线图+密度函数。

在“boxplot part”中,

  • 黑匣子对应IQR(确实见下文),

  • 中线应对应相同的范围(相邻值,默认值为1.5 IQR),但不是(见下文)。任何人都可以解释他们为什么不同?

    require("vioplot")
    a = rnorm(100)
    range (a)
    a = c(a,2,8,2.9,3,4, -3, -5) # add some outliers
    
    par ( mfrow = c(1,2))
    boxplot(a, range=1.5)
    vioplot(a, range=1.5 )
    

上面提到:

Box vs Vio generated by above lines

Hintze, J. L. and R. D. Nelson (1998). Violin plots: a box plot-density trace synergism. The American Statistician, 52(2):181-4.

1 个答案:

答案 0 :(得分:2)

让我用一个简单的例子说明这一点:

b <- c(1:10, 20)

par(mfrow = c(1,2))
boxplot(b, range=1.5)
vioplot(b, range=1.5 )

enter image description here

R&#39>箱图的定义是(从ggplot's help借用主题):

  

上部晶须从铰链延伸到内部的最高值   1.5 *铰链的IQR,其中IQR是四分位数间距或距离   在第一和第三四分位之间。

浏览vioplot的source code,我们看到upper[i] <- min(q3[i] + range*iqd, data.max)

因此,让我们尝试重现上方的晶须值:

# vioplot draws
quantile(b, 0.75) + 1.5 * IQR(b)
# 16

# boxplot draws
max(b[b <= quantile(b, 0.75) + 1.5 * IQR(b)])
# 10