2013-02-11 173 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