квантиль#
- 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],
‘inverted_cdf’
'averaged_inverted_cdf'
‘closest_observation’
'interpolated_inverted_cdf'
'hazen'
'weibull'
'linear' (по умолчанию)
‘median_unbiased’
'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), иnextra_preargs, extra_postargsЭто частный случай Уравнения 1 из H&F [1]. В более общем случае,
j = (p*n + m - 1) // 1, иg = (p*n + m - 1) % 1,
где
mможет быть определен в соответствии с несколькими различными соглашениями. Предпочтительное соглашение может быть выбрано с помощьюmethodпараметр:methodчисло в H&F
minterpolated_inverted_cdf4
0hazen5
1/2weibull6
plinear(по умолчанию)7
1 - pmedian_unbiased8
p/3 + 1/3normal_unbiased9
p/4 + 3/8Обратите внимание, что индексы
jиj + 1обрезаются до диапазона0ton - 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и в противном случае определяется ниже.inverted_cdf:m = 0иg = int(index - j > 0)averaged_inverted_cdf:m = 0иg = (1 + int(index - j > 0)) / 2closest_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).Ссылки
Примеры
>>> 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.]])