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)\)。
仅当您考虑重要性的外部标准时,指定秩数组才有意义。如果您通常没有考虑特定秩,则通过对(x、y)和(y、x)按减小词法秩求得的值取平均来定义加权的\(\tau\)。这是使用默认参数的行为。请注意,此处用于秩的惯例(较低值隐含较高重要性)与其他 SciPy 统计函数所用惯例相反。
- 参数:
- x、yarray_like
相同形状的分数数组。如果数组不是 1-D,它们将被展平至 1-D。
- rankint 或 bool 的 array_like,可选
分配给每个元素的非负秩。如果它是 None,将按(x、y)按减小词法秩来使用:较高秩的元素将具有较大的x值,使用y值解决平局(特别是交换x和y将产生不同的结果)。如果它为 False,则元素索引将直接用作秩。默认值为 True,在这种情况下,此函数返回使用按(x、y)和(y、x)按减小词法秩求得的值的平均值。
- 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]。它可以通过将additive和rank设置为 False,从而计算在无平局情况下(即排列中)Shieh 加权的\(\tau\)[3],因为在[1]中给出的定义是 Shieh 定义的概括。
将 NaN 视为可能的最小分数。
在版本 0.19.0 中添加。
引用
[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)