¿Por qué corrcoef devuelve una matriz?

81

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

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

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

Dan
fuente
28
¿Puede marcar la mejor respuesta de abajo como respeto?
Yank

Respuestas:

157

Le permite calcular coeficientes de correlación de> 2 conjuntos de datos, p. Ej.

>>> 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) yb, c (-0,972) a la vez. El caso de dos conjuntos de datos es solo un caso especial de la clase N-conjunto de datos. 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 gran razón para crear el caso especial.

Kennytm
fuente
1
Excelente ejemplo, que ilustra claramente la funcionalidad básica de CORRCOEF (además de responder a la pregunta original)
Hiro
¿Cuál es la fórmula si paso xY y?
Evgeni Nabokov
53

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 producirá la matriz:

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

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

correlation1[0, 0 ]es la correlación entre Strategy1Returnsy él mismo, que debe ser 1. Solo quieres correlation1[ 0, 1 ].

Katriel
fuente
¿Cuál es la fórmula para corrcoef (x, y, rowvar = False), donde xey tienen la forma (150, 4)? El resultado es la matriz 8x8 (¿por qué?).
Evgeni Nabokov
1
@EvgeniNabokov El resultado de x e y concatenados como si estuvieran apilados en forma (150, 8). Luego 1 corrcoef por cada combinación. La fórmula es la misma (стандартная).
sherdim
6

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

Philipp
fuente
2

Puede utilizar 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]
Arman Aynaszyan
fuente
1

Considere usar piezas de matplotlib.cbook

por ejemplo:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s
Schwater
fuente
Actualización requerida ya que cbook ha quedado obsoleto.
Van Peer
1

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

Sergio
fuente