2011-04-13 79 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));