Dlaczego Corrcoef zwraca macierz?

81

Wydaje mi się dziwne, że np.corrcoef zwraca macierz.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Czy ktoś wie, dlaczego tak jest i czy można zwrócić tylko jedną wartość w klasycznym sensie?

Dan
źródło
28
czy możesz zaznaczyć najlepszą odpowiedź poniżej jako szacunek?
Jankes

Odpowiedzi:

157

Pozwala obliczyć współczynniki korelacji> 2 zbiorów danych, np

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

Tutaj możemy otrzymać współczynnik korelacji a, b (0,995), a, c (-0,981) i b, c (-0,972). Przypadek dwóch zestawów danych jest po prostu szczególnym przypadkiem klasy N-zestaw danych. I prawdopodobnie lepiej jest zachować ten sam typ zwrotu. Ponieważ „jedną wartość” można uzyskać po prostu za pomocą

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

nie ma powodu, aby tworzyć przypadek specjalny.

kennytm
źródło
1
Doskonały przykład, który jasno ilustruje podstawową funkcjonalność CORRCOEF (poza odpowiedzią na oryginalne pytanie)
Hiro,
Jaki jest wzór, jeśli przejdę x AND y?
Evgeni Nabokov
53

corrcoef zwraca znormalizowaną macierz kowariancji.

Macierz kowariancji to macierz

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

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

Po znormalizowaniu da to macierz:

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

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

correlation1[0, 0 ]to korelacja między Strategy1Returnssobą, która musi wynosić 1. Po prostu chcesz correlation1[ 0, 1 ].

Katriel
źródło
Jaki jest wzór na corrcoef (x, y, rowvar = False), gdzie x i y mają kształt (150, 4)? Rezultatem jest macierz 8x8 (dlaczego?).
Evgeni Nabokov
1
@EvgeniNabokov Wynik dla połączonych x i y, tak jakby zostały one zhakowane w kształcie (150, 8). Następnie 1 korekta dla każdej kombinacji. Formuła jest taka sama (стандартная).
sherdim
6

Macierz korelacji jest standardowym sposobem wyrażania korelacji między dowolną, skończoną liczbą zmiennych. Macierz korelacji N wektorów danych jest symetryczną macierzą N × N o jedności przekątnej. Tylko w przypadku N = 2 macierz ta ma jeden wolny parametr.

Philipp
źródło
2

Możesz użyć następującej funkcji, aby zwrócić tylko współczynnik korelacji:

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
źródło
1

Rozważ użycie kawałków matplotlib.cbook

na przykład:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s
schwater
źródło
Wymagana aktualizacja, ponieważ cbook został wycofany.
Van Peer
1

Funkcja Correlate of numpy działa z tablicami 2 1D, które chcesz skorelować i zwraca jedną wartość korelacji.

Sergio
źródło