【发布时间】:2016-03-27 09:42:29
【问题描述】:
为了在 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。
谢谢 尚卡尔
【问题讨论】:
-
我不明白你为什么要手动重新计算
princomp()已经给你的主成分。 -
感谢您的回复。我认为,类似的名称在这里造成了混乱。在这里,Comp.1 只不过是使用加载在数据集 iris_temp2 中创建的一个新变量。在这种情况下, irispca$loadings 将给出所需的负载输出,即负载: Comp.1 Comp.2 Comp.3 Comp.4 Sepal.Length 0.361 -0.657 -0.582 0.315 Sepal.Width -0.730 0.598 -0.320 Petal.Length 0.857 0.173 - 0.480 花瓣宽度 0.358 0.546 0.754
-
现在很清楚,两个 Comp.1 是不同的。希望这可以帮助。如果您还有任何问题,请告诉我。