corrcoefが行列を返すのはなぜですか?


81

np.corrcoefが行列を返すのは私には奇妙に思えます。

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

なぜこれが当てはまるのか、そして古典的な意味で1つの値だけを返すことが可能かどうかを誰かが知っていますか?


28
敬意を表して、下からベストアンサーにチェックを入れてもらえますか?
ヤンク2015年

回答:


157

これにより、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

特別なケースを作成する大きな理由はありません。


1
CORRCOEFの基本的な機能を明確に示す優れた例(元の質問への回答に加えて)
Hiro

x AND yを渡した場合の式は何ですか?
エフゲニーナボコフ

53

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 ]


corrcoef(x、y、rowvar = False)の式は何ですか?ここで、xとyの形状は(150、4)ですか?結果は行列8x8です(なぜですか?)。
エフゲニーナボコフ

1
@EvgeniNabokov(150、8)の形でhstackされたかのように連結されたxとyの結果。次に、組み合わせごとに1つのcorrcoef。式は同じです(стандартная)。
sherdim

6

相関行列は、任意の有限数の変数間の相関を表す標準的な方法です。N個のデータベクトルの相関行列は、対角が1の対称N × N行列です。N = 2の場合にのみ、この行列には1つの自由パラメーターがあります。


2

次の関数を使用して、相関係数のみを返すことができます。

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]

1

matplotlib.cbookピースの使用を検討してください

例えば:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s

cbookは非推奨となったため、更新が必要です。
ヴァンは、ピア

1

numpyの関数Correlateは、相関させたい2つの1D配列で機能し、1つの相関値を返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.