2013-04-17 9 views
9

Ich benutze Python-Bibliothek scipy, um Pearson-Korrelation für zwei Float-Arrays zu berechnen. Der zurückgegebene Wert für den Koeffizienten ist immer 1,0, auch wenn die Arrays unterschiedlich sind. Zum Beispiel:Scipy: Pearson-Korrelation immer zurück 1

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

Ich rufe die Routine auf diese Weise:

r_row, p_value = scipy.stats.pearsonr(array1, array2) 

Der Wert von r_row ist immer 1,0. Was mache ich falsch?

Antwort

16

Pearson's correlation coefficient ist ein Maß dafür, wie gut Ihre Daten würden durch eine lineare Regression angepasst werden. Wenn Sie es nur mit zwei Punkten versehen, gibt es eine Linie, die genau durch beide Punkte verläuft, daher passen Ihre Daten perfekt zu einer Linie. Daher ist der Korrelationskoeffizient genau 1.

5

denke ich, dass pearson Korrelationskoeffizient gibt immer 1.0 oder -1.0 wenn jedes Feld nur zwei Elemente hat, da man immer einen perfekten geraden Linie durch die beiden points.Try es mit Arrays der Länge 3 ziehen kann und es wird funktionieren:

import scipy 
from scipy.stats import pearsonr 

x = scipy.array([-0.65499887, 2.34644428, 3.0]) 
y = scipy.array([-1.46049758, 3.86537321, 21.0]) 

r_row, p_value = pearsonr(x, y) 

Ergebnis:

>>> r_row 
0.79617014831975552 
>>> p_value 
0.41371200873701036 
+0

Warum funktioniert es nicht für Arrays mit Länge 2 ? – user2291379

+0

Es funktioniert mit Arrays mit Länge 2. –