web-dev-qa-db-fra.com

Pourquoi corrcoef renvoie une matrice?

Il me semble étrange que np.corrcoef renvoie une matrice.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Est-ce que quelqu'un sait pourquoi c'est le cas et s'il est possible de renvoyer une seule valeur au sens classique?

64
Dan

Il vous permet de calculer des coefficients de corrélation de> 2 ensembles de données, par ex.

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

Ici, nous pouvons obtenir le coefficient de corrélation de a, b (0,995), a, c (-0,981) et b, c (-0,972) à la fois. Le cas des deux ensembles de données n'est qu'un cas spécial de la classe des ensembles de données N. Et il est probablement préférable de conserver le même type de retour. Étant donné que la "valeur unique" peut être obtenue simplement avec

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

il n'y a pas de grande raison de créer le cas spécial.

125
kennytm

corrcoef renvoie la matrice de covariance normalisée.

La matrice de covariance est la matrice

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

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

Normalisé, cela donnera la matrice:

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

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

correlation1[0, 0 ] est la corrélation entre Strategy1Returns et lui-même, qui doit être 1. Vous voulez juste correlation1[ 0, 1 ].

45
Katriel

La matrice de corrélation est le moyen standard d'exprimer des corrélations entre un nombre fini arbitraire de variables. La matrice de corrélation de N vecteurs de données est symétrique N × N matrice avec unité diagonale. Ce n'est que dans le cas N = 2 que cette matrice a un paramètre libre.

7
Philipp

La fonction Corrélation de numpy fonctionne avec 2 tableaux 1D que vous souhaitez corréler et renvoie une valeur de corrélation.

1
Sergio

Pensez à utiliser des morceaux de matplotlib.cbook

par exemple:

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

Vous pouvez utiliser la fonction suivante pour renvoyer uniquement le coefficient de corrélation:

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]
0
Arman Aynaszyan