如何在prcomp中反转PCA以获取原始数据

Jas*_*lam 14 r

我想要反转从prcomp计算出的PCA以恢复原始数据.

我认为以下内容可行:

pca$x %*% t(pca$rotation)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.

以下链接显示了如何从PC恢复原始数据,但仅针对在协方差矩阵上使用eigen的PCA进行了解释 http://www.di.fc.ul.pt/~jpn/r/pca/pca.html

prcomp不会以这种方式对PC进行钙化.

"计算是通过(居中和可能缩放的)数据矩阵的奇异值分解完成的,而不是通过在协方差矩阵上使用特征来完成的." -prcomp

kon*_*vas 15

prcomp 将变量居中,以便您需要添加减去的均值

t(t(pca$x %*% t(pca$rotation)) + pca$center)
Run Code Online (Sandbox Code Playgroud)

如果pca$scale是,TRUE您还需要重新缩放

t(t(pca$x %*% t(pca$rotation)) * pca$scale + pca$center)
Run Code Online (Sandbox Code Playgroud)