Volevo chiarire un commento che ho lasciato sotto la risposta di @ Peter-Flom, ma probabilmente vale la pena scrivere in una risposta. In che misura è possibile ridurre le dimensioni eseguendo PCA su dati quasi ortogonali? La risposta è "dipende" se si esegue il PCA sulla matrice di correlazione o covarianza .
Se stai usando PCA sulla matrice di correlazione, poiché questo differirà solo leggermente dalla matrice di identità, c'è una simmetria sferica che rende tutte le direzioni "ugualmente informative". Ridimensionare le varianze delle variabili a una precedente alla PCA è un approccio matematicamente equivalente che produrrà lo stesso risultato. Mentre l'output PCA identificherà alcuni componenti con una varianza leggermente inferiore rispetto ad altri, questo può essere attribuito (se assumiamo una correlazione zero nella popolazione) a nient'altro che una variazione casuale nel campione, quindi non sarebbe una buona ragione per buttarli via componenti. In effetti tale disparità tra le deviazioni standard dei componenti dovrebbe ridursi in ampiezza man mano che aumentiamo le dimensioni del campione. Possiamo confermarlo in una simulazione.
set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
x1 <- rnorm(n, mean=0, sd=sd1)
x2 <- rnorm(n, mean=0, sd=sd2)
x3 <- rnorm(n, mean=0, sd=sd3)
x4 <- rnorm(n, mean=0, sd=sd4)
prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}
Produzione:
> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion 0.2882 0.5505 0.7887 1.0000
>
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion 0.2504 0.5006 0.7505 1.0000
Tuttavia, se esegui PCA utilizzando la matrice di covarianza anziché la matrice di correlazione (equivalentemente: se non ridimensioniamo le deviazioni standard su 1 prima di applicare PCA), la risposta dipende dalla diffusione delle variabili. Se le tue variabili hanno la stessa varianza, allora abbiamo ancora una simmetria sferica, quindi non esiste una "direzione privilegiata" e la riduzione dimensionale non può essere raggiunta.
> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion 0.2507 0.5009 0.7508 1.0000
Con una miscela di variabili di varianza alta e bassa, tuttavia, la simmetria è più simile a un ellissoide con alcuni assi larghi e altri sottili. In questa situazione ci saranno componenti ad alta varianza caricando sulle variabili ad alta varianza (dove l'ellissoide è largo) e componenti a bassa varianza caricando sulle variabili a bassa varianza (in quali direzioni l'ellissoide è stretto).
> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion 0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.460 0.888 0.000 0.000
x2 -0.888 0.460 0.000 0.000
x3 0.000 0.000 -0.747 -0.664
x4 0.000 0.000 0.664 -0.747
Se le variabili hanno varianze molto diverse (di nuovo geometricamente un ellissoide ma con tutti gli assi diversi), l'ortogonalità consente al primo PC di caricare molto pesantemente sulla variabile con la varianza più elevata e così via.
> pc1234 <- princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion 0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.000 0.000 -0.001 1.000
x2 0.001 -0.001 1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000 0.003 -0.001 0.000
Negli ultimi due casi c'erano componenti a bassa varianza che potresti considerare di buttare via per ottenere una riduzione dimensionale, ma farlo equivale esattamente a buttare via le variabili di varianza più basse in primo luogo . In sostanza, l'ortogonalità consente di identificare componenti a bassa varianza con variabili a bassa varianza, quindi se si intende ridurre la dimensionalità in questo modo, non è chiaro che si trarrebbe vantaggio dall'utilizzare PCA per farlo.
Nota bene: il tempo trascorso a discutere del caso in cui le variabili non sono riscalate alla varianza unitaria - cioè usando la covarianza piuttosto che la matrice di correlazione - non dovrebbe essere preso come un'indicazione che questo approccio è in qualche modo più importante, e certamente non che è meglio". La simmetria della situazione è semplicemente più sottile, quindi è necessaria una discussione più lunga.