¿Por qué corrcoef devuelve una matriz?

Me parece extraño que np.corrcoef devuelva una matriz.

correlation1 = corrcoef(Strategy1Returns,Strategy2Returns) [[ 1. -0.99598935] [-0.99598935 1. ]] 

¿Alguien sabe por qué este es el caso y si es posible devolver solo un valor en el sentido clásico?

Le permite calcular 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 del conjunto de dos datos es solo un caso especial de la clase de conjunto de datos N. Y probablemente es mejor mantener el mismo tipo de retorno. Dado que el “valor único” se puede obtener simplemente con

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

No hay una gran razón para crear el caso especial.

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á lugar 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. Solo desea correlation1[ 0, 1 ] .

La matriz de correlación es la forma estándar de express correlaciones entre un número finito arbitrario de variables. La matriz de correlación de N vectores de datos es una matriz N × N simétrica con unidad diagonal. Solo en el caso de que N = 2 tenga esta matriz un parámetro libre.

Considere el uso de matplotlib.cbook piezas

por ejemplo:

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

La función Correlacionar de números funciona con 2 matrices 1D que desea correlacionar y devuelve un valor de correlación.

Puede usar la siguiente función para devolver solo el coeficiente de correlación:

 def pearson_r(x, y): """Compute Pearson correlation coefficient between two arrays.""" # Compute correlation matrix corr_mat = np.corrcoef(x, y) # Return entry [0,1] return corr_mat[0,1]