【问题标题】:Constructing scores from princomp loadings in R从 R 中的 princomp 加载构建分数
【发布时间】:2013-05-28 00:21:04
【问题描述】:

我希望能够使用其负载构建主成分分析的分数,但我无法弄清楚 princomp 函数在计算数据集的分数时实际上在做什么。一个玩具例子:

cc <- matrix(1:24,ncol=4)
PCAcc <- princomp(cc,scores=T,cor=T)
PCAcc$loadings

Loadings:
     Comp.1 Comp.2 Comp.3 Comp.4
[1,]  0.500  0.866              
[2,]  0.500 -0.289  0.816       
[3,]  0.500 -0.289 -0.408 -0.707
[4,]  0.500 -0.289 -0.408  0.707

PCAcc$scores

       Comp.1        Comp.2        Comp.3 Comp.4
[1,] -2.92770 -6.661338e-16 -3.330669e-16      0
[2,] -1.75662 -4.440892e-16 -2.220446e-16      0
[3,] -0.58554 -1.110223e-16 -6.938894e-17      0
[4,]  0.58554  1.110223e-16  6.938894e-17      0
[5,]  1.75662  4.440892e-16  2.220446e-16      0
[6,]  2.92770  6.661338e-16  3.330669e-16      0

我的理解是分数是负载和重新调整的原始数据的线性组合。尝试“手工”:

rescaled <- t(t(cc)-apply(cc,2,mean))
rescaled%*%PCAcc$loadings

     Comp.1        Comp.2        Comp.3 Comp.4
[1,]     -5 -1.332268e-15 -4.440892e-16      0
[2,]     -3 -6.661338e-16 -3.330669e-16      0
[3,]     -1 -2.220446e-16 -1.110223e-16      0
[4,]      1  2.220446e-16  1.110223e-16      0
[5,]      3  6.661338e-16  3.330669e-16      0
[6,]      5  1.332268e-15  4.440892e-16      0

这些列的偏差分别为 1.707825、2 和 1.333333。为什么是这样?由于玩具数据矩阵在每一列中具有相同的方差,因此这里不需要进行归一化。非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 另外说明,这可能不是 PCA 的最佳选择示例数据,因为您的居中 (scale(cc)) 点都在同一条线上。因此,PC1 将捕获所有方差,而其他 PC 将毫无用处(可能是根据噪声计算出的垃圾。)它还表现为您的分数仅对 PC1 不为零。

标签: r pca princomp


【解决方案1】:

你需要

scale(cc,PCAcc$center,PCAcc$scale)%*%PCAcc$loadings

或者更简单

predict(PCAcc,newdata=cc)

【讨论】:

  • 谢谢,我不知道缩放功能。我希望能更好地理解为什么 princomp 首先要按 1.707825 倍缩放。那是从哪里来的?如果那是列的标准差,对我来说是有意义的,但事实并非如此。
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2015-05-16
  • 2018-01-28
相关资源
最近更新 更多