weightedtau#
- scipy.stats.weightedtau(x, y, rank=True, weigher=None, аддитивный=True, *, ось=None, nan_policy='propagate', keepdims=False)[источник]#
Вычислить взвешенную версию коэффициента корреляции Кендалла \(\tau\).
Взвешенный \(\tau\) является взвешенной версией коэффициента корреляции Кендалла \(\tau\) в котором обмены с высоким весом более влиятельны, чем обмены с низким весом. Параметры по умолчанию вычисляют аддитивную гиперболическую версию индекса, \(\tau_\mathrm h\), что, как было показано, обеспечивает наилучший баланс между важными и неважными элементами [1].
Взвешивание определяется с помощью массива рангов, который присваивает неотрицательный ранг каждому элементу (более высокие ранги важности связаны с меньшими значениями, например, 0 — наивысший возможный ранг), и функции взвешивания, которая присваивает вес на основе ранга каждому элементу. Вес обмена затем является суммой или произведением весов рангов обмениваемых элементов. Параметры по умолчанию вычисляют \(\tau_\mathrm h\): обмен между элементами с рангом \(r\) и \(s\) (начиная с нуля) имеет вес \(1/(r+1) + 1/(s+1)\).
Задание массива рангов имеет смысл только если у вас есть внешний критерий важности. Если, как обычно бывает, у вас нет конкретного ранга, взвешенный \(\tau\) определяется усреднением значений, полученных с использованием убывающего лексикографического ранга по (x, y) и (y, x). Это поведение при параметрах по умолчанию. Обратите внимание, что используемое здесь соглашение о ранжировании (меньшие значения подразумевают большую важность) противоположно тому, которое используется другими статистическими функциями SciPy.
- Параметры:
- x, yarray_like
Массивы оценок, одинаковой формы. Если массивы не одномерные, они будут сведены к одномерным.
- rankarray_like из int или bool, optional
Неотрицательный ранг, присвоенный каждому элементу. Если None, то убывающий лексикографический ранг по (x, y) будет использоваться: элементы более высокого ранга будут теми, у которых больше x-значения, используя y-значения для разрешения ничьих (в частности, обмен x и y даст другой результат). Если он False, индексы элементов будут использоваться напрямую как ранги. По умолчанию True, в этом случае эта функция возвращает среднее значений, полученных с использованием убывающего лексикографического ранга по (x, y) и (y, x).
- weigherвызываемый объект, необязательный
Функция взвешивания. Должна отображать неотрицательные целые числа (ноль представляет наиболее важный элемент) в неотрицательный вес. По умолчанию, None, обеспечивает гиперболическое взвешивание, то есть, ранг \(r\) отображается в вес \(1/(r+1)\).
- аддитивныйbool, необязательно
Если True, вес обмена вычисляется путем сложения весов рангов обмениваемых элементов; в противном случае веса умножаются. По умолчанию True.
- осьint или None, по умолчанию: None
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- res: SignificanceResult
Объект, содержащий атрибуты:
- статистикаfloat
Взвешенный \(\tau\) индекс корреляции.
- p-значениеfloat
В настоящее время
np.nan, так как нулевое распределение статистики неизвестно (даже в аддитивном гиперболическом случае).
Смотрите также
kendalltauВычисляет тау Кендалла.
spearmanrВычисляет коэффициент корреляции Спирмена.
theilslopesВычисляет оценку Тейла-Сена для набора точек (x, y).
Примечания
Эта функция использует \(O(n \log n)\), алгоритм на основе сортировки слиянием [1] является взвешенным расширением алгоритма Найта для тау Кендалла \(\tau\) [2]. Может вычислять взвешенный \(\tau\) [3] между ранжировками без связей (т.е., перестановками), установив аддитивный и rank в False, так как определение, данное в [1] является обобщением метода Ши.
NaN считаются наименьшим возможным значением.
Добавлено в версии 0.19.0.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.Ссылки
[1] (1,2,3)Себастьяно Вигна, «Взвешенный индекс корреляции для ранжирований с совпадениями», Труды 24-й международной конференции по Всемирной паутине, стр. 1166-1176, ACM, 2015.
[2]W.R. Knight, “A Computer Method for Calculating Kendall’s Tau with Ungrouped Data”, Journal of the American Statistical Association, Vol. 61, No. 314, Part 1, pp. 436-439, 1966.
[3]Grace S. Shieh. "A weighted Kendall’s tau statistic", Statistics & Probability Letters, Vol. 39, No. 1, pp. 17-24, 1998.
Примеры
>>> import numpy as np >>> from scipy import stats >>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> res = stats.weightedtau(x, y) >>> res.statistic -0.56694968153682723 >>> res.pvalue nan >>> res = stats.weightedtau(x, y, additive=False) >>> res.statistic -0.62205716951801038
NaN считаются наименьшим возможным значением:
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, np.nan] >>> res = stats.weightedtau(x, y) >>> res.statistic -0.56694968153682723
Это в точности тау Кендалла:
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> res = stats.weightedtau(x, y, weigher=lambda x: 1) >>> res.statistic -0.47140452079103173
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> stats.weightedtau(x, y, rank=None) SignificanceResult(statistic=-0.4157652301037516, pvalue=nan) >>> stats.weightedtau(y, x, rank=None) SignificanceResult(statistic=-0.7181341329699028, pvalue=nan)