scipy.stats.

weightedtau#

scipy.stats.weightedtau(x, y, rank=True, weigher=None, additive=True)[源代码]#

计算Kendall的\(\tau\)的加权版本。

加权\(\tau\)是Kendall的\(\tau\)的加权版本,其中权重高的交换比权重低的交换更具影响力。默认参数计算该指数的附加双曲版本,即\(\tau_\mathrm h\),该版本已显示在重要元素和不重要元素之间提供了最佳平衡 [1]

加权依据秩数组定义,将非负秩分配给每个元素(较高重要性秩与较小值相关联,例如,0 是最高可能秩),并且加权函数基于秩将权重分配给每个元素。交换的权重随后为交换元素秩的权重之和或乘积。默认参数计算\(\tau_\mathrm h\):具有秩\(r\)\(s\)(从零开始)的元素之间的交换具有权重\(1/(r+1) + 1/(s+1)\)

仅当您考虑重要性的外部标准时,指定秩数组才有意义。如果您通常没有考虑特定秩,则通过对(xy)和(yx)按减小词法秩求得的值取平均来定义加权的\(\tau\)。这是使用默认参数的行为。请注意,此处用于秩的惯例(较低值隐含较高重要性)与其他 SciPy 统计函数所用惯例相反。

参数:
x、yarray_like

相同形状的分数数组。如果数组不是 1-D,它们将被展平至 1-D。

rankint 或 bool 的 array_like,可选

分配给每个元素的非负秩。如果它是 None,将按(xy)按减小词法秩来使用:较高秩的元素将具有较大的x值,使用y值解决平局(特别是交换xy将产生不同的结果)。如果它为 False,则元素索引将直接用作秩。默认值为 True,在这种情况下,此函数返回使用按(xy)和(yx)按减小词法秩求得的值的平均值。

weighercallable,可选

加权函数。必须将非负整数(零表示最重要的元素)映射到非负权重。默认值为 None,提供双曲加权,即秩\(r\)映射到权重\(1/(r+1)\)

additivebool,可选

如果为 True,交换的权重通过将交换元素的秩的权重相加来计算;否则,权重将相乘。默认值为 True。

返回:
res: SignificanceResult

包含属性的对象

statisticfloat

加权的\(\tau\)相关系数。

pvaluefloat

目前为np.nan,因统计量的空分布未知(即使在附加双曲线情况下亦然)。

另请参阅

kendalltau

计算 Kendall 的 Tau。

spearmanr

计算 Spearman 排序相关系数。

theilslopes

计算一系列点 (x, y) 的 Theil-Sen 估计量。

注释

此函数使用\(O(n \log n)\),基于归并排序的算法[1],而此算法是对用于计算 Kendall \(\tau\)的 Knight 算法的加权扩展[2]。它可以通过将additiverank设置为 False,从而计算在无平局情况下(即排列中)Shieh 加权的\(\tau\)[3],因为在[1]中给出的定义是 Shieh 定义的概括。

将 NaN 视为可能的最小分数。

在版本 0.19.0 中添加。

引用

[1] (1,2,3)

Sebastiano Vigna,“用于无平局排名的加权相关系数索引”,24 届万维网国际会议论文集,第 1166-1176 页,ACM,2015 年。

[2]

W.R. Knight,“用于使用未分组数据计算 Kendall Tau 的计算机方法”,美国统计协会杂志,第 61 卷,第 314 期,第 1 部分,第 436-439 页,1966 年。

[3]

Grace S. Shieh。“加权的 Kendall Tau 统计量”,统计与概率通讯,第 39 卷,第 1 期,第 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

这正是 Kendall 的 Tau

>>> 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)