Est-ce que le signe de scores ou de charges dans PCA ou FA a un sens? Puis-je inverser le signe?


37

J'ai effectué une analyse en composantes principales (ACP) avec R en utilisant deux fonctions différentes ( prcompet princomp) et j'ai observé que les scores de l'ACP différaient par leur signe. Comment cela peut-il être?

Considère ceci:

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

Pourquoi les signes ( +/-) diffèrent-ils pour les deux analyses? Si j’utilisais alors les composantes principales PC1et PC2comme prédicteurs dans une régression, c’est-à-dire que lm(y ~ PC1 + PC2)cela changerait complètement ma compréhension de l’effet des deux variables sur la yméthode que j’ai utilisée! Comment puis-je dire que cela PC1a, par exemple, un effet positif yet PC2un effet négatif sur y?


En outre: si le signe des composants PCA n'a pas de sens, est-ce vrai aussi pour l'analyse factorielle (FA)? Est-il acceptable d'inverser (inverser) le signe des scores individuels des composants PCA / FA (ou des chargements, en tant que colonne de la matrice de chargement)?


10
+1 Cette question se demande beaucoup sur ce forum, dans différentes variations (parfois de PCA, parfois sur l' analyse des facteurs). Celle-ci est le fil de discussion le plus populaire sur le sujet (grâce à l'excellente réponse de @ January), il serait donc pratique de marquer les autres questions existantes et futures comme des doublons de celle-ci. J'ai pris la liberté de donner à votre question un peu plus de caractère général en changeant le titre et en mentionnant finalement l'analyse factorielle. J'espère que ça ne vous dérange pas. J'ai également fourni une réponse supplémentaire.
amibe dit de réintégrer Monica le

1
Le signe est arbitraire; le sens matériel dépend logiquement du signe. Vous pouvez toujours changer le signe de tout facteur marqué "X" par le signe opposé et le nommer ensuite "X opposé". C'est vrai pour les chargements, pour les scores. Certaines mises en œuvre changeraient - par commodité - le signe d’un facteur afin que ses valeurs positives (en scores ou en charges) l’emportent en somme. D'autres implémentations ne font rien et laissent la décision d'inverser le signe sur vous, si vous y tenez. La signification statistique (telle que l'intensité de l'effet) ne change pas si ce n'est que sa "direction" est inversée.
ttnphns

Réponses:


38

PCA est une simple transformation mathématique. Si vous modifiez les signes du ou des composants, vous ne modifiez pas la variance contenue dans le premier composant. De plus, lorsque vous changez les signes, les poids ( prcomp( ... )$rotation) changent également les signes, l'interprétation reste donc exactement la même:

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

spectacles

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

et pca2$loadingsmontrer

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

Alors, pourquoi l'interprétation reste-t-elle la même?

Vous faites la régression PCA de la ycomposante 1. Dans la première version ( prcomp), supposons que le coefficient soit positif: plus la composante 1 est grande, plus le y est grand. Qu'est-ce que cela signifie quand il s'agit des variables d'origine? Le poids de la variable 1 ( 1:10en a) étant positif, cela montre que plus la variable 1 est grande, plus le y est grand.

Maintenant, utilisez la deuxième version ( princomp). Puisque le composant a changé de signe, plus le y est grand, plus le composant 1 est petit - le coefficient de y <sur PC1 est maintenant négatif. Mais le chargement de la variable 1 l'est aussi. cela signifie que plus la variable 1 est grande, plus la composante 1 est petite, plus y est grand - l'interprétation est la même.

La meilleure façon de voir cela est peut-être d'utiliser un biplot.

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

spectacles

entrez la description de l'image ici

Le même biplot pour la deuxième variante montre

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

Comme vous le voyez, les images pivotent de 180 °. Cependant, la relation entre les poids / charges (les flèches rouges) et les points de données (les points noirs) est exactement la même; ainsi, l'interprétation des composants est inchangée.

entrez la description de l'image ici


J'ai même ajouté des photos maintenant :-)
Janvier

1
C'est vrai, mais qu'en est-il des projections dans PCA? Je code moi-même PCA et certains de mes vecteurs propres sont inversés par rapport à MATLAB intégré princomp. Ainsi, lors de la projection, mes données projetées sont également inversées dans certaines dimensions. Mon objectif est de faire la classification sur les coefficients. Le signe n'a toujours pas d'importance ici?
Sibbs Gambling

Donc, si simplement pour une meilleure compréhension de mes ordinateurs, j'aimerais échanger les signes des scores, est-ce valide?

13

Cette question se demande beaucoup sur ce forum, donc je voudrais compléter @ excellente réponse de Janvier avec un peu des considérations plus générales.

À la fois l’analyse en composantes principales (ACP) et l’analyse factorielle (AF), nous utilisons les variables originales X1,X2,...X estimer plusieurs composantes latentes (ou variables latentes) z1,z2,...zk. These latent components are given by PCA or FA component scores. Each original variable is a linear combination of these components with some weights: for example the first original variable x1 might be well approximated by twice z1 plus three times z2, so that x12z1+3z2. If the scores are standardized, then these weights (2 and 3) are known as loadings. So, informally, one can say that

OriginalvariablesScoresLoadings.

From here we can see that if we take one latent component, e.g. z1, and flip the sign of its scores and of its loadings, then this will have no influence on the outcome (or interpretation), because

11=1.

The conclusion is that for each PCA or FA component, the sign of its scores and of its loadings is arbitrary and meaningless. It can be flipped, but only if the sign of both scores and loadings is reversed at the same time.


This is true, but what about the projections in PCA? I am coding up PCA myself, and some of my eigenvectors are flipped as compared with MATLAB built-in princomp. So during the projection, my projected data are also flipped in sign in some of the dimensions. My goal is to do classification on the coefficients. The sign still doesn't matter here?
Sibbs Gambling

1
Still doesn't matter. Why would it? Flipped data are exactly equivalent to non-flipped data for all purposes, including classification.
amoeba says Reinstate Monica

Well, not for all purposes. For consistency between algorithm, I too really would like to match signs. However, it's not all flipped when looking at the components. How is R choosing the sign so I can do the same?
Myoch

1
@Myoch I would recommend to invent your own convention and apply it everywhere, as opposed to trying to figure out what R is doing. You can choose the sign such that the first value is positive, or that more than half of the values are positive, etc.
amoeba says Reinstate Monica

1
@user_anon There is no inverse.
amoeba says Reinstate Monica

7

This was well answered above. Just to provide some further mathematical relevance, the directions that the principal components act correspond to the eigenvectors of the system. If you are getting a positive or negative PC it just means that you are projecting on an eigenvector that is pointing in one direction or 180 away in the other direction. Regardless, the interpretation remains the same! It should also be added that the lengths of your principal components are simply the eigenvalues.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.