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

时间:2015-04-21 21:50:38

标签: r

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

我认为以下内容可行:

pca$x %*% t(pca$rotation)

但事实并非如此。

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

prcomp不会以这种方式对PC进行计算。

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

2 个答案:

答案 0 :(得分:14)

prcomp将使变量居中,因此您需要添加减去的均值

t(t(pca$x %*% t(pca$rotation)) + pca$center)

如果pca$scaleTRUE,您还需要重新缩放

t(t(pca$x %*% t(pca$rotation)) * pca$scale + pca$center)

答案 1 :(得分:0)

我希望这也会有所帮助。

let process_args argv =
    let (result, _) =
        ((default_settings, "-f"), argv)
        ||> Array.fold (fun (state, setting) elem ->
        // (snip rest of function)