2010-08-06 15 views
27

Mi sembra strano che np.corrcoef restituisca una matrice.Perché corrcoef restituisce una matrice?

correlation1 = corrcoef(Strategy1Returns,Strategy2Returns) 

[[ 1.   -0.99598935] 
[-0.99598935 1.  ]] 

Qualcuno sa perché questo è il caso e se è possibile restituire un solo valore nel senso classico?

+6

è possibile selezionare la migliore risposta da sotto il rispetto? – Yank

risposta

25

corrcoef restituisce la matrice di covarianza normalizzata.

La matrice di covarianza è la matrice

Cov(X, X) Cov(X, Y) 

Cov(Y, X) Cov(Y, Y) 

Normalizzato, questo darà la matrice:

Corr(X, X) Corr(X, Y) 

Corr(Y, X) Corr(Y, Y) 

correlation1[0, 0 ] è la correlazione tra Strategy1Returns e si, che deve essere 1. Si vuole solo correlation1[ 0, 1 ] .

5

La matrice di correlazione è il modo standard per esprimere correlazioni tra un numero finito arbitrario di variabili. La matrice di correlazione dei vettori di dati N è una simmetrica N × matrice N con unità diagonale. Solo nel caso N = 2 questa matrice ha un parametro libero.

59

Consente di calcolare i coefficienti di correlazione di> 2 set di dati, ad es.

>>> from numpy import * 
>>> a = array([1,2,3,4,6,7,8,9]) 
>>> b = array([2,4,6,8,10,12,13,15]) 
>>> c = array([-1,-2,-2,-3,-4,-6,-7,-8]) 
>>> corrcoef([a,b,c]) 
array([[ 1.  , 0.99535001, -0.9805214 ], 
     [ 0.99535001, 1.  , -0.97172394], 
     [-0.9805214 , -0.97172394, 1.  ]]) 

Qui possiamo ottenere il coefficiente di correlazione di a, b (0,995), a, c (-0,981) e b, c (-0,972) contemporaneamente. Il caso dei due set di dati è solo un caso speciale della classe N-data-set. E probabilmente è meglio mantenere lo stesso tipo di ritorno. Poiché il "valore unico" può essere ottenuto semplicemente con

>>> corrcoef(a,b)[1,0] 
0.99535001355530017 

non c'è un grande motivo per creare il caso speciale.

+0

Eccellente esempio, che illustra chiaramente funzionalità di base di CORRCOEF (al di là di rispondere alla domanda originale) – Hiro

1

considerare l'utilizzo di pezzi matplotlib.cbook

ad esempio:

import matplotlib.cbook as cbook 
segments = cbook.pieces(np.arange(20), 3) 
for s in segments: 
    print s 
1

La funzione correlato di NumPy lavora con array 2 1D che si desidera correlare e restituisce un valore di correlazione.

Problemi correlati