R中意外的PCA得分

时间:2013-03-14 22:16:54

标签: r pca

给定数据矩阵M,pc = prcomp(M)提供pc $旋转(特征向量矩阵)和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

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

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

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

这只是缩放问题,还是$ x返回除原始变量投影到PCA轴之外的其他内容?

1 个答案:

答案 0 :(得分:3)

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

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

all.equal(m1 %*% pctest$rotation, pctest$x)
[1] TRUE