为了在 R 中学习 PCA,我在 iris 数据集上运行了 princomp() 函数(来自 MASS 包)。我已按照以下步骤操作:
library(MASS)
irispca<-princomp(iris[-5])
summary(irispca)
irispca$loadings
为了计算主成分,我以这种方式使用了负载输出:
iris_temp2 <- iris
iris_temp2$Comp.1 <- with(iris_temp2,Sepal.Length*0.361+Petal.Length*0.857+Petal.Width*0.358)
iris_temp2$Comp.2 <- with(iris_temp2,Sepal.Length*(-0.657)+Sepal.Width*(-0.73)+Petal.Length*0.173)
iris_temp2$Comp.3 <- with(iris_temp2,Sepal.Length*(-0.582)+Sepal.Width*0.598+Petal.Width*0.546)
iris_temp2$Comp.4 <- with(iris_temp2,Sepal.Length*0.315+Sepal.Width*(-0.32)+Petal.Length*(-0.48)+Petal.Width*0.754)
iris_temp2 <- with(iris_temp2, iris_temp2[order(Comp.1,Comp.2,Comp.3,Comp.4),])
最后,我对数据集进行了排序。我也开始知道分数给出了与上述相同的结果,即分数是通过将缩放数据(在其上运行 PCA)与负载相乘来计算的。因此,我想比较分数的输出和 iris_temp2 的输出(具有四个组件)。
iris_temp1 <- as.data.frame(irispca$scores)
iris_temp1 <- with(iris_temp1, iris_temp1[order(Comp.1,Comp.2,Comp.3,Comp.4),])
但是,当我执行 head(iris_temp1) 和 head(iris_temp2[,6:9]) 时,输出不匹配。
我会要求你们指出这一观察背后的原因。有什么我误解了吗?如果您需要我的任何其他意见,请告诉我。
我使用的参考资料有:http: //yatani.jp/teaching/doku.php ?id=hcistats:pca和https://www.youtube.com/watch?v=I5GxNzKLIoU&spfreload=5。
谢谢尚卡尔