7

Matlab で (Matlab の関数を使用せずに)ピアソンの相関係数を計算したい。corr

簡単に言えば、2 つのベクトル A と B (それぞれが 1x100) があり、ピアソンの係数を次のように計算しようとしています。

P = cov(x, y)/std(x, 1)std(y,1)

私はMatlabのcovandstd関数を使用しています。私が得られないのは、 cov 関数が次のような正方行列を返すことです。

corrAB =
    0.8000    0.2000
    0.2000    4.8000

しかし、共分散として単一の数値を期待しているので、単一の P (ピアソン係数) 数値を考え出すことができます。私が見逃しているポイントは何ですか?

4

2 に答える 2

10

共分散と共分散行列と混同しているだけだと思います。数学表記と MATLAB の関数入力は似ています。数学では、は 2 つの変数との共分散cov(x,y)を意味します。MATLAB で、と の共分散行列を計算します。ここに関数があり、とが入力です。xycov(x,y)xycovxy

わかりやすくするために、共分散を で表しCます。MATLABcov(x,y)は次の形式の行列を返します。

C_xx    C_xy
C_yx    C_yy

RichC が指摘したように、非対角線が必要です(実際の変数およびについてはC_xy注意してください)。2 つの変数とのピアソン係数を与える MATLAB スクリプトは次のとおりです。C_xy=C_yxxyxy

C=cov(x,y);
p=C(2)/(std(x)*std(y));
于 2011-04-13T17:58:55.497 に答える
2

ドキュメントから:

cov(X,Y) (X と Y は同じ要素数の行列) は、cov([X(:) Y(:)]) と等価です。

使用する:

C = cov(X,Y);
coeff = C(1,2) / sqrt(C(1,1) * C(2,2))
于 2011-04-13T08:01:05.747 に答える