我运行了一个具有9个变量的PCA,然后希望使用前3个主要组件来运行所有可能的线性模型。但是,当我运行8个不同的线性模型时,无论我在模型中使用的因变量如何,截距和系数估计都完全相同。
我已经更新了R和R Studio,但仍然得到相同的结果。如果有人以前曾处理过此问题或有任何建议,我将非常感谢您的帮助。谢谢!
我用来获取主成分值和线性模型的代码如下。
MOOPCA <- prcomp (MOOSE [, -1], cor = TRUE, scale = TRUE)
PCApredict <- predict(MOOPCA)
PC1 <- PCApredict[, 1]
PC2 <- PCApredict[, 2]
PC3 <- PCApredict[, 3]
Full <- lm(Density ~ PC1 + PC2 + PC3)
summary(Full)
MOO1 <- lm(Density ~ PC1)
summary(MOO1)
MOO2 <- lm(Density ~ PC1 + PC2)
summary(MOO2)
所有模型都具有intercept和PC1的回归系数。为什么?
答案 0 :(得分:2)
主成分彼此正交,即它们之间没有线性相关。
set.seed(0)
X <- matrix(runif(50), 10, 5)
pca <- prcomp(X, scale = TRUE) ## no "cor" argument to `prcomp`
XO <- pca$x ## or `XO <- predict(pca)`
round(crossprod(XO), 6)
# PC1 PC2 PC3 PC4 PC5
#PC1 18.35253 0.00000 0.000000 0.000000 0.000000
#PC2 0.00000 11.24924 0.000000 0.000000 0.000000
#PC3 0.00000 0.00000 7.893672 0.000000 0.000000
#PC4 0.00000 0.00000 0.000000 4.180975 0.000000
#PC5 0.00000 0.00000 0.000000 0.000000 3.323583
此外,它们是正交的以进行拦截:
round(crossprod(cbind(1, XO)), 6)
# PC1 PC2 PC3 PC4 PC5
# 10 0.00000 0.00000 0.000000 0.000000 0.000000
#PC1 0 18.35253 0.00000 0.000000 0.000000 0.000000
#PC2 0 0.00000 11.24924 0.000000 0.000000 0.000000
#PC3 0 0.00000 0.00000 7.893672 0.000000 0.000000
#PC4 0 0.00000 0.00000 0.000000 4.180975 0.000000
#PC5 0 0.00000 0.00000 0.000000 0.000000 3.323583
因此,如果您拟合线性回归模型~ 1 + X0
,则系数将是不变的。