Matlab主成分回归(pcr)分析中的常数项

我正在尝试用Matlab学习主成分回归(pcr).我在这里使用本指南:http://www.mathworks.fr/help/stats/examples/partial-least-squares-regression-and-principal-components-regression.html

这真的很好,但我无法理解一步:

我们做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;

为什么系数需要为常数一个因子的’均值(y) – 均值(X)* betaPCR’?你能解释一下吗?

提前致谢!

最佳答案
这实际上是一个数学问题,而不是编码问题.您的PCA提取一组功能并将它们放在一个矩阵中,该矩阵为您提供PCALoadings和PCAScores.拉出前两个主要组件及其载荷,并将它们放在自己的矩阵中:

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

X和Z之间的关系是X可以近似为:

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

直觉是Z捕获X中的大部分“重要信息”,矩阵W告诉您如何在两个表示之间进行转换.

现在你可以对Z进行y的回归.首先你必须从y中减去均值,这样左右两边的均值为零:

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]

就像你的第四行代码一样.

转载注明原文:Matlab主成分回归(pcr)分析中的常数项 - 代码日志