O sinal de pontuações ou cargas no PCA ou FA tem algum significado? Posso reverter o sinal?

37

Realizei a análise de componentes principais (PCA) com R usando duas funções diferentes ( prcompe princomp) e observei que as pontuações do PCA diferiam no sinal. Como pode ser?

Considere isto:

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

Por que os sinais ( +/-) diferem nas duas análises? Se eu estivesse usando componentes principais PC1e PC2como preditores em uma regressão, ou seja lm(y ~ PC1 + PC2), isso mudaria completamente minha compreensão do efeito das duas variáveis, ydependendo de qual método eu usei! Como eu poderia dizer então que PC1tem, por exemplo, um efeito positivo ye PC2, por exemplo, um efeito negativo y?


Além disso: Se o sinal dos componentes do PCA não faz sentido, isso também é válido para a análise fatorial (FA)? É aceitável inverter (inverter) o sinal das pontuações individuais dos componentes PCA / FA (ou das cargas, como uma coluna da matriz de carga)?

user1320502
fonte
10
+1. Essa pergunta é muito solicitada neste fórum, em diferentes variações (às vezes sobre PCA, às vezes sobre análise fatorial). Esse é o tópico mais popular que aborda o problema (graças à excelente resposta de @ January), portanto seria conveniente marcar outras perguntas existentes e futuras como duplicatas desta. Tomei a liberdade de tornar sua pergunta um pouco mais geral, alterando o título e mencionando a análise fatorial no final. Espero que você não se importe. Eu também forneci uma resposta adicional.
Ameba diz Reinstate Monica
1
O sinal é arbitrário; o significado substantivo depende logicamente do signo. Você sempre pode alterar o sinal de qualquer fator rotulado como "X" para o sinal oposto e rotulá-lo como "oposto ao X". É verdade para carregamentos, para pontuações. Algumas implementações - por conveniência - alterariam o sinal de um fator para que os valores positivos (em pontuações ou cargas) nele dominassem, em suma. Outras implementações não fazem nada e deixam a decisão de reverter o sinal para você - se você se importa. O significado estatístico (como a força do efeito) não muda além de sua "direção" é revertida.
ttnphns

Respostas:

38

PCA é uma simples transformação matemática. Se você alterar os sinais do (s) componente (s), não modificará a variação contida no primeiro componente. Além disso, quando você altera os sinais, os pesos ( prcomp( ... )$rotation) também alteram o sinal, portanto a interpretação permanece exatamente a mesma:

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

mostra

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

e pca2$loadingsmostrar

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

Então, por que a interpretação permanece a mesma?

Você faz a regressão PCA do ycomponente 1. Na primeira versão ( prcomp), diga que o coeficiente é positivo: quanto maior o componente 1, maior o y. O que significa quando se trata das variáveis ​​originais? Como o peso da variável 1 ( 1:10em a) é positivo, isso mostra que quanto maior a variável 1, maior o y.

Agora use a segunda versão ( princomp). Como o componente mudou o sinal, quanto maior y, menor o componente 1 - o coeficiente de y <sobre PC1 agora é negativo. Mas o mesmo ocorre com o carregamento da variável 1; isso significa que, quanto maior a variável 1, menor o componente 1, maior y - a interpretação é a mesma.

Possivelmente, a maneira mais fácil de ver isso é usar um biplot.

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

mostra

insira a descrição da imagem aqui

O mesmo biplot para a segunda variante mostra

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

Como você vê, as imagens são giradas em 180 °. No entanto, a relação entre os pesos / cargas (as setas vermelhas) e os pontos de dados (os pontos pretos) é exatamente a mesma; assim, a interpretação dos componentes é inalterada.

insira a descrição da imagem aqui

janeiro
fonte
I imagens, mesmo adicionados agora :-)
janeiro
1
Isso é verdade, mas e as projeções no PCA? Estou codificando o PCA pessoalmente e alguns dos meus autovetores são invertidos em comparação com o MATLAB embutido princomp. Assim, durante a projeção, meus dados projetados também são invertidos em algumas dimensões. Meu objetivo é fazer a classificação dos coeficientes. O sinal ainda não importa aqui?
Sibbs Gambling
Então, se simplesmente por uma compreensão mais fácil dos meus PCs, gostaria de trocar os sinais das pontuações, isso é válido?
13

Esta pergunta é muito solicitada neste fórum, então gostaria de complementar a excelente resposta de @ January com considerações um pouco mais gerais.

Na análise de componentes principais (PCA) e na análise fatorial (FA), usamos as variáveis ​​originais para estimar vários componentes latentes (ou variáveis ​​latentes) . Esses componentes latentes são fornecidos pelas pontuações dos componentes PCA ou FA. Cada variável original é uma combinação linear desses componentes com alguns pesos: por exemplo, a primeira variável original pode ser bem aproximada duas vezes mais três vezes , de modo que . Se as pontuações forem padronizadas, esses pesos ( e ) são conhecidos como cargas. Então, informalmente, pode-se dizer quex1,x2,...xdz1,z2,...zkx1z1z2x12z1+3z223

OrEugEunumaeuvumarEuumabeuesScoreseuoumadEungs.

A partir daqui, podemos ver que, se pegarmos um componente latente, por exemplo, , e virarmos o sinal de suas pontuações e carregamentos, isso não terá influência no resultado (ou na interpretação), porque - 1 - 1 = 1.z1

-1-1=1

A conclusão é que, para cada componente PCA ou FA, o sinal de sua pontuação e carga é arbitrário e sem sentido. Ele pode ser invertido, mas apenas se o sinal de ambas as pontuações e cargas for revertido ao mesmo tempo.

ameba diz Restabelecer Monica
fonte
Isso é verdade, mas e as projeções no PCA? Estou codificando o PCA pessoalmente e alguns dos meus autovetores são invertidos em comparação com o MATLAB embutido princomp. Assim, durante a projeção, meus dados projetados também são invertidos em algumas dimensões. Meu objetivo é fazer a classificação dos coeficientes. O sinal ainda não importa aqui?
Sibbs Gambling
1
Ainda não importa. Por quê? Os dados invertidos são exatamente equivalentes aos dados não invertidos para todos os fins, incluindo a classificação.
Ameba diz Reinstate Monica
Bem, não para todos os fins. Para consistência entre algoritmos, eu também realmente gostaria de combinar sinais. No entanto, nem tudo é invertido quando se olha para os componentes. Como R está escolhendo o sinal para que eu possa fazer o mesmo?
Myoch
1
@ Myoch, eu recomendaria inventar sua própria convenção e aplicá-la em qualquer lugar, em vez de tentar descobrir o que R está fazendo. Você pode escolher o sinal de tal forma que o primeiro valor é positivo, ou que mais de metade dos valores são positivos, etc.
ameba diz Reintegrar Monica
1
@user_anon Não há inverso.
Ameba diz Reinstate Monica
7

180

user130327
fonte