2011-04-13 49 views
7

我想在Matlab中计算Pearson's correlation coefficent(不使用Matlab的corr函数)。在Matlab中Pearson's系数和协方差计算

简单地说,我有两个矢量A和B(它们中的每是1×100),我试图以计算这样的皮尔森系数:

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

我使用Matlab的covstd功能。我不明白的是,在COV函数返回我一个方阵是这样的:

corrAB = 
    0.8000 0.2000 
    0.2000 4.8000 

但我期待有一个单一的号码作为协方差,所以我可以想出一个P(皮尔逊系数)号码。我错过了什么?

+0

你的意思是'P = COV(X,Y)/ SQRT(VAR(X)* VAR(Y)); '?对角线应该是1.非对角线是你想要的。 – 2011-04-13 12:16:36

+0

你是对的,我更新了这个问题。上例中的“对角线”是0.2000还是0.2000?那么我应该用他们做另一个计算还是只用0.2来计算? – Ramala 2011-04-13 13:17:09

+0

以你为例,0.2是非对角线。但是,0.8和4.8都应该是1.所以你的calc有些问题。只需做corr(x,y)检查。阅读帮助以了解为什么它返回一个矩阵。这也是我第一次意外。 – 2011-04-13 16:16:21

回答

2

从文档:

COV(X,Y),其中X和Y是矩阵 具有相同数量的元素,是 相当于COV([X(:) Y(:) ])。

使用:

C = cov(X,Y); 
coeff = C(1,2)/sqrt(C(1,1) * C(2,2)) 
+0

“coeff”变量是Pearson系数吗?或者你的意思是协变?因为在系数公式中,我需要通过X和Y的标准偏差来划分协方差。 – Ramala 2011-04-13 13:19:15

+0

对不起,意思是添加分母的sqrt。将编辑。 – 2011-04-13 18:41:05

10

我觉得你只是协方差和协方差矩阵,以及数学符号和MATLAB的功能,输入你看起来类似困惑。在数学中,cov(x,y)意味着两个变量xycovariance。在MATLAB中,cov(x,y)计算xycovariance matrix。这里cov是一个函数,xy是输入。

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

C_xx C_xy 
C_yx C_yy 

由于RichC指出的矩阵,你需要关闭对角线,​​(注意C_xy=C_yx真正的变量xy)。 MATLAB脚本,让您的皮尔森系数两个变量xy是:

C=cov(x,y); 
p=C(2)/(std(x)*std(y));