scipy.stats.weightedtau

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

计算肯德尔公式的加权版本 \(\tau\)

有权重的 \(\tau\) 是肯德尔的加权版本 \(\tau\) 其中,高权重的交易比低权重的交易更具影响力。默认参数计算指数的相加双曲线版本, \(\tau_\mathrm h\) ,这已被证明在重要和不重要元素之间提供了最佳平衡 [1].

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

只有在考虑到重要的外部标准时,指定秩数组才有意义。如果像通常发生的那样,您没有考虑到特定的级别,那么加权的 \(\tau\) 是通过将使用递减词典编纂排名获得的值按以下方式平均来定义的 (xy )和由 (yx )。这是使用默认参数时的行为。请注意,此处用于排序的约定(较低的值意味着较高的重要性)与其他SciPy统计函数使用的约定相反。

参数
x, yarray_like

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

rank整型或布尔型的array_like,可选

分配给每个元素的非负秩。如果该值为NONE,则按以下方式递减的词典编纂排名 (xy )将被使用:排名较高的元素将是那些具有较大值的元素 x -值,使用 y -中断关系的值(特别是交换 xy 将产生不同的结果)。如果为false,则元素索引将直接用作排名。缺省值为True,在这种情况下,此函数将返回使用字典编纂排名递减方式获得的值的平均值 (xy )和由 (yx )。

weigher可调用,可选

称重功能。必须将非负整数(零表示最重要的元素)映射到非负权重。默认值NONE提供双曲线权重,即等级 \(r\) 映射到权重 \(1/(r+1)\)

additive布尔值,可选

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

退货
correlation浮动

有权重的 \(\tau\) 相关指数。

pvalue浮动

目前 np.nan ,因为空统计是未知的(即使在加性双曲线的情况下也是如此)。

参见

kendalltau

计算肯德尔的τ。

spearmanr

计算Spearman秩相关系数。

theilslopes

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

注意事项

此函数使用 \(O(n \log n)\) ,基于合并排序的算法 [1] 这是Kendall的Knight算法的加权扩展 \(\tau\) [2]. 它可以计算谢氏加权 \(\tau\) [3] 在没有平局(即,排列)的排名之间通过设置 additiverank 设置为false,如 [1] 是谢家华的推广。

NANS被认为是可能的最小分数。

0.19.0 新版功能.

参考文献

1(1,2,3)

Sebastiano Vigna,“并列排名的加权相关指数”,第24届万维网国际会议论文集,第1166-1176页,ACM,2015年。

2

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

3

格蕾丝·S·谢。“加权Kendall的τ统计量”,“统计与概率通讯”,第39卷,第1期,第17-24页,1998年。

示例

>>> from scipy import stats
>>> x = [12, 2, 1, 12, 2]
>>> y = [1, 4, 7, 1, 0]
>>> tau, p_value = stats.weightedtau(x, y)
>>> tau
-0.56694968153682723
>>> p_value
nan
>>> tau, p_value = stats.weightedtau(x, y, additive=False)
>>> tau
-0.62205716951801038

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

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

这正是肯德尔的牛排:

>>> x = [12, 2, 1, 12, 2]
>>> y = [1, 4, 7, 1, 0]
>>> tau, _ = stats.weightedtau(x, y, weigher=lambda x: 1)
>>> tau
-0.47140452079103173
>>> x = [12, 2, 1, 12, 2]
>>> y = [1, 4, 7, 1, 0]
>>> stats.weightedtau(x, y, rank=None)
WeightedTauResult(correlation=-0.4157652301037516, pvalue=nan)
>>> stats.weightedtau(y, x, rank=None)
WeightedTauResult(correlation=-0.7181341329699028, pvalue=nan)