Spearman在Python中使用关系排名相关

fso*_*ety 4 python statistics scipy correlation

我想使用Python 计算spearman等级相关性,并且最有可能是scipy实现(scipy.stats.spearmanr).

手头的数据看起来如下,以下方式(字典):

{a:0.3, b:0.2, c:0.2} and {a:0.5, b:0.6, c:0.4}
Run Code Online (Sandbox Code Playgroud)

现在把它传递给spearman模块,如果我是正确的(降序),我会给它们分配等级:

[1,2,3] and [2,1,3]
Run Code Online (Sandbox Code Playgroud)

所以现在我想考虑关系,所以我现在用于第一个向量:

[1,2,2] or [1,2.5,2.5]
Run Code Online (Sandbox Code Playgroud)

基本上,这整个概念是否正确以及如何处理这种基于字典的数据的联系.

正如@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)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jai*_*ime 9

scipy.stats.spearmanr 将负责为您计算排名,您只需按正确的顺序给它数据:

>>> scipy.stats.spearmanr([0.3, 0.2, 0.2], [0.5, 0.6, 0.4])
(0.0, 1.0)
Run Code Online (Sandbox Code Playgroud)

如果您有排名数据,可以调用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)
Run Code Online (Sandbox Code Playgroud)