给定数据矩阵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轴之外的其他内容?
答案 0 :(得分:3)
阅读?prcomp
的文档回答你的问题:计算是通过(居中和可能缩放的)数据矩阵的奇异值分解完成的......
在将其与相应的PCA向量相乘之前,您需要居中并缩放m1[1,]
。通过将center
和scale
参数设置为FALSE
之后可以很容易地观察到这一点:
all.equal(m1 %*% pctest$rotation, pctest$x)
[1] TRUE