2013-04-17 13 views
9

Używam scipy biblioteki Pythona do obliczenia korelacji Pearsona dla dwóch tablic float. Zwracana wartość współczynnika wynosi zawsze 1,0, nawet jeśli tablice są różne. Na przykład:Scipy: Korelacja Pearsona zawsze wraca 1

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

Wołam rutynę w następujący sposób:

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

Wartość r_row jest zawsze 1,0. Co ja robię źle?

Odpowiedz

16

Pearson's correlation coefficient jest miarą tego, jak dobrze dane zostaną zamontowane za pomocą regresji liniowej. Jeśli dostarczysz mu tylko dwa punkty, wtedy linia przechodzi dokładnie przez oba punkty, dlatego twoje dane idealnie pasują do linii, stąd współczynnik korelacji wynosi dokładnie 1.

5

myślę, że współczynnik korelacji Pearsona zawsze zwraca 1.0 lub -1.0 jeśli każda matryca ma tylko dwa elementy, ponieważ zawsze można narysować idealną linię prostą przez dwa points.Try to z tablicami o długości 3 i będzie działać:

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) 

Wynik:

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

dlaczego nie działa dla tablic o długości 2 ? – user2291379

+0

Działa z tablicami o długości 2. –