2016-11-16 1 views
5

У меня естьнижний и верхний квартили в boxplot в R

X=c(20 ,18, 34, 45, 30, 51, 63, 52, 29, 36, 27, 24) 

С boxplot, я пытаюсь сюжет quantile(X,0.25) и quantile(X,0.75) , но это не НАСТОЯЩЕМУ те же самые нижние и верхние квартили в boxplot в R

boxplot(X) 
abline(h=quantile(X,0.25),col="red",lty=2) 
abline(h=quantile(X,0.75),col="red",lty=2) 

enter image description here Знаете ли вы, почему?

+0

btw, 'boxplot' возвращает объект, который может использоваться по мере необходимости:' bX = boxplot (X); abline (h = bX $ stats [c (2, 4), 1], col = "red", lty = 2) ' –

ответ

7

Значения поля называются шарнирами и могут совпадать с квартилями (рассчитанными на quantile(x, c(0.25, .075))), но рассчитываются по-разному.

От ?boxplot.stats:

Две «петли» являются версиями первой и третьей квартили, т.е. близкие к квантиль (х, с (1,3)/4). Петли равны квартилям для нечетного n (где n < - длина (x)) и отличаются при четном n. В то время как квартили только равны наблюдениям для n %% 4 == 1 (n = 1 mod 4), шарниры делают это дополнительно для n %% 4 == 2 (n = 2 mod 4) и находятся в середине двух в противном случае.

Чтобы увидеть, что значения совпадают с нечетным числом наблюдений, попробуйте следующий код:

set.seed(1234) 
x <- rnorm(9) 

boxplot(x) 
abline(h=quantile(x, c(0.25, 0.75)), col="red") 

enter image description here

3

Расхождение возникает неоднозначности в определении квантилей. Ни один метод не является строго правильным или неправильным - есть просто разные способы оценки квантилей в ситуациях (например, четное количество точек данных), когда они не аккуратно совпадают с конкретной точкой данных и должны быть интерполированы. Несколько обескураживающе, boxplot и quantile (и другие функции, которые предоставляют сводные статистические данные) используются различными стандартные методы для расчета квантилей, хотя эти значения могут быть подавляться с помощью type = аргумента в quantile

Мы можем увидеть эти различия более четко в действии глядя на некоторых из различных способов генерации квантилей статистики в R.

Оба boxplot и fivenum дают одни и то же значение:

boxplot.stats(X)$stats 
# [1] 18.0 25.5 32.0 48.0 63.0 
fivenum(X) 
# [1] 18.0 25.5 32.0 48.0 63.0 

В boxplot и fivenum, нижняя (верхняя) квартиль эквивалентно средней нижней (верхней) половины данных (в том числе медианы полных данных):

c(median(X[ X <= median(X) ]), median(X[ X >= median(X) ])) 
# [1] 25.5 48.0 

Но quartile и summary делать вещи разному:

summary(X) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 18.00 26.25 32.00 35.75 46.50 63.00 

quantile(X, c(0.25,0.5,0.75)) 
# 25% 50% 75% 
# 26.25 32.00 46.50 

разница между этим и результатами boxplot и fivenum зависит от того, как функционирует интерполировать между данными. quartile пытается интерполировать, оценивая форму кумулятивной функции распределения.В соответствии с ?quantile:

квантильные возвращает оценки основных квантилей распределения на основе на одной или двух порядковых статистик из поставляемых элементов х на вероятностей в Probs. Используется один из девяти квантильных алгоритмов, обсуждаемых в Hyndman and Fan (1996), выбранный по типу.

Полные детали из девяти различных методов quantile используется для оценки функции распределения данных можно найти в ?quantile, и слишком длинны, чтобы воспроизвести в полном объеме здесь. Важно отметить, что 9 методов взяты из Hyndman and Fan (1996), которые рекомендовали тип 8. Метод по умолчанию, используемый quantile, относится к типу 7 по историческим причинам совместимости с S. . Мы можем видеть оценки квартили, предоставляемые различными методами в квантиль с помощью:

quantile_methods = data.frame(q25 = sapply(1:9, function(method) quantile(X, 0.25, type = method)), 
      q50 = sapply(1:9, function(method) quantile(X, 0.50, type = method)), 
      q75 = sapply(1:9, function(method) quantile(X, 0.75, type = method))) 
#  q25 q50 q75 
# 1 24.0000 30 45.000 
# 2 25.5000 32 48.000 
# 3 24.0000 30 45.000 
# 4 24.0000 30 45.000 
# 5 25.5000 32 48.000 
# 6 24.7500 32 49.500 
# 7 26.2500 32 46.500 
# 8 25.2500 32 48.500 
# 9 25.3125 32 48.375 

В которой type = 5 обеспечивает те же расчетные значения квартили как это делает boxplot. Однако, когда есть нечетное количество данных, это type=7, что будет совпадать с статистикой boxplot.

Мы можем показать это, автоматически выбрав тип 5 или 7 в зависимости от наличия четного или четного количества данных. Boxplot в изображении ниже показывают квантили для наборов данных с 1 до 30 значений, с boxplot и quantile дают то же значение, как для нечетных и четных N:

layout(matrix(1:30,5,6, byrow = T), respect = T) 
par(mar=c(0.2,0.2,0.2,0.2), bty="n", yaxt="n", xaxt="n") 

for (N in 1:30){ 
    X = sample(100, N) 
    boxplot(X) 
    abline(h=quantile(X, c(0.25, 0.5, 0.75), type=c(5,7)[(N %% 2) + 1]), col="red", lty=2) 
} 

enter image description here


Hyndman, RJ и вентилятором , Y. (1996) Примеры квантилей в статистических пакетах, американский статистик 50, 361-365

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