为什么我使用 R (prcomp) 和 Rcmdr 包获得不同的 PCA 结果?

Why do I obtain different results of PCA using R (princomp) and Rcmdr pacakges?

我有一个包含 27 个变量(列)和 125 个样本(行)的数据。我正在尝试使用此脚本进行一些 PCA 分析:

library("FactoMineR")
library("factoextra")
library(ggplot2)
mydata<- read.csv("Overall.csv", TRUE, ",")
mydata[is.na(mydata)]=0
attach(mydata)
X=cbind (Adj..1_12, Adj..1_13, Adj..1_2, Adj..10_11, Adj..11_12, Adj..12_13, Adj..2_11, Adj..2_12, Adj..2_13,
         Adj..2_3, Adj..3_11, Adj..3_12, Adj..3_4, Adj..4_11, Adj..4_5, Adj..5_10, Adj..5_11, Adj..5_6,
         Adj..6_10, Adj..6_11, Adj..6_7, Adj..6_9, Adj..7_10, Adj..7_8, Adj..7_9, Adj..8_9, Adj..9_10)
summary(X)
cor(X)
res.pca <- princomp(X, scores=TRUE, cor=TRUE)
summary(res.pca)


fviz_pca_var(res.pca, col.var="contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE, # Avoid text overlapping
             axes = c(1, 2) # choose PCs to plot
)

但是我得到的结果与Rcmdr 和SPSS 提供的结果不同!!!通过使用 SPSS 和 Rcmdr 包进行的 PCA 分析,第一 (PC1) 和第二 (PC2) 主成分分别解释了高达 81.94% 和 4.9%。而使用上面给出的脚本提供了一个 PCA 图,它解释了高达 46.7% 和 5.8% 的数据!!会不会是因为样本数量较多(125行)??

但是与 SPSS 提供的数据类似,同一脚本正确估计了其他数据(行数较少)的 PCA。哪里错了??

非常感谢

此致,

奥马尔

Access to the raw data

Results provided by Rcmdr and SPSS

Results provided by princomp() and prcomp()

终于找到错误了。实际上,我从数据中删除了异常值,因此缺少数据单元格,这些单元格在 SPSS 和 Rcmdr(R)中被平均值替换,而我使用的脚本(上面提供)将这些丢失的 cells/value 替换为零,这导致在完全不同的 PCA 估计中。