PCA 导致一些高度相关的主成分

机器算法验证 r 主成分分析
2022-04-01 18:25:37

我有一个包含 64 个高度相关变量的数据集(例如,许多是其他变量的交互)加上一个日期和目标变量,总共 66 个。我想导出 64 个自变量的主成分并选择最终预测变量其中(我不想直接使用主成分回归,因为它必须选择前 n 个成分而不是选择具有统计意义的成分)。

R中的代码:

PC=prcomp(mydata[,3:66], center=TRUE, scale=TRUE)
PrincipalComponents=as.data.frame(PC$x)

我希望主成分是正交的并且本质上是不相关的(显然这些并不像我想象的那样可互换)。

cor(PrincipalComponents$PC1, PrincipalComponents$PC2)

正如预期的那样,返回一个非常接近 0 的数字,大多数成对相关也是如此。然而,

cor(PrincipalComponents$PC1, PrincipalComponents$PC63)
cor(PrincipalComponents$PC1, PrincipalComponents$PC64)

返回 0.61 和 0.41。这些高相关性仅在最后两个主成分中观察到。使用主成分作为自变量进行回归,我得到其中近 30 个的 VIF>10。运行回归但不包括最后两个主成分,我得到所有预测变量的 VIF=1。

我错过了什么吗?如果这是意料之中的事情,那不是违背了 PCA 的目的吗?例如,在我决定排除这两个组件之前,我想了解这里发生了什么。

1个回答

你是对的,主要成分应该都是相互正交的,所以这不是预期的。我认为您的数据矩阵中可能有线性相关的列。

如果您的数据矩阵的列秩 < 64,则无法在其列空间中找到 64 个相互正交的向量。在这种情况下,包返回错误可能是更好的行为,或者可能少于 64 列,但事实并非prcomp如此。

例子:

m <- matrix(c(1,0,0,0,0,0,1,0,0), nrow=3)
cor(prcomp(m)$x)

声称存在三个具有成对相关性 +/- 1 的主成分。您的数据中可能正在发生类似的事情。