不同的R函数之间的不同PCA值,任何解释?

时间:2013-11-05 12:51:48

标签: r function

我遇到了PCA分析,并注意到R中不同函数返回的不同值。这个问题的目的是消除每个函数的输出歧义。对于为什么这些函数返回不同的值,我没有找到令人满意的answer。比较的函数包括:stats::princomp()stats::prcomp()psych::principal()FactoMineR::PCA()。为了便于比较,数据集缩放居中,并且所有设置都返回4个组件,但为简洁起见,此处仅显示前两个PC。

以下是设置案例的MWE代码。请随意报告R中的任何其他功能,您可能会认为在一个地方比较它的输出是有帮助的,我希望如此。

princompPCA <- princomp(USArrests, cor = TRUE)
prcompPCA <- prcomp(USArrests,scale.=TRUE)
principalPCA <- principal(USArrests, nfactors=4 , scores=TRUE, rotate = "none",scale=TRUE) 
library(FactoMineR)
fmrPCA <- PCA(USArrests, ncp=4, graph=FALSE) # vars scaled data
# now the first two PCs from each package into one data frame
dfComp <- cbind.data.frame(princompPCA$scores[,1:2],prcompPCA$x[,1:2],principalPCA$scores[,1:2],fmrPCA$ind$coord[,1:2])
names(dfComp) <- c("princompDim1","princompDim2","prcompDim1","prcompDim2","principalDim1","principalDim2","fmrDim1","fmrDim2")
head(dfComp)

输出:

           princompDim1 princompDim2 prcompDim1 prcompDim2 principalDim1 principalDim2    fmrDim1    fmrDim2
Alabama      -0.9855659    1.1333924 -0.9756604  1.1220012    0.61951483    -1.1277874  0.9855659 -1.1333924
Alaska       -1.9501378    1.0732133 -1.9305379  1.0624269    1.22583308    -1.0679059  1.9501378 -1.0732133
Arizona      -1.7631635   -0.7459568 -1.7454429 -0.7384595    1.10830334     0.7422678  1.7631635  0.7459568
Arkansas      0.1414203    1.1197968  0.1399989  1.1085423   -0.08889509    -1.1142591 -0.1414203 -1.1197968
California   -2.5239801   -1.5429340 -2.4986128 -1.5274267    1.58654347     1.5353037  2.5239801  1.5429340
Colorado     -1.5145629   -0.9875551 -1.4993407 -0.9776297    0.95203595     0.9826713  1.5145629  0.9875551

我注意到stats::princomp()的输出与FactoMineR::PCA()完全相同,除了倒置的符号。知道为什么这些标志会被反映出来吗?这两个函数的两个输出都接近stats::prcomp(),但这可能是由浮点问题引起的,这是一个小问题。但psych::principal()与其他人相比有所不同。可能是由于上述功能之间的轮换差异?因此,对这些差异的任何解释都将非常感激。

2 个答案:

答案 0 :(得分:2)

PCA的结果是沿轴的向量。带有符号反转的数字只是沿同一轴指向另一个方向的向量。所以,你得到的结果是一样的。

其他差异可能是由于计算主成分的不同方式,即使用相关矩阵的特征向量或使用奇异向量分解。但我只是在这里猜测。

答案 1 :(得分:0)

我一直在寻找相同的信息,发现此链接很有用:

https://groups.google.com/forum/#!topic/factominer-users/BRN8jRm-_EM

FactoMiner输出的PCA坐标不是让我困惑一段时间的负载......