np.corrcoefが行列を返すのは私には奇妙に思えます。
correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)
[[ 1. -0.99598935]
[-0.99598935 1. ]]
なぜこれが当てはまるのか、そして古典的な意味で1つの値だけを返すことが可能かどうかを誰かが知っていますか?
回答:
これにより、2つを超えるデータセットの相関係数を計算できます。
>>> 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. ]])
ここで、a、b(0.995)、a、c(-0.981)、b、c(-0.972)の相関係数を一度に取得できます。2つのデータセットの場合は、Nデータセットクラスの特殊なケースにすぎません。そして、おそらく同じ戻り値の型を維持する方が良いでしょう。「1つの値」は簡単に取得できるので
>>> corrcoef(a,b)[1,0]
0.99535001355530017
特別なケースを作成する大きな理由はありません。
corrcoef
正規化された共分散行列を返します。
共分散行列は行列です
Cov( X, X ) Cov( X, Y )
Cov( Y, X ) Cov( Y, Y )
正規化すると、次の行列が生成されます。
Corr( X, X ) Corr( X, Y )
Corr( Y, X ) Corr( Y, Y )
correlation1[0, 0 ]
Strategy1Returns
とそれ自体の間の相関関係であり、1でなければなりません。必要なのはcorrelation1[ 0, 1 ]
。
次の関数を使用して、相関係数のみを返すことができます。
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]