np.percentile не равно квартилям

Я пытаюсь рассчитать квартили для массива значений в Python, используя numpy,

X = [1, 1, 1, 3, 4, 5, 5, 7, 8, 9, 10, 1000]

Я бы сделал следующее:

quartiles = np.percentile(X, range(0, 100, 25))
quartiles
# array([1.  ,  2.5 ,  5.  ,  8.25])

Но это неверно, поскольку 1-й и 3-й квартили должны быть 2 и 8,5 соответственно.

Это может быть показано как следующее:

Q1 = np.median(X[:len(X)/2])
Q3 = np.median(X[len(X):])
Q1, Q3
# (2.0, 8.5)

Я не могу понять, что np.percentile делает, чтобы дать другой ответ. Я бы очень благодарен за это.

1 ответ

Решение

Нет правильного или неправильного, а просто разные способы вычисления процентилей. В непрерывном случае процентиль является четко определенной концепцией, в меньшей степени - для дискретных выборок: разные методы не будут иметь значения для очень большого числа наблюдений (по сравнению с количество дубликатов), но на самом деле может иметь значение для небольших выборок, и вам нужно выяснить, что имеет смысл в каждом конкретном случае.

Чтобы получить желаемый результат, вы должны указать interpolation = 'midpoint' в функции процентиля:

quartiles = np.percentile(X, range(0, 100, 25), interpolation = 'midpoint')
quartiles    # array([ 1. ,  2. ,  5. ,  8.5])

Я бы посоветовал вам ознакомиться с документами http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html

Другие вопросы по тегам