我希望能够使用其载荷构建主成分分析的分数,但我无法弄清楚 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。为什么是这样?由于玩具数据矩阵在每列中具有相同的方差,因此此处不需要标准化。非常感谢任何帮助。
谢谢!
最佳答案
你需要
scale(cc,PCAcc$center,PCAcc$scale)%*%PCAcc$loadings
或更简单
predict(PCAcc,newdata=cc)
关于r - 从 R 中的 princomp 加载构建分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869815/