You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SciPy中Spearman秩相关系数计算与手动计算结果不符的问题排查

SciPy中Spearman秩相关系数计算与手动计算结果不符的问题排查

我正在尝试用scipy.stats.spearmanr和手动公式计算两个排名列表之间的Spearman秩相关系数:

Spearman秩相关系数公式

但是我得到的结果差异很大。

两个方法的排名数据

Method 1 排名

  • 用户ID: [301, 597, 414, 477, 57, 369, 206, 535, 590, 418]
  • 对应排名: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Method 2 排名

  • 用户ID: [301, 477, 19, 120, 75, 57, 597, 160, 577, 369]
  • 对应排名: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

使用SciPy计算的代码结果

from scipy.stats import spearmanr

method1 = [301, 597, 414, 477, 57, 369, 206, 535, 590, 418]
method2 = [301, 477, 19, 120, 75, 57, 597, 160, 577, 369]

coef, _ = spearmanr(method1, method2)
print(f"Spearman coefficient: {coef}")

# 输出结果
Spearman coefficient: 0.2727

手动计算过程

为了验证结果,我只针对两个列表中的共同用户进行了计算:

用户IDMethod 1 排名Method 2 排名d_i = R₁ - R₂d_i²
3011100
59727-525
4774224
5756-11
369610-416

这里只有5个共同用户,所以n=5。代入公式后我得到的Spearman系数ρ = -1.3,这明显超出了Spearman系数的取值范围[-1, 1],但scipy.stats.spearmanr给出的结果是0.2727,在合理范围内但和手动结果差异巨大。

我的疑问

  • 为什么我的手动计算是错误的?是不是在处理缺失用户或者排名的方式上出了问题?
  • scipy.stats.spearmanr内部是如何处理缺失值或者不匹配的列表的?它只针对共同元素排名,还是会考虑所有元素?
  • 我的手动方法哪里错了?scipy.stats.spearmanr内部到底是怎么处理排名的?

备注:内容来源于stack exchange,提问作者Partha Pratim Sarma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:25:28