2013-02-11 59 views
2

我想使用python和最有可能的scipys实现(scipy.stats.spearmanr)来计算spearman rank correlationPython中的Spearman等级相关关系

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

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

要立即将它传递给斯皮尔曼模块,我会为它们分配的行列,如果我是正确的(降序):

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

所以现在我要考虑的关系,所以我现在使用的第一载体:

[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) 

谢谢!

+0

您应该包括一个简要的解释和什么“Spearman等级相关”是一个链接。此外,[你有什么尝试?](http://www.whathaveyoutried.com) – 2013-02-11 15:38:37

回答

6

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) 
+0

谢谢,不知道它也与简单的值工作。不过,我很好奇它是如何在内部工作的。该方法如何知道,如果我通过队伍这些是没有价值的?因为,如果我现在不完全困惑,排名看起来会不一样。 – fsociety 2013-02-11 19:53:24

+0

@ph_singer它们是不同的功能。 'spearmanr'会将你给它的任何东西变成行列,然后计算一个皮尔逊相关系数。另一方面,pearsonr直接计算Pearson相关系数。 – Jaime 2013-02-11 21:29:55

+0

我在原始问题中添加了一个示例,因为我无法在此评论中发布它。请看看它。谢谢! – fsociety 2013-02-11 22:01:33