Il segno dei punteggi o dei caricamenti in PCA o FA ha un significato? Posso invertire il segno?


37

Ho eseguito l'analisi dei componenti principali (PCA) con R usando due diverse funzioni ( prcompe princomp) e ho osservato che i punteggi PCA differivano nel segno. Come può essere?

Considera questo:

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

Perché i segni ( +/-) differiscono per le due analisi? Se poi stessi usando i componenti principali PC1e PC2come predittori in una regressione, cioè lm(y ~ PC1 + PC2), questo cambierebbe completamente la mia comprensione dell'effetto delle due variabili su a yseconda del metodo che ho usato! Come potrei quindi dire che PC1ha ad esempio un effetto positivo ye PC2ha ad esempio un effetto negativo su y?


Inoltre: se il segno dei componenti PCA è insignificante, questo vale anche per l'analisi dei fattori (FA)? È accettabile capovolgere (invertire) il segno dei punteggi dei singoli componenti PCA / FA (o dei caricamenti, come una colonna della matrice di caricamento)?


10
+1. Questa domanda viene posta molto su questo forum, in diverse varianti (a volte sulla PCA, a volte sull'analisi dei fattori). Questo è il thread più popolare che copre il problema (grazie all'ottima risposta di @ gennaio), quindi sarebbe conveniente contrassegnare altre domande esistenti e future come duplicati di questo. Mi sono preso la libertà di rendere la tua domanda leggermente più generale cambiando il titolo e menzionando l'analisi dei fattori alla fine. Spero non ti dispiaccia. Ho anche fornito una risposta aggiuntiva.
ameba dice di reintegrare Monica il

1
Il segno è arbitrario; significato sostanziale logicamente dipende dal segno. Puoi sempre cambiare il segno di qualsiasi fattore etichettato "X" nel segno opposto, ed etichettarlo quindi "opposto X". È vero per i caricamenti, per i punteggi. Alcune implementazioni - per comodità - cambierebbero il segno di un fattore in modo che i valori positivi (in punteggi o caricamenti) in esso dominino, in sintesi. Altre implementazioni non fanno nulla e lasciano la decisione se invertire il segno su di te - se ti interessa. Il significato statistico (come la forza dell'effetto) non cambia a parte la sua "direzione" viene invertita.
ttnphns,

Risposte:


38

PCA è una semplice trasformazione matematica. Se si modificano i segni dei componenti, non si modifica la varianza contenuta nel primo componente. Inoltre, quando si cambiano i segni, anche i pesi ( prcomp( ... )$rotation) cambiano il segno, quindi l'interpretazione rimane esattamente la stessa:

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

Spettacoli

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

e pca2$loadingsspettacolo

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

Quindi, perché l'interpretazione rimane la stessa?

Si esegue la regressione PCA del ycomponente 1. Nella prima versione ( prcomp), si dice che il coefficiente è positivo: maggiore è il componente 1, maggiore è y. Cosa significa quando si tratta delle variabili originali? Poiché il peso della variabile 1 ( 1:10in a) è positivo, ciò indica che maggiore è la variabile 1, maggiore è y.

Ora usa la seconda versione ( princomp). Poiché il componente ha il segno cambiato, più grande è y, più piccolo è il componente 1 - il coefficiente di y <su PC1 è ora negativo. Ma lo è anche il caricamento della variabile 1; ciò significa che maggiore è la variabile 1, minore è il componente 1, maggiore è y - l'interpretazione è la stessa.

Forse, il modo più semplice per vedere è usare un biplot.

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

Spettacoli

inserisci qui la descrizione dell'immagine

Lo stesso biplot per la seconda variante mostra

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

Come vedi, le immagini vengono ruotate di 180 °. Tuttavia, la relazione tra pesi / carichi (le frecce rosse) e i punti dati (i punti neri) è esattamente la stessa; pertanto, l'interpretazione dei componenti è invariata.

inserisci qui la descrizione dell'immagine


Ho anche aggiunto delle foto ora :-)
gennaio

1
Questo è vero, ma per quanto riguarda le proiezioni in PCA? Sto codificando PCA me stesso e alcuni dei miei autovettori sono capovolti rispetto al MATLAB integrato princomp. Quindi durante la proiezione, i miei dati proiettati vengono anche capovolti in alcune dimensioni. Il mio obiettivo è fare una classificazione sui coefficienti. Il segno non ha ancora importanza qui?
Sibbs Gioco d'azzardo il

Quindi, se semplicemente per motivi di più facile comprensione dei miei PC, mi piacerebbe scambiare i segni dei punteggi, è valido?

13

Questa domanda viene posta molto su questo forum, quindi vorrei integrare l'eccellente risposta di @ gennaio con considerazioni un po 'più generali.

X1,X2,...Xdz1,z2,...zKX1z1z2X12z1+3z223

Oriogionun'lvun'rioun'BleSScoreSLoun'diongS.

z1

-1-1=1.

La conclusione è che per ogni componente PCA o FA, il segno dei suoi punteggi e dei suoi caricamenti è arbitrario e insignificante. Può essere capovolto, ma solo se il segno di entrambi i punteggi e i caricamenti viene invertito contemporaneamente.


Questo è vero, ma per quanto riguarda le proiezioni in PCA? Sto codificando PCA me stesso e alcuni dei miei autovettori sono capovolti rispetto al MATLAB integrato princomp. Quindi durante la proiezione, i miei dati proiettati vengono anche capovolti in alcune dimensioni. Il mio obiettivo è fare una classificazione sui coefficienti. Il segno non ha ancora importanza qui?
Sibbs Gioco d'azzardo il

1
Non importa ancora. Perché dovrebbe? I dati capovolti sono esattamente equivalenti ai dati non capovolti per tutti gli scopi, inclusa la classificazione.
ameba dice di reintegrare Monica il

Bene, non per tutti gli scopi. Per coerenza tra algoritmo, anch'io vorrei davvero abbinare i segni. Tuttavia, non è tutto capovolto quando si guardano i componenti. In che modo R sceglie il segno in modo che io possa fare lo stesso?
Myoch,

1
@Myoch Consiglierei di inventare la tua convenzione e applicarla ovunque, invece di cercare di capire cosa sta facendo R. È possibile scegliere il segno in modo tale che il primo valore è positivo, o che più della metà dei valori sono positivi, ecc
ameba dice Ripristinare Monica

1
@user_anon Non c'è inverso.
ameba dice di reintegrare Monica il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.