PCA或FA中的分数或负荷符号是否有意义?我可以反转标志吗?


37

我使用两个不同的函数(prcomp和)对R进行了主成分分析(PCA),princomp并观察到PCA分数的符号不同。怎么会这样?

考虑一下:

set.seed(999)
prcomp(data.frame(1:10,rnorm(10)))$x

            PC1        PC2
 [1,] -4.508620 -0.2567655
 [2,] -3.373772 -1.1369417
 [3,] -2.679669  1.0903445
 [4,] -1.615837  0.7108631
 [5,] -0.548879  0.3093389
 [6,]  0.481756  0.1639112
 [7,]  1.656178 -0.9952875
 [8,]  2.560345 -0.2490548
 [9,]  3.508442  0.1874520
[10,]  4.520055  0.1761397

set.seed(999)
princomp(data.frame(1:10,rnorm(10)))$scores
         Comp.1     Comp.2
 [1,]  4.508620  0.2567655
 [2,]  3.373772  1.1369417
 [3,]  2.679669 -1.0903445
 [4,]  1.615837 -0.7108631
 [5,]  0.548879 -0.3093389
 [6,] -0.481756 -0.1639112
 [7,] -1.656178  0.9952875
 [8,] -2.560345  0.2490548
 [9,] -3.508442 -0.1874520
[10,] -4.520055 -0.1761397

为什么+/-两个分析的符号()不同?如果那时我在回归中使用主成分PC1并将其PC2用作预测变量,即lm(y ~ PC1 + PC2),这将完全改变我对这两个变量的影响的理解,y具体取决于我所使用的方法!那我怎么能说对PC1例如有正面影响yPC2对例如有负面影响y呢?


另外:如果PCA组件的符号没有意义,那么对于因子分析(FA)也是如此吗?翻转(反转)单个PCA / FA组件得分(或载荷,作为载荷矩阵的列)的符号是否可接受?


10
+1。这个问题在这个论坛上以不同的形式被问了很多(有时是关于PCA,有时是关于因子分析)。此问题是涵盖该问题的最受欢迎的主题(由于@January的出色回答),因此将其他现有和将来的问题标记为与此问题的重复将很方便。我可以通过更改标题和最后提及因素分析来使您的问题更笼统。我希望你不会介意。我还提供了另一个答案。
变形虫说莫妮卡(

1
符号是任意的;实质意义在逻辑上取决于符号。您可以始终将标记为“ X”的任何因子的符号更改为相反的符号,然后将其标记为“ X相对”。对于负载,分数来说都是如此。为了方便起见,某些实现将更改因子的符号,以使总和中占主导地位的正值(分数或负荷)。其他实现则不执行任何操作,如果需要,可以决定是否反转符号。统计意义(例如效果强度)不会因其“方向”相反而改变。
ttnphns

Answers:


38

PCA是一个简单的数学转换。如果更改组件的符号,则不会更改第一个组件中包含的方差。而且,当您更改符号时,权重(prcomp( ... )$rotation)也会更改符号,因此解释保持完全相同:

set.seed( 999 )
a <- data.frame(1:10,rnorm(10))
pca1 <- prcomp( a )
pca2 <- princomp( a )
pca1$rotation

表演

                 PC1       PC2
X1.10      0.9900908 0.1404287
rnorm.10. -0.1404287 0.9900908

pca2$loadings显示

Loadings:
          Comp.1 Comp.2
X1.10     -0.99  -0.14 
rnorm.10.  0.14  -0.99 

               Comp.1 Comp.2
SS loadings       1.0    1.0
Proportion Var    0.5    0.5
Cumulative Var    0.5    1.0

那么,为什么解释保持不变?

y对分量1 进行PCA回归。在第一个版本(prcomp)中,系数为正:分量1越大,y越大。涉及原始变量是什么意思?由于变量1(1:10在a中)的权重为正,因此表明变量1越大,y越大。

现在使用第二个版本(princomp)。由于分量的符号已更改,因此y越大,分量1越小-PC1上的y <系数现在为负。但是变量1的加载也是如此;也就是说,变量1越大,分量1越小,y越大-解释是相同的。

可能最简单的方法是使用双线图。

library( pca3d )
pca2d( pca1, biplot= TRUE, shape= 19, col= "black"  )

表演

在此处输入图片说明

第二个变体的相同双图显示

pca2d( pca2$scores, biplot= pca2$loadings[,], shape= 19, col= "black" )

如您所见,图像旋转了180°。但是,重量/负载(红色箭头)与数据点(黑色点)之间的关系完全相同;因此,组件的解释不变。

在此处输入图片说明


我什至现在还添加了图片:-)
1

1
的确如此,但是PCA中的预测又如何呢?我自己编写了PCA,与MATLAB内置的相比,我的一些特征向量被翻转了princomp。因此,在投影过程中,我的投影数据在某些维度上也被翻转。我的目标是对系数进行分类。这里的标志仍然没有关系吗?
Sibbs赌博2015年

因此,如果只是出于更容易理解我的PC的原因,我想交换分数的符号,那是否有效?

13

这个问题在这个论坛上被问到很多,所以我想用一些更一般的考虑来补充@January的出色答案。

在主成分分析(PCA)和因子分析(FA)中,我们都使用原始变量来估计几个潜在成分(或潜在变量)。这些潜在成分由PCA或FA成分评分给出。每个原始变量都是这些分量具有一定权重的线性组合:例如,第一个原始变量可能近似等于的两倍加上三倍,因此。如果分数是标准化的,则这些权重(和)称为负荷。因此,非正式地,人们可以说x1,x2,...xdz1,z2,...zkx1z1z2 2 3 ö ř Ñ 一个x12z1+3z223

OriginalvariablesScoresLoadings.

从这里我们可以看到,如果我们采用一个潜在成分,例如,并翻转其得分其加载的符号,那么这将不会影响结果(或解释),因为 - 1 - 1 = 1。z1

11=1.

结论是,对于每个PCA或FA组件,其分数和负载的符号都是任意的且毫无意义。可以将其翻转,但前提是得分和载荷的符号必须同时反转。


的确如此,但是PCA中的预测又如何呢?我自己编写了PCA,与MATLAB内置的相比,我的一些特征向量被翻转了princomp。因此,在投影过程中,我的投影数据在某些维度上也被翻转。我的目标是对系数进行分类。这里的标志仍然没有关系吗?
Sibbs赌博2015年

1
还是没关系。为什么会这样?对于所有目的,包括分类,翻转数据都完全等同于非翻转数据。
变形虫说莫妮卡(Reonica)Monica 2015年

好吧,不是出于所有目的。为了算法之间的一致性,我也很想匹配符号。但是,查看组件时并不会全部翻转。R如何选择符号,以便我可以这样做?
Myoch

1
@Myoch我建议发明自己的约定并将其应用于所有地方,而不是试图弄清楚R在做什么。您可以选择符号,使得第一值为正,或者说超过一半的值是正的,等等
阿米巴说恢复莫妮卡

1
@user_anon没有反函数。
变形虫说恢复莫妮卡

7

上面已经很好地回答了。仅为了提供进一步的数学相关性,主要成分起作用的方向对应于系统的特征向量。如果您获得正数或负数PC,则仅表示您投影的特征向量指向一个方向,或者指向另一个方向。无论如何,解释都一样!还应该添加的是,主成分的长度只是特征值。180

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.