2

给定数据矩阵 M,pc=prcomp(M) 提供 pc$rotation(特征向量矩阵)和 pc$x,即原始变量在 pca 空间中的得分。但是,我获得的分数与“手动”计算的内积不匹配。

例如,如果我有矩阵

m1=matrix(c(1,2,3,4,4,8,7,9,5,3,2,11),byrow=TRUE,nrow=3)

pctest=prcomp(m1)分别为 pctest$x、pctest$rotation 返回以下内容:

Rotation:
          PC1        PC2        PC3
    [1,] -0.3751603  0.3133237 -0.5240612
    [2,] -0.5810952 -0.4802203  0.5681371
    [3,] -0.3471051 -0.5836868 -0.6211215
    [4,] -0.6333255  0.5749142  0.1295694


pctest$x
           PC1       PC2           PC3
     [1,]  5.11167 -1.326545 -1.110223e-16
     [2,] -4.05543 -2.728072 -1.942890e-15
     [3,] -1.05624  4.054616  2.831069e-15

现在,变量 1 在 PCA 轴 2 上的得分(例如)应该只是 m1[1,] 在 pctest$rotation[,2] 上的内积,即

        m1[1,]%*%pctest$rotation[,2]
        [,1]
        [1,] -0.09852071

而不是 pctest$x[1,2],即 -1.3265

这只是缩放问题,还是 $x 返回的不是原始变量在 PCA 轴上的投影?

4

1 回答 1

3

阅读文档以?prcomp回答您的问题:计算是通过(居中和可能缩放的)数据矩阵的奇异值分解完成的......

您需要先居中并缩放m1[1,],然后才能将其与相应的 PCA 向量相乘。这可以通过将centerandscale参数设置为FALSE之后很容易地观察到:

all.equal(m1 %*% pctest$rotation, pctest$x)
[1] TRUE
于 2013-03-14T22:18:48.053 回答