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?
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.
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 ]
.
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.
La fonction Corrélation de numpy fonctionne avec 2 tableaux 1D que vous souhaitez corréler et renvoie une valeur de corrélation.
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
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]