如何计算与 $x 中的 prcomp() 返回的结果相同的主成分分数?

How can I compute the principal component scores with the same result as returned by prcomp() in $x?

当我尝试计算主成分 (PC) 分数(即在 PC space 中投影的数据集)时,我得到的结果与 prcomp()$x 其结果的属性。我将数据居中并缩放。

我运行prcomp()作为

pca.result = prcomp(USArrests, scale=TRUE)

然后我可以访问想要的 PC 分数作为

pca.result$x  # 1

从文档中,我理解了上面的中心和缩放数据,然后将它们乘以旋转矩阵(a.k.a。变量加载,a.k.a。特征向量)。 我试图通过自己投影(旋转)数据集来重现上面的结果,如:

((as.matrix(USArrests)-pca.result$center)/pca.result$scale) %*% pca.result$rotation  # 2

但是我从 # 2 得到的结果与我从 # 1 得到的结果不同。

我应该如何更正 # 2 才能得到与 # 1 相同的结果?

这个比较简单。只需使用 score() 函数计算标准化数据:

pcscores <- scale(USArrests) %*% pca.result$rotation

如果您想使用pca.result中的统计信息:

means <- pca.result$center
sdevs <- pca.result$scale
center <- sweep(USArrests, 2, means)
zscores <- sweep(center, 2, sdevs, "/")
pcscores2 <- as.matrix(zscores) %*% pca.result$rotation

您的方法减去每列的均值,而不是跨列。