scipy.stats.

weightedtau#

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

计算 Kendall’s :math:` au` 的加权版本。

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

权重通过一个等级数组定义,该数组为每个元素分配一个非负等级(更高的重要性等级与更小的值相关联,例如,0 是可能的最高等级),以及一个基于等级为每个元素分配权重的权重函数。交换的权重是交换元素等级权重的总和或乘积。默认参数计算 \(\tau_\mathrm h\):等级为 \(r\)\(s`(从零开始)的元素之间的交换具有权重 :math:`1/(r+1) + 1/(s+1)\)

指定一个秩数组仅在你心中有一个外部重要性标准时才有意义。如果,像通常发生的那样,你没有心中特定的秩,加权的 :math:` au` 是通过使用按 (x, y) 和按 (y, x) 的递减字典序秩获得的值的平均值来定义的。这是默认参数下的行为。请注意,这里用于排序的约定(较低的值意味着较高的重要性)与SciPy统计函数中使用的约定相反。

参数:
x, yarray_like

分数数组,形状相同。如果数组不是一维的,它们将被展平为一维。

等级类似数组的整数或布尔值,可选

每个元素分配一个非负的秩。如果为 None,将使用按 (x, y) 递减的字典序秩:秩较高的元素将是那些 x 值较大的元素,使用 y 值来打破平局(特别是,交换 xy 将给出不同的结果)。如果为 False,元素的索引将直接用作秩。默认值为 True,在这种情况下,此函数返回使用按 (x, y) 和按 (y, x) 递减的字典序秩获得的值的平均值。

权重器可调用,可选

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

加法bool, 可选

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

返回:
res: 重要性结果

一个包含属性的对象:

统计浮动

加权 :math:` au` 相关指数。

p值浮动

目前 np.nan,由于统计量的空分布未知(即使在加性双曲情况下)。

参见

kendalltau

计算 Kendall 的 tau 系数。

spearmanr

计算斯皮尔曼等级相关系数。

theilslopes

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

注释

此函数使用一个基于归并排序的 \(O(n \log n)\) 算法 [1],该算法是Knight算法在Kendall \(\tau\) [2] 上的加权扩展。通过将 additiverank 设置为 False,它可以在无平局(即排列)的排名之间计算Shieh的加权 \(\tau\) [3],因为 [1] 中给出的定义是Shieh的推广。

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

Added in version 0.19.0.

参考文献

[1] (1,2,3)

Sebastiano Vigna, “带平局的排序的加权相关指数”, 第24届国际万维网会议论文集, pp. 1166-1176, ACM, 2015.

[2]

W.R. Knight, “一种计算未分组数据肯德尔Tau系数的计算机方法”,《美国统计协会杂志》,第61卷,第314期,第1部分,第436-439页,1966年。

[3]

Grace S. Shieh. “加权肯德尔τ统计量”,《统计与概率通讯》,第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

NaNs 被认为是可能的最小分数:

>>> x = [12, 2, 1, 12, 2]
>>> y = [1, 4, 7, 1, np.nan]
>>> res = stats.weightedtau(x, y)
>>> res.statistic
-0.56694968153682723

这正是肯德尔的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)