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?
Odpowiedzi:
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.
źródło
corrcoef
zwraca znormalizowaną macierz kowariancji.Macierz kowariancji to macierz
Po znormalizowaniu da to macierz:
correlation1[0, 0 ]
to korelacja międzyStrategy1Returns
sobą, która musi wynosić 1. Po prostu chceszcorrelation1[ 0, 1 ]
.źródło
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.
źródło
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]
źródło
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
źródło
Funkcja Correlate of numpy działa z tablicami 2 1D, które chcesz skorelować i zwraca jedną wartość korelacji.
źródło