Python中带有并列项的Spearman等级相关性

6

我希望使用Python和最可能的scipy实现(scipy.stats.spearmanr)计算斯皮尔曼等级相关性

手头的数据看起来是这样的(字典形式):

{a:0.3, b:0.2, c:0.2} and {a:0.5, b:0.6, c:0.4}

现在将其传递到矛兵模块,如果我没错的话,我会为他们分配等级(降序):

[1,2,3] and [2,1,3]

现在我想考虑绑定,那么对于第一个向量,我现在会使用什么:

[1,2,2] or [1,2.5,2.5]

基本上,这个概念正确吗?如何处理这种基于字典的数据的平局。
正如@Jaime所建议的,spearmanr函数适用于值,但为什么会出现这种行为:
In [5]: spearmanr([0,1,2,3],[1,3,2,0])
Out[5]: (-0.39999999999999997, 0.59999999999999998)

In [6]: spearmanr([10,7,6,5],[0.9,0.5,0.6,1.0])
Out[6]: (-0.39999999999999997, 0.59999999999999998)

谢谢!


你应该包括一个简短的解释和指向“斯皮尔曼等级相关性”的链接。此外,你尝试了什么? - Inbar Rose
1个回答

11

scipy.stats.spearmanr会为您计算排名,您只需按正确的顺序提供数据即可:

>>> scipy.stats.spearmanr([0.3, 0.2, 0.2], [0.5, 0.6, 0.4])
(0.0, 1.0)
如果您有排名数据,可以对其调用scipy.stats.pearsonr以获得相同的结果。正如下面的示例所示,您尝试的任一方法都可以工作,尽管我认为[1, 2.5, 2.5]更常见。另外,scipy使用零为基础的索引,因此内部使用的排名将更像[0, 1.5, 1.5]:
>>> scipy.stats.pearsonr([1, 2, 2], [2, 1, 3])
(0.0, 1.0)
>>> scipy.stats.pearsonr([1, 2.5, 2.5], [2, 1, 3])
(0.0, 1.0)

1
谢谢,我不知道它也适用于普通值。尽管如此,我很好奇它是如何在内部工作的。这个方法如何知道我传递的是排名而不是值?因为,如果我现在没有完全混淆,排名看起来会有所不同。 - fsociety
@ph_singer 这是两个不同的函数。spearmanr 会将你提供的数据转换为排名,然后计算出该排名下的 Pearson 相关系数。而 pearsonr 则直接计算 Pearson 相关系数。 - Jaime
我在原问题中添加了一个示例,因为我无法在此评论中发布它。请看一下。谢谢! - fsociety

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接