Chciałem wyjaśnić komentarz pozostawiony pod odpowiedzią @ Peter-Flom, ale prawdopodobnie warto w odpowiedzi napisać. W jakim stopniu można zmniejszyć wymiary, uruchamiając PCA na prawie ortogonalnych danych? Odpowiedź brzmi „zależy” od tego, czy wykonasz PCA na macierzy korelacji czy kowariancji .
Jeśli używasz PCA na matrycy korelacji, to ponieważ będzie ona tylko nieznacznie różnić się od matrycy tożsamości, istnieje sferyczna symetria, która sprawia, że wszystkie kierunki są „równie pouczające”. Przeskalowanie wariancji zmiennych do jednego przed PCA jest matematycznie równoważnym podejściem, które da taki sam rezultat. Chociaż dane wyjściowe PCA zidentyfikują niektóre komponenty o nieco mniejszej wariancji niż inne, można to przypisać (jeśli przyjmiemy zerową korelację w populacji) jedynie niczym przypadkowym zmianom w próbie, więc nie byłby to dobry powód, aby je odrzucić składniki. W rzeczywistości taka różnica między standardowymi odchyleniami składników powinna zmniejszać się wraz ze wzrostem wielkości próbki. Możemy to potwierdzić w symulacji.
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)
}
Wynik:
> 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
Jeśli jednak wykonasz PCA przy użyciu macierzy kowariancji zamiast macierzy korelacji (równoważnie: jeśli nie skalujemy standardowych odchyleń do 1 przed zastosowaniem PCA), odpowiedź zależy od rozprzestrzeniania się twoich zmiennych. Jeśli twoje zmienne mają tę samą wariancję, nadal mamy sferyczną symetrię, więc nie ma „uprzywilejowanego kierunku” i nie można osiągnąć redukcji wymiarów.
> 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
Jednak w przypadku kombinacji zmiennych o wysokiej i niskiej zmienności symetria przypomina bardziej elipsoidę z niektórymi szerokimi osiami, a inne cienkimi. W tej sytuacji będą ładowane komponenty o wysokiej wariancji na zmienne o dużej wariancji (gdzie elipsoida jest szeroka) i komponenty o niskiej wariancji na zmienne o niskiej wariancji (w których kierunkach elipsoida jest wąska).
> 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
Jeśli zmienne mają bardzo różne wariancje (ponownie geometrycznie elipsoidę, ale wszystkie osie się różnią), to ortogonalność pozwala pierwszemu komputerowi na bardzo duże obciążenie zmiennej o największej wariancji i tak dalej.
> 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
W dwóch ostatnich przypadkach istniały komponenty o niskiej wariancji, które można rozważyć wyrzucenie w celu uzyskania zmniejszenia wymiarów, ale robi to dokładnie tak samo, jak wyrzucenie zmiennych o najniższej wariancji . Zasadniczo ortogonalność pozwala zidentyfikować komponenty o niskiej wariancji za pomocą zmiennych o niskiej wariancji, więc jeśli zamierzasz zmniejszyć wymiarowość w ten sposób, nie jest jasne, czy skorzystałbyś na tym przy użyciu PCA.
Nota bene: czasu poświęconego na omawianie przypadku, w którym zmienne nie są przeskalowane do wariancji jednostkowej - tj. Przy użyciu kowariancji zamiast macierzy korelacji - nie powinno być traktowane jako wskazówka, że takie podejście jest w jakiś sposób ważniejsze, a na pewno nie to, że jest lepiej". Symetria sytuacji jest po prostu bardziej subtelna, dlatego wymaga dłuższej dyskusji.