2013-04-17 10 views
9

Sto usando la libreria Python di scipy per calcolare la correlazione di Pearson per due array mobili. Il valore restituito per il coefficiente è sempre 1.0, anche se gli array sono diversi. Per esempio:Scipy: la correlazione di Pearson restituisce sempre 1

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

sto chiamando la routine in questo modo:

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

Il valore di r_row è sempre 1.0. Che cosa sto facendo di sbagliato?

risposta

16

Pearson's correlation coefficient è una misura di come i dati sarebbero montato da una regressione lineare. Se fornisci solo due punti, allora c'è una linea che passa esattamente attraverso entrambi i punti, quindi i tuoi dati si adattano perfettamente a una linea, quindi il coefficiente di correlazione è esattamente 1.

5

Credo che il coefficiente di correlazione di Pearson restituisce sempre 1.0 o -1.0 se ogni matrice ha solo due elementi, in quanto è sempre possibile disegnare una linea retta ideale attraverso i due points.Try con array di lunghezza 3 e funzionerà:

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) 

Risultato:

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

perché non funziona per gli array con lunghezza 2 ? – user2291379

+0

Funziona con array con lunghezza 2. –