scipy.stats.

квантиль#

scipy.stats.квантиль(x, p, *, метод='linear', ось=0, nan_policy='propagate', keepdims=None)[источник]#

Вычислить p-й квантиль данных вдоль указанной оси.

Параметры:
xarray_like из действительных чисел

Массив данных.

parray_like из float

Вероятность или последовательность вероятностей квантилей для вычисления. Значения должны быть между 0 и 1 (включительно). Должны иметь длину 1 вдоль ось если только keepdims=True.

методstr, по умолчанию: 'linear'

Метод для оценки квантиля. Доступные варианты, пронумерованные в порядке появления в [1],

  1. ‘inverted_cdf’

  2. 'averaged_inverted_cdf'

  3. ‘closest_observation’

  4. 'interpolated_inverted_cdf'

  5. 'hazen'

  6. 'weibull'

  7. 'linear' (по умолчанию)

  8. ‘median_unbiased’

  9. 'normal_unbiased'

‘harrell-davis’ также доступен для вычисления оценки квантиля согласно [2]. См. примечания для подробностей.

осьint или None, по умолчанию: 0

Ось, вдоль которой вычисляются квантили. None разворачивает оба x и p перед выполнением вычисления, без проверки совместимости исходных форм.

nan_policystr, по умолчанию: 'propagate'

Определяет, как обрабатывать NaN во входных данных x.

  • propagate: если в срезе оси (например, строке), вдоль которой вычисляется статистика, присутствует NaN, соответствующий срез вывода будет содержать NaN.

  • omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, по которому вычисляется статистика, останется недостаточно данных, соответствующий срез вывода будет содержать NaN.

  • raise: если присутствует NaN, то ValueError будет вызвано исключение.

Если присутствуют значения NaN в p, a ValueError будет вызвано исключение.

keepdimsbool, необязательно

Рассмотрим случай, в котором x является одномерным и p является скаляром: квантиль — это сводная статистика, и поведение по умолчанию — возвращать скаляр. Если keepdims установлено значение True, ось не будет удалена, и результатом будет одномерный массив с одним элементом.

Общий случай более тонкий, поскольку несколько квантилей могут быть запрошены для каждого среза по оси x. Например, если оба x и p являются одномерными и p.size > 1, ни одна ось не может быть сокращена; должна быть ось, содержащая количество квантилей, заданное p.size. Поэтому:

  • По умолчанию ось будет удалена, если это возможно (т.е. если существует ровно один элемент q на ось-срез x).

  • Если keepdims если установлено в True, ось не будет сокращена.

  • Если keepdims установлено в False, ось будет удалена если возможно, в противном случае будет вызвана ошибка.

Возвращает:
квантильскаляр или ndarray

Полученный квантиль(и). dtype является результирующим dtype x и p.

Примечания

Для заданной выборки x из базового распределения, quantile предоставляет непараметрическую оценку обратной функции распределения.

По умолчанию это делается путем интерполяции между соседними элементами в y, отсортированная копия x:

(1-g)*y[j] + g*y[j+1]

где индекс j и коэффициент g являются целой и дробной частями p * (n-1), и n extra_preargs, extra_postargs

Это частный случай Уравнения 1 из H&F [1]. В более общем случае,

  • j = (p*n + m - 1) // 1, и

  • g = (p*n + m - 1) % 1,

где m может быть определен в соответствии с несколькими различными соглашениями. Предпочтительное соглашение может быть выбрано с помощью method параметр:

method

число в H&F

m

interpolated_inverted_cdf

4

0

hazen

5

1/2

weibull

6

p

linear (по умолчанию)

7

1 - p

median_unbiased

8

p/3 + 1/3

normal_unbiased

9

p/4 + 3/8

Обратите внимание, что индексы j и j + 1 обрезаются до диапазона 0 to n - 1 когда результаты формулы выходят за пределы допустимого диапазона неотрицательных индексов. Когда j обрезается до нуля, g устанавливается в ноль. The -1 в формулах для j и g учитывает индексацию Python, начинающуюся с 0.

Таблица выше включает только оценки из [1] которые являются непрерывными функциями вероятности p (оценки 4-9). SciPy также предоставляет три разрывных оценщика из [1] (оценки 1-3), где j определяется как выше, m определяется следующим образом, и g является 0 когда index = p*n + m - 1 меньше чем 0 и в противном случае определяется ниже.

  1. inverted_cdf: m = 0 и g = int(index - j > 0)

  2. averaged_inverted_cdf: m = 0 и g = (1 + int(index - j > 0)) / 2

  3. closest_observation: m = -1/2 и g = 1 - int((index == j) & (j%2 == 1))

Другая стратегия вычисления квантилей из [2], method='harrell-davis', использует взвешенную комбинацию всех элементов. Веса вычисляются как:

\[w_{n, i} = I_{i/n}(a, b) - I_{(i - 1)/n}(a, b)\]

где \(n\) это количество элементов в выборке, \(i\) являются индексами \(1, 2, ..., n-1, n\) отсортированных элементов, \(a = p (n + 1)\), \(b = (1 - p)(n + 1)\), \(p\) это вероятность квантиля, и \(I\) является регуляризованной, нижней неполной бета-функцией (scipy.special.betainc).

Ссылки

[1] (1,2,3,4)

R. J. Hyndman и Y. Fan, «Выборочные квантили в статистических пакетах», The American Statistician, 50(4), стр. 361-365, 1996

[2] (1,2)

Harrell, Frank E., и C. E. Davis. «A new distribution-free quantile estimator.» Biometrika 69.3 (1982): 635-640.

Примеры

>>> import numpy as np
>>> from scipy import stats
>>> x = np.asarray([[10, 8, 7, 5, 4],
...                 [0, 1, 2, 3, 5]])

Вычисление медианы вдоль последней оси.

>>> stats.quantile(x, 0.5, axis=-1)
array([7.,  2.])

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

>>> stats.quantile(x, [[0.25], [0.75]], axis=-1, keepdims=True)
array([[5.],
       [3.]])

Вычисление нескольких квантилей вдоль каждой оси.

>>> stats.quantile(x, [0.25, 0.75], axis=-1)
array([[5., 8.],
       [1., 3.]])