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,...zKX1z1z2X1≈2z1+3z223

Oriogionun'lvun'rioun'BleS≈ScoreS⋅Loun'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.