Определения квантилей в R

Главный вопрос: предположим, у вас есть дискретный конечный набор данных $ d $. Затем сводка команд (d) возвращает мин., 1-й квартиль, медиану, среднее значение, 3-й квартиль и макс. У меня вопрос: по какой формуле R вычисляет 1-й квартиль?

Справочная информация: Мой набор данных: d=c(1,2,3,3,4,9). summary(d) возвращает 2.25 в качестве первого квартиля. Теперь один из способов вычисления первого квартиля - выбрать такое значение q1, чтобы 25% набора данных было меньше или равно q1. Ясно, что R использует не это. Итак, мне было интересно, какую формулу R использует для вычисления первого квартиля?

Поиски в Google по этой теме еще больше озадачили, и я не смог найти формулу, которую использует R. Ввод help(summary) в R мне тоже не помог.


person Community    schedule 08.01.2015    source источник
comment
Википедия дает формулы   -  person Henry    schedule 08.01.2015


Ответы (1)


Общее обсуждение:

Существует много различных возможностей для выборочных функций квантилей; мы хотим, чтобы они обладали различными свойствами (в том числе простыми для понимания и объяснения!), и в зависимости от того, какие свойства нам нужны больше всего, мы можем предпочесть разные определения.

В результате большое разнообразие пакетов между ними использует множество различных определений.

В статье Hyndman и Fan [1] приведены шесть желательных свойств для выборочной функции квантиля, перечислены девять существующих определения функции квантиля и упоминает, какие (из ряда общих) пакеты какие определения используют. Во введении говорится (извините, математика в этой цитате больше не отображается должным образом, поскольку она была перемещена в SO):

все выборочные квантили, которые используются в статистических пакетах, основаны на статистике одного или двух порядков и могут быть записаны как

\ hat {Q} _i (p) = (1 - γ) X _ {(j)} + γ X _ {(j + 1)} \ ,,
где \ frac {jm} {n} \ leq p ‹ \ frac {j-m + 1} {n} \ quad (1)

для некоторых m \ in \ mathbb {R} и 0 \ leq \ gamma \ leq 1.

То есть, в общем, выборочные квантили можно записать как своего рода средневзвешенное значение двух статистик смежного порядка (хотя может быть, что есть вес только для одной из них).

В R:

В частности, R предлагает все девять определений, упомянутых в Hyndman & Fan (по умолчанию - 7 долларов). От Hyndman & Fan мы видим:

Определение 7. Гамбель (1939) также рассмотрел модальное положение $ p_k = \ text {mode} \, F (X _ {(k)}) = (k-l) / (n-1) $. Одно приятное свойство состоит в том, что вершины $ Q_7 (p) $ делят диапазон на $ n-1 $ интервалов, и ровно $ 100p \% $ интервалов лежат слева от $ Q_7 (p $) и $ 100 (1 -p) \% $ интервалов лежат правее $ Q_7 (p) $.

Что это значит? Рассмотрим n=9. Тогда для (k-1)/(n-1) = 0.25 вам понадобится k = 1+(9-1)/4 = 3. То есть нижний квартиль - это 3-е наблюдение из числа 9.

Мы видим, что в R:

quantile(1:9)
  0%  25%  50%  75% 100% 
   1    3    5    7    9 

Что касается его поведения, когда n не имеет формы 4k+1, проще всего попробовать:

> quantile(1:10)
   0%   25%   50%   75%  100% 
 1.00  3.25  5.50  7.75 10.00 
> quantile(1:11)
  0%  25%  50%  75% 100% 
 1.0  3.5  6.0  8.5 11.0 
> quantile(1:12)
   0%   25%   50%   75%  100% 
 1.00  3.75  6.50  9.25 12.00 

Когда k не является целым числом, используется средневзвешенное значение статистики смежного порядка пропорционально доле, которая находится между ними (то есть линейная интерполяция).

Приятно то, что в среднем вы получаете в 3 раза больше наблюдений выше первого квартиля, чем получаете ниже. Так, например, для 9 наблюдений вы получите 6 выше и 2 ниже третьего наблюдения, что делит их на соотношение 3: 1.

Что происходит с вашими образцами данных

У вас d=c(1,2,3,3,4,9), поэтому n равно 6. Вам нужно, чтобы (k-1)/(n-1) было 0.25, поэтому k = 1 + 5/4 = 2.25. То есть между вторым и третьим наблюдением (которые по совпадению сами по себе 2 и 3) проходит 25% пути, поэтому нижний квартиль равен 2+0.25*(3-2) = 2.25.

Под капотом: некоторые детали R:

Когда вы вызываете summary в фрейме данных, это приводит к тому, что summary.data.frame применяется к фрейму данных (т. Е. К соответствующему summary для класса, для которого вы его вызывали). О его существовании упоминается в справке на summary.

Функция summary.data.frame (в конечном итоге - через summary.default, примененную к каждому столбцу) вызывает quantile для вычисления квартилей (к сожалению, вы не увидите этого в справке, поскольку ?summary.data.frame просто перенаправляет вас к summary справке и не дает вам никаких подробностей о том, что происходит, когда summary применяется к числовому вектору - это одно из действительно плохих мест в справке).

Итак, ?quantile (или help(quantile)) описывает, что делает R.

Здесь говорится о двух вещах (основанных непосредственно на Hyndman & Fan). Во-первых, он дает общую информацию:

All sample quantiles are defined as weighted averages of consecutive order statistics. Sample quantiles of type i are defined by:

Q[i](p) = (1 - γ) x[j] + γ x[j+1],

where 1 ≤ i ≤ 9, (j-m)/n ≤ p < (j-m+1)/n, x[j] is the jth order statistic, n is the sample size, the value of γ is a function of j = floor(np + m) and g = np + m - j, and m is a constant determined by the sample quantile type.

Во-вторых, есть конкретная информация о методе 7:

Type 7
m = 1-p

. p[k] = (k - 1) / (n - 1). In this case, p[k] = mode[F(x[k])]. This is used by S.

Надеюсь, объяснение, которое я дал ранее, поможет лучше понять, о чем здесь говорится. Справка по quantile в значительной степени просто цитирует Hyndman & Fan в том, что касается определений, и его поведение довольно простое.


Ссылка:

[1]: Роб Дж. Хайндман и Янан Фан (1996),
«Выборочные квантили в статистических пакетах»,
Американский статистик, Vol. 50, No. 4. (ноябрь), стр. 361-365

Также см. Обсуждение здесь.

person Glen_b    schedule 08.01.2015
comment
Спасибо за Ваш ответ. Я все еще немного запутался. Кажется, что R использует довольно много методов для вычисления квантилей, и похоже, что метод 7, каким бы он ни был, является по умолчанию и также используется в сводной команде. Однако все еще возникают проблемы с попыткой выяснить точную формулу, которую R использует для вычисления квантиля. Спасибо еще раз. - person ; 08.01.2015