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

仅当您心中有一个外部重要性标准时,指定秩数组才有意义。 如果,通常情况下,您心中没有特定的秩,则加权 \(\tau\) 通过平均使用 (x, y) 和 (y, x) 的递减字典序秩获得的值来定义。 这是默认参数的行为。 请注意,此处使用的排序约定(较低的值表示较高的重要性)与其他 SciPy 统计函数使用的约定相反。

参数:
x, y类数组

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

rank整数或布尔值的类数组,可选

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

weigher可调用对象,可选

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

additive布尔值,可选

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

返回:
res:SignificanceResult

包含属性的对象

statistic浮点数

加权 \(\tau\) 相关性指数。

pvalue浮点数

目前为 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)