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

3
我正在尝试使用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;

当只有一个因素的时候,为什么这个系数需要是“mean(y) - mean(X)*betaPCR”?你能给我解释一下吗?
提前感谢!
1个回答

5

这实际上是一个数学问题,而不是编程问题。您的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 告诉您如何在这两个表示之间进行转换。
现在,您可以对 Zy 进行回归。首先,您必须从 y 中减去平均值,以使左右两侧均为零:
y - mean(y) = Z * beta + errors                                           (2)

现在你想使用回归来预测yX。将方程(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]

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


非常感谢,你帮了很大的忙! - Matlabber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接