Non normalizzare i dati prima del PCA fornisce un rapporto di varianza meglio spiegato


19

Ho normalizzato il mio set di dati, quindi ho eseguito PCA a 3 componenti per ottenere piccoli rapporti di varianza spiegati ([0,50, 0,1, 0,05]).

Quando non mi sono normalizzato ma ho imbiancato il mio set di dati e poi ho eseguito PCA a 3 componenti, ho ottenuto rapporti di varianza spiegati in modo elevato ([0,86, 0,06,0,01]).

Dal momento che voglio conservare quanti più dati in 3 componenti, NON dovrei normalizzare i dati? Da quanto ho capito, dovremmo sempre normalizzarci prima del PCA.

Normalizzando: impostando media su 0 e avendo varianza unità.

pca 

3
Anche se non è chiaro cosa intendi per "normalizzare" i dati (conosco almeno quattro modi standard per farlo in PCA e probabilmente ce ne sono altri), sembra che il materiale su stats.stackexchange.com/questions/53 potrebbe essere illuminante.
whuber

Ciao whubber: intendo normalizzare ogni osservazione alla norma unitaria

1
Grazie. Il solito termine per questo è "standardizzare". Quando lo fai esegui PCA in base alle correlazioni: ecco perché penso che il link che ho fornito potrebbe già rispondere alla tua domanda. Tuttavia, vedo che nessuna delle risposte lì spiega in realtà perché o come otterrete risultati diversi (forse perché è complesso e l'effetto della standardizzazione potrebbe essere difficile da prevedere).
whuber

1
Lo sbiancamento prima della PCA è tipico? Qual è l'obiettivo di farlo?
Shadowtalker

2
Se stavi lavorando con le immagini, ad esempio, la norma delle immagini corrisponde alla luminosità. L'elevata varianza spiegata dei dati non normalizzati significa che molti dati possono essere spiegati da cambiamenti di luminosità. Se la luminosità non è importante per te, poiché spesso non è nell'elaborazione delle immagini, allora vorresti prima rendere tutte le unità standard. Anche se la varianza spiegata dei tuoi componenti pca sarà inferiore, riflette meglio ciò che ti interessa.
Aaron

Risposte:


37

Dipende dall'obiettivo della tua analisi. Alcune pratiche comuni, alcune delle quali sono menzionate nel link di whuber:

  1. La standardizzazione viene generalmente eseguita quando le variabili su cui viene eseguito il PCA non vengono misurate sulla stessa scala. Si noti che la standardizzazione implica l'assegnazione della stessa importanza a tutte le variabili.
  2. Se non vengono misurati sulla stessa scala e si sceglie di lavorare su variabili non standardizzate, spesso accade che ogni PC sia dominato da una singola variabile e si ottenga semplicemente una sorta di ordinamento delle variabili in base alla loro varianza. (Uno dei caricamenti di ciascun componente (anticipato) sarà vicino a +1 o -1.)
  3. I due metodi spesso portano a risultati diversi, come hai sperimentato.

Esempio intuitivo:

Supponiamo di avere due variabili: l'altezza di un albero e la circonferenza dello stesso albero. Convertiremo il volume in un fattore: un albero avrà un volume elevato se il suo volume è più grande di 20 piedi cubici, e in caso contrario il volume è basso. Useremo il set di dati degli alberi che viene precaricato in R.

>data(trees)
>tree.girth<-trees[,1]
>tree.height<-trees[,2]
>tree.vol<-as.factor(ifelse(trees[,3]>20,"high","low"))

Supponiamo ora che l'altezza sia stata effettivamente misurata in miglia anziché in piedi.

>tree.height<-tree.height/5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
>summary(tree.pca)
Importance of components:
                      Comp.1       Comp.2
Standard deviation     3.0871086 1.014551e-03
Proportion of Variance 0.9999999 1.080050e-07
Cumulative Proportion  0.9999999 1.000000e+00

Il primo componente spiega quasi il 100% della variabilità dei dati. I caricamenti:

> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height        -1    
tree.girth   1           

Valutazione grafica:

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot del primo metodo

Vediamo che gli alberi ad alto volume tendono ad avere una circonferenza di alberi alti, ma le tre altezze non forniscono alcuna informazione sul volume degli alberi. Ciò è probabilmente errato e la conseguenza delle due diverse misure unitarie.

Potremmo usare le stesse unità o standardizzare le variabili. Mi aspetto che entrambi porteranno a un quadro più equilibrato della variabilità. Naturalmente in questo caso si può sostenere che le variabili dovrebbero avere la stessa unità ma non essere standardizzate, il che potrebbe essere un argomento valido, se non si misurassero due cose diverse. (Quando misureremo il peso dell'albero e la circonferenza dell'albero, la scala su cui entrambi dovrebbero essere misurati non è più molto chiara. In questo caso abbiamo un argomento chiaro per lavorare sulle variabili standardizzate.)

>tree.height<-tree.height*5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1    Comp.2
Standard deviation     6.5088696 2.5407042
Proportion of Variance 0.8677775 0.1322225
Cumulative Proportion  0.8677775 1.0000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height -0.956  0.293
tree.girth  -0.293 -0.956

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot del secondo metodo

Ora vediamo che gli alberi che sono alti e hanno una grande circonferenza, hanno un alto volume (angolo in basso a sinistra), rispetto alla circonferenza bassa e bassa altezza per alberi a basso volume (angolo in alto a destra). Questo ha intuitivamente senso.

Se uno osserva da vicino, tuttavia, vediamo che il contrasto tra volume alto / basso è più forte nella direzione della circonferenza e non nella direzione dell'altezza. Vediamo cosa succede quando standardizziamo:

>tree<-scale(tree,center=F,scale=T)
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1     Comp.2
Standard deviation     0.2275561 0.06779544
Proportion of Variance 0.9184749 0.08152510
Cumulative Proportion  0.9184749 1.00000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height  0.203 -0.979
tree.girth   0.979  0.203
>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

Biplot di terzo metodo

In effetti, la circonferenza ora spiega la maggior parte della differenza tra alberi ad alto e basso volume! (La lunghezza della freccia nel biplot è indicativa della varianza nella variabile originale.) Quindi anche se le cose sono misurate sulla stessa scala, può essere utile standardizzare. Non si può raccomandare di non standardizzare quando si confrontano, ad esempio, la lunghezza di diverse specie di alberi perché si tratta esattamente della stessa misurazione.


2
(+1) Risposta molto bella, che in realtà supera tutte quelle fornite nel thread popolare collegato sulla PCA sulla covarianza rispetto alla correlazione.
ameba dice Ripristina 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.