2010-08-06 30 views
27

Parece extraño que np.corrcoef devuelve una matriz.¿Por qué la corrcoef devuelve una matriz?

correlation1 = corrcoef(Strategy1Returns,Strategy2Returns) 

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

¿Alguien sabe por qué esto es así, y si es posible devolver un solo valor en el sentido clásico?

+6

puede que marque la mejor respuesta desde abajo como el respeto? – Yank

Respuesta

25

corrcoef devuelve la matriz de covarianza normalizada.

La matriz de covarianza es la matriz

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

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

normalizado, esto dará paso a la matriz:

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

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

correlation1[0, 0 ] es la correlación entre Strategy1Returns y ella misma, que debe ser 1. Lo que desea correlation1[ 0, 1 ] .

5

La matriz de correlación es la manera estándar para expresar correlaciones entre un número finito arbitraria de variables. La matriz de correlación de N vectores de datos es un simétrico N × N matriz con unidad diagonal. Sólo en el caso N = 2 no esta matriz tiene un parámetro libre.

59

Se le permite calcular los coeficientes de correlación de> 2 conjuntos de datos, por ejemplo,

>>> 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.  ]]) 

Aquí podemos obtener el coeficiente de correlación de a, b (0.995), a, c (-0.981) y b, c (-0.972) a la vez. El caso de dos conjuntos de datos es solo un caso especial de clase N-data-set. Y probablemente sea mejor mantener el mismo tipo de devolución. Dado que el "valor único" se puede obtener simplemente con

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

no hay una razón importante para crear el caso especial.

+0

Excelente ejemplo, que ilustra claramente la funcionalidad básica de CORRCOEF (más allá de responder a la pregunta original) – Hiro

1

considerar el uso de piezas matplotlib.cbook

por ejemplo:

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

La función de correlación de la numpy funciona con 2 campos de 1D que desea correlacionar y devuelve un valor de correlación.

Cuestiones relacionadas