2013-04-17 11 views
9

私は2つのフロート配列のピアソンの相関を計算するためにPythonライブラリscipyを使用しています。係数の戻り値は、配列が異なる場合でも常に1.0です。たとえば:Scipy:ピアソンの相関は常に1を返す

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

私はこの方法でルーチンを呼び出しています:

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

r_rowの値は常に1.0です。私は間違って何をしていますか?

答えて

16

Pearson's correlation coefficientは、線形回帰によって装着される方法だけでなく、あなたのデータの尺度です。 2点のみを指定すると、両方の点を正確に通過する線があるため、データは線に完全にフィットします。したがって、相関係数は正確に1です。

5

私は各アレイはちょうど2つの要素を持っている場合は、必ず長さ3の配列を持つ2つのpoints.Tryを通してそれを完璧な直線を描くことができ、それが動作しますので、ピアソン相関係数は常に、1.0または-1.0を返すと思います:

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) 

結果:

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

長さ2の配列? – user2291379

+0

長さ2の配列で動作します。 –

関連する問題