2015-10-02 32 views
4

理论上vioplot包的小提琴图是boxplot +密度函数。小提琴剧情:如何确定相邻数值范围,以及它与boxplot有何不同?

在“箱线图部分”,

  • 黑盒子对应于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) 
    

Benerated通过上面:

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

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

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箱线图的定义为(在话题借贷从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 
+0

感谢,特别是对生殖的例子!因此,**在vioplot **中,min()函数仅保护no以在最后一个数据点之外绘制相邻值线,而boxplot **中的**检查+ 1.5 * IQR内的实际最高值范围,因此它对于您的实际数据更有意义。 –

+0

@ bud.dugong是的,正好。别客气! – tonytonov