2013-04-17 27 views
9

İki float dizisi için Pearson korelasyonunu hesaplamak için Python kitaplığı scipy kullanıyorum. Diziler farklı olsa bile katsayı için geri dönüş değeri her zaman 1.0'dır. Örneğin:Scipy: Pearson korelasyonu her zaman geri döner 1

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

r_row değeri her zaman 1.0:

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

ben bu şekilde rutin arıyorum. Neyi yanlış yapıyorum?

cevap

16

Pearson's correlation coefficient lineer regresyon ile donatılmış olacağını ne kadar iyi veri ölçüsüdür. Eğer sadece iki noktaya verirseniz, o zaman tam olarak her iki noktadan geçen bir çizgi vardır, dolayısıyla verileriniz bir çizgiye tam olarak uyar, dolayısıyla korelasyon katsayısı tam olarak 1'dir.

5

Her dizi sadece iki öğe varsa o Pearson korelasyon katsayısı her zaman, her zaman uzunluğu 3 diziler iki points.Try içinden mükemmel düz çizgi çizebilir ve işe olacağından, 1.0 veya -1.0 döndürür düşünüyorum:

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) 

Sonuç:

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

neden 2 uzunluğunda diziler için çalışmaz ? – user2291379

+0

Uzunluğu 2 olan dizilerle çalışır. –