R中意外的PCA分数

R中意外的PCA分数,r,pca,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 [

给定数据矩阵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轴上的投影?

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

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

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

如果你把这一点变成答案,一个更切题的答案会更合适。像你已经做过的那样,像这样一个更模糊的提示最适合作为评论。这并不能真正回答我的问题。每个变量的得分仍应为其在PCA向量上的投影。当我取m中变量的内积(比如,m1[1,])和相应的PCA向量(不管它是特征向量还是通过SVA分解计算的),我不会得到PCA$x中的分数。@user1815498:关键是计算是在居中且可能缩放的数据矩阵上进行的。在将其与相应的PCA向量相乘之前,您必须居中并缩放
m1[1,]
。我同意@PaulHiemstra的答案,尤其是
FASLE
:)@JoshuaUlrich我们能分享这个代表吗?我应该得到至少23.1%的东西编辑:)。还有什么比使用
FASLE
表示
FALSE
更好的方法,比如使用vault表示错误。+1表示具有可复制代码的清晰简洁的问题。