2012-07-05 93 views
2

我想用Matlab學習主成分迴歸(pcr)。我使用本指南在這裏:http://www.mathworks.fr/help/stats/examples/partial-least-squares-regression-and-principal-components-regression.htmlMatlab常數項主成分迴歸(pcr)分析

它真的很好,但我只是不明白一個步:

我們做PCA和迴歸,美觀,清晰的:

[PCALoadings,PCAScores,PCAVar] = princomp(X); 
betaPCR = regress(y-mean(y), PCAScores(:,1:2)); 

然後我們調整第一系數:

betaPCR = PCALoadings(:,1:2)*betaPCR; 
betaPCR = [mean(y) - mean(X)*betaPCR; betaPCR]; 
yfitPCR = [ones(n,1) X]*betaPCR; 

怎麼說,係數必須是'mean(y) - mean(X)*betaPCR'爲常數的一個因素?你能解釋一下嗎?

在此先感謝!

回答

4

這真是一個數學問題,而不是編碼問題。您的PCA提取一組功能並將其放入一個矩陣中,從而爲您提供PCALoadingsPCAScores。拉出前兩個主成分及其載荷,並把它們放在自己的矩陣:

W = PCALoadings(:, 1:2) 
Z = PCAScores(:, 1:2) 

XZ之間的關係是X可以近似表示爲:

Z = (X - mean(X)) * W  <=>  X ~ mean(X) + Z * W'     (1) 

的直覺是Z捕獲X中的大部分「重要信息」,並且矩陣W告訴您如何在兩個表示之間進行轉換。

現在您可以對Z進行迴歸y。首先,你必須從y減去平均,這樣既左側和右側有代表0:

y - mean(y) = Z * beta + errors           (2) 

現在你要使用的迴歸從X作出y預測。由式(1)代入式(2)代給你

y - mean(y) = (X - mean(X)) * W * beta 

      = (X - mean(X)) * beta1 

在這裏我們定義beta1 = W * beta(你這樣做在你的代碼的第三行)。花事:

y = mean(y) - mean(X) * beta1 + X * beta1 

    = [ones(n,1) X] * [mean(y) - mean(X) * beta1; beta1] 

    = [ones(n,1) X] * betaPCR 

如果我們定義

betaPCR = [mean(y) - mean(X) * beta1; beta1] 

在你的代碼第四行能夠統計出。

+0

非常感謝,你已經幫了很多! – Matlabber 2012-07-06 11:00:13