我想在Matlab中计算Pearson's correlation coefficent(不使用Matlab的corr
函数)。
简单地说,我有两个向量A和B(每个向量都是1x100),我试图像这样计算Pearson系数:
P = cov(x, y)/std(x, 1)std(y,1)
我正在使用Matlab的cov
和std
函数。我没有得到的是,cov函数返回一个像这样的方阵:
corrAB =
0.8000 0.2000
0.2000 4.8000
但我希望单个数字作为协方差,所以我可以得出一个P(皮尔森系数)数。我错过了什么意思?
答案 0 :(得分:10)
我认为你只是与协方差和协方差矩阵混淆,数学符号和MATLAB的函数输入看起来很相似。在数学中,cov(x,y)
表示两个变量x
和y
中的 covariance 。在MATLAB中,cov(x,y)
计算x
和y
的 covariance matrix 。此处cov
是一个函数,x
和y
是输入。
为了更清楚,让我用C
来表示协方差。 MATLAB的cov(x,y)
返回格式
C_xx C_xy
C_yx C_yy
正如RichC指出的那样,你需要非对角线C_xy
(注意C_xy=C_yx
对于实变量x
和y
)。一个MATLAB脚本为您提供了两个变量x
和y
的Pearson系数,是:
C=cov(x,y);
p=C(2)/(std(x)*std(y));
答案 1 :(得分:2)
来自文档:
cov(X,Y),其中X和Y是矩阵 具有相同数量的元素,是 相当于cov([X(:) Y(:)])。
使用:
C = cov(X,Y);
coeff = C(1,2) / sqrt(C(1,1) * C(2,2))