7

我想在 Matlab 中计算Pearson 的相关系数(不使用 Matlab 的corr函数)。

简单地说,我有两个向量 A 和 B(它们都是 1x100),我正在尝试计算皮尔逊系数,如下所示:

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

我正在使用 Matlab 的covstd函数。我没有得到的是, cov 函数返回给我一个像这样的方阵:

corrAB =
    0.8000    0.2000
    0.2000    4.8000

但我希望一个数字作为协方差,所以我可以得出一个 P(皮尔逊系数)数字。我错过了什么?

4

2 回答 2

10

我认为您只是对协方差和协方差矩阵感到困惑,数学符号和 MATLAB 的函数输入看起来确实相似。在数学中,cov(x,y)表示两个变量和的协方差。在 MATLAB 中,计算 和 的协方差矩阵。这是一个函数,并且是输入。xycov(x,y)xycovxy

为了更清楚,让我用 来表示协方差C。MATLAB 的cov(x,y)返回形式为

C_xx    C_xy
C_yx    C_yy

正如 RichC 指出的那样,您需要非对角线,C_xy(请注意,C_xy=C_yx对于实变量xy)。为您提供两个变量x和的皮尔逊系数的 MATLAB 脚本y是:

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 回答