Warum gibt Corrcoef eine Matrix zurück?

81

Es scheint mir seltsam, dass np.corrcoef eine Matrix zurückgibt.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Weiß jemand, warum dies der Fall ist und ob es möglich ist, nur einen Wert im klassischen Sinne zurückzugeben?

Dan
quelle
28
Kannst du die beste Antwort von unten als Respekt ankreuzen?
Yank

Antworten:

156

Sie können damit Korrelationskoeffizienten von> 2 Datensätzen berechnen, z

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

Hier können wir den Korrelationskoeffizienten von a, b (0,995), a, c (-0,981) und b, c (-0,972) gleichzeitig erhalten. Der Fall mit zwei Datensätzen ist nur ein Sonderfall der Klasse mit N Datensätzen. Und wahrscheinlich ist es besser, den gleichen Rückgabetyp beizubehalten. Da der "eine Wert" einfach mit erhalten werden kann

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

Es gibt keinen großen Grund, den Sonderfall zu erstellen.

kennytm
quelle
1
Ausgezeichnetes Beispiel, das die grundlegende Funktionalität von CORRCOEF (über die Beantwortung der ursprünglichen Frage hinaus) deutlich zeigt
Hiro
Was ist die Formel, wenn ich x UND y übergebe?
Evgeni Nabokov
53

corrcoef Gibt die normalisierte Kovarianzmatrix zurück.

Die Kovarianzmatrix ist die Matrix

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

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

Normalisiert ergibt dies die Matrix:

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

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

correlation1[0, 0 ]ist die Korrelation zwischen Strategy1Returnsund sich selbst, die 1 sein muss. Sie wollen nur correlation1[ 0, 1 ].

Katriel
quelle
Wie lautet die Formel für Corrcoef (x, y, rowvar = False), wobei x und y die Form haben (150, 4)? Das Ergebnis ist Matrix 8x8 (warum?).
Evgeni Nabokov
1
@EvgeniNabokov Das Ergebnis für verkettetes x und y, als ob sie in (150, 8) Form gestapelt wären. Dann 1 Corrcoef für jede Kombination. Die Formel ist dieselbe (стандартная).
Sherdim
6

Die Korrelationsmatrix ist die Standardmethode, um Korrelationen zwischen einer beliebigen endlichen Anzahl von Variablen auszudrücken. Die Korrelationsmatrix von N Datenvektoren ist eine symmetrische N × N- Matrix mit einer Einheitsdiagonale. Nur im Fall N = 2 hat diese Matrix einen freien Parameter.

Philipp
quelle
2

Mit der folgenden Funktion können Sie nur den Korrelationskoeffizienten zurückgeben:

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
quelle
1

Erwägen Sie die Verwendung von matplotlib.cbook-Teilen

zum Beispiel:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s
schwater
quelle
Aktualisierung erforderlich, da cbook veraltet ist.
Van Peer
1

Die Funktion Korrelieren von numpy funktioniert mit 2 1D-Arrays, die Sie korrelieren möchten, und gibt einen Korrelationswert zurück.

Sergio
quelle