2015-10-02 3 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

Определение boxplot R является (заимствование из ggplot's help по теме):

Верхние усы проходят от шарнира до самого высокого значения, которое находится в пределах 1.5 * IQR шарнира, где IQR - межквартильный диапазон или расстояние между первым и третьим квартилями.

Просмотр source code vioplot, мы видим 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() защищает не только линию смежного значения за самой последней точкой данных, тогда как ** в boxplot ** проверяет фактические максимальные значения в пределах + 1.5 * IQR поэтому он более значим для ваших фактических данных. –

+0

@ bud.dugong Да, точно. Пожалуйста! – tonytonov

Смежные вопросы