Сюжет скрипки: как определяется соседний диапазон значений и почему он отличается от боксового участка?

Теоретически, скрипка с пакетом vioplot представляет собой функцию 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 )
    

Выгода от выше:

Коробка против Vio, сгенерированная вышеуказанными строками

Hintze, JL и RD Nelson (1998). Сюжеты для скрипки: прямоугольник с плотностью синергизма. Американский статистик, 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 )

Определение бокса R: (позаимствовано из справки ggplot по теме):

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

Просматривая исходный код 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
Другие вопросы по тегам