Pearson在Matlab中的系数和协方差计算

Ram*_*ala 7 matlab pearson correlation

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

简单地说,我有两个向量A和B(每个向量都是1x100),我试图像这样计算Pearson系数:

P = cov(x, y)/std(x, 1)std(y,1)
Run Code Online (Sandbox Code Playgroud)

我正在使用Matlab covstd函数.我没有得到的是,cov函数返回一个方形矩阵,如下所示:

corrAB =
    0.8000    0.2000
    0.2000    4.8000
Run Code Online (Sandbox Code Playgroud)

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

abc*_*bcd 10

我认为你只是与协方差和协方差矩阵混淆,数学符号和MATLAB的函数输入看起来很相似.在数学,cov(x,y)意味着协方差这两个变量的xy.在MATLAB中,cov(x,y)计算协方差矩阵xy.这cov是一个功能,x而且y是输入.

为了使它更清楚,让我表示协方差C.MATLAB cov(x,y)返回一个表格矩阵

C_xx    C_xy
C_yx    C_yy
Run Code Online (Sandbox Code Playgroud)

正如RichC指出的那样,你需要非对角线C_xy(注意C_xy=C_yx对于实际变量xy).MATLAB脚本,让您的皮尔森系数两个变量xy,就是:

C=cov(x,y);
p=C(2)/(std(x)*std(y));
Run Code Online (Sandbox Code Playgroud)


小智 2

来自文档:

cov(X,Y)(其中 X 和 Y 是元素数量相同的矩阵)等价于 cov([X(:) Y(:)])。

使用:

C = cov(X,Y);
coeff = C(1,2) / sqrt(C(1,1) * C(2,2))
Run Code Online (Sandbox Code Playgroud)