W analizach statystycznych często zdarza się, że na badane zjawisko wpływa wiele czynników. W takiej sytuacji zależności pomiędzy poszczególnymi zmiennymi są nieoczywiste i często trudne lub wręcz niemożliwe do wychwycenia, a próby dopasowania modelu przynoszą trudne w interpretacji wyniki. W takiej sytuacji pomocna może okazać się analiza czynnikowa. Niniejszy poradnik jest poświęcony jednej z jej szeroko stosowanych metod - analizie głównych składowych (z ang. Principal Component Analysis, PCA)). Ściśle matematyczną część zagadnienia ograniczamy w nim do kilku prostych intuicji, skupiając się na praktycznym zastosowaniu i wizualizacji wyników PCA w R.
Kolejne kroki analizy głównych składowych prowadzą do skonstruuowania nowej przestrzeni obserwacji, w której wyjściowe zmienne są zastąpione nowymi, nazywanymi głównymi składowymi. Każda z głównych składowych jest liniową funkcją wyjściowych zmiennych, dzięki czemu nowa przestrzeń obserwacji przechowuję tę samą informację. Główne składowe są jednak wyznaczone w taki sposób, że pierwsza z nich wyjaśnia największą część oserwowanej zmienności, a każda kolejna jest do niej ortogonalna i odpowiada za mniejszą część wariancji. Dzięki temu PCA umożliwia zastąpienie zbioru skorelowanych ze sobą zmiennych zbiorem nieskorelowanych głównych składowych bez utraty informacji. Z matematycznego punktu widzenia analiza głównych składowych polega na odpowiednim obrocie układu współrzędnych tak, żeby jego osie były wyznaczone przez kierunki, w których obserwowana jest największa wariancja w zbiorze obserwacji. > Algorytm wyznaczania gównych składowych można przedstawić w następujących krokach: 1. Wyznaczenie macierzy kowariancji lub korelacji zbioru danych 2. Wyznaczenie wartości własnych macierzy kowariancji/korelacji i odpowiadających im wektorów własnych 3. Uporządkowanie wartości własnych malejąco 4. Rzutowanie punktów przestrzeni oserwacji na wektory własne odpowiadające największym wartościom własnym. Ich liczba odpowiada pożądanemu wymiarowi nowej przestrzeni.
Jeśli w wyjściowej przestrzeni obserwacji występuje duża korelacja pomiędzy zmiennymi często okazuje, się uwzględnienie w analizie już małej liczby pierwszych głównych składowych pozwala na wyjaśnienie znacznej części zmienności badanego zjawiska. Wówczas zrzutowanie wielowymiarowej przestrzeni obserwacji na np. dwie lub trzy główne składowe pozwala na zredukowanie wymiaru przstrzeni przy bardzo niewielkiej utracie informacji.
PCA jest przydatne jeśli zależy nam na zredukowaniu wymiaru przestrzeni obserwacji. Główne składowe nie mają tak naturalnej interpretacji jak wyściowe zmienne, stanowią jedynie syntetyczną miarę informacji. Przechowują jednak tę samą informację, są więc przydatne przy prognozowaniu badanego zjawiska. Analiza głównych składowych jest stosowana także do klasyfikacji, kiedy zależy nam na wyodrębnieniu z analizowanego zbioru podobnych obserwacji. Przynależność do poszczególnych grup lub odpowiednie kryteria podziału często uwidoczniają się po przeprowadzeniu PCA. PCA pozwala także na dostrzeżenie niewidocznych lub trudnych do zauważenia zależności pomiędzy wyjściowymi zmiennymi.
Uwaga! Klasycznej analizy głównych składowych nie powinno się przeprowadzać na zmiennych kategorycznych. W takiej sytuacji należy posłużyć się innymi metodami.
Dzięki pakietom dostępnym w R wyznaczanie głównych składowych oraz ich wizualizacja i interpretacja stają się znacznie łatwiejsze, co zaprezentujemy na przykładzie.
W celu dokonania przykładowej analizy posłużymy się znanym zbiorem danych iris, w celu stworzenia modelu służącego do klasyfikacji irysów do poszczególych gatunków na podstawie ich łatwo obserwowalnych cech. Zaczniemy od wczytania zbioru danych do R:
library(datasets)
data(iris)
head(iris, 5)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
nrow(iris)
## [1] 150
Jak widać, we wczytanym zbiorze danych każda ze 150 obserwacji jest charakteryzowana przez 4 zmienne ilościowe opisujące wymiary poszczególnych elementów kwiatu oraz gatunek, który w konstruowanym modelu jest zmienną objaśnianą, nie jest więc brany pod uwagę podczas analizy głównych składowych.
Do wykonywania analizy głównych składowych w R służą należące do wbudowanego pakietu stats funkcje prcomp i princomp, które różnią się wykorzystywanymi w procesie wyznaczania głównych składowych metodami. Wykorzystywana przez funkcję prcomp metoda rozkładu SVD charakteryzuje się lepszymi własnościami numerycznymi, dlatego w naszej analizie posłużymy się tą właśnie funkcją. Pełną listę argumentów fukcji prcomp można znaleźć pod poleceniem help(prcomp). Do najbardziej przydatnych należą center i scale. - argumenty typu logicznego, które przy ustawieniu TRUE pozwalają odpowiednio na scentrowanie zmiennych wokół zera i przeskalowanie ich, dzięki czemu różnice w wielkościach i jednostkach analizowanych wartości nie zaburzają analizy.
#zastosowanie fukcji prcomp
iris.pca <- prcomp(iris[,1:4], center=TRUE, scale.=TRUE)
print(iris.pca)
## Standard deviations (1, .., p=4):
## [1] 1.7083611 0.9560494 0.3830886 0.1439265
##
## Rotation (n x k) = (4 x 4):
## PC1 PC2 PC3 PC4
## Sepal.Length 0.5210659 -0.37741762 0.7195664 0.2612863
## Sepal.Width -0.2693474 -0.92329566 -0.2443818 -0.1235096
## Petal.Length 0.5804131 -0.02449161 -0.1421264 -0.8014492
## Petal.Width 0.5648565 -0.06694199 -0.6342727 0.5235971
summary(iris.pca)
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 1.7084 0.9560 0.38309 0.14393
## Proportion of Variance 0.7296 0.2285 0.03669 0.00518
## Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
Polecenie print zastosowane na nowym obiekcie iris.pca pozwala na wyświetlenie macierzy która wskazuje, jak każda ze zmiennych w wyściowym zbiorze wpływa na poszczególne główne składowe, oznaczone symbolami PC1, PC2, PC3, PC4.W interpretacji wyników najbardziej istotna jest część objaśnianej zmienności (Proportion of Variance) widoczna po zastosowaniu funkcji summary. Na jej podstawie możemy stwierdzić, że pierwsza składowa główna wyjaśnia aż 72,96% zmienności, a druga - 22,85%. Oznacza to że zrzutowanie przestrzeni obserwacji na przestrzeń dwuwymiarową pozwoli na wyjaśnienie ponad 95% zmienności.
Dostępne w R funkcje pozwalają na prostą i przejrzystą wizualizację wyników analizy głównych składowych.
Do zwizualizowania wyników PCA wystarczają nawet funkcje należące do podstawowych pakietów wbudowanych w R, jednak znacznie większe możliwości daje pakiet ggplot2 oraz omówiony w dalszej części pakiet factoextra.
library("devtools")
install_github("vqv/ggbiplot")
Dzięki graficznej analizie PCA można zaobserwować niewidoczne na pierwszy rzut oka zależności pomiędzy zmiennymi, nawet w zbiorze danych o dużej liczbie zmiennych. Przy pomocy prostych poleceń wykonamy teraz wykres, który pozwoli na przedstawienie czerowymiarowego zbioru danych iris w przestrzeni dwuwymiarowej.
Wykonanie najprostszego wykresu nie wymaga instalowania dodatkowych pakietów, wystarczy posłużyć się funkcją biplot z pakietu stats:
biplot(iris.pca)
Uzyskany w ten sposób wykres nie jest jednak wystarczająco czytelny. Znacznie lepsze efekty uzyskujemy przy pomocy funkcji ggbiplot dostępnej dzięki zainstalowemu wcześniej pakietowi.
library(ggbiplot)
ggbiplot(iris.pca, obs.scale=1, var.scale=1)+ggtitle("Analiza głównych składowych dla zbioru danych iris")
Wykres prezentuje się znacznie lepiej, jest bardziej przejrzysty i etetyczny. Aby móc go łatwo interpretować należy pamiętać, że
osie układu współrzędnych reprezentują, zgodnie z opisem, dwie pierwsze główne składowe, na które została zrzutowana nasza przestrzeń obserwacji
strzałki z nazwami zmiennych pokazują w jakim kierunki i jak bardzo wpływają one na poszczególne główne składowe. Ponadto z ich wzajemnego położenia możemy odczytać wzajemną korelację pomiędzy zmiennymi:
jeśli wektory są prostopadłe, zmienne nie są skorelowane
mały kąt pomiędzy wektorami oznacza dużą korelację
kąt bliski półpełnemu oznacza ujemną korelację
zaznaczone na wykresie punkty odpowiadają poszczególnym obserwacjom. Z wykresu możemy odczytać, jakie wartości przyjmują dla nich pierwsze dwie główne składowe
Na uzyskanym wykresie poszczególne obsewacje są nierozróżnialne. Aby uzyskać pełniejsze wnioski z analizy, warto zaznaczyć odpowiednio obserwacje należące do różnych gatunków:
iris.species <- iris[,5]
ggbiplot(iris.pca, obs.scale=1, var.scale=1, ellipse=TRUE, groups = iris.species)+ggtitle("Analiza głównych składowych dla zbioru danych iris")+theme(legend.position="bottom")
Opcjonalny argument groups zastosowanej funkcji ggbiplot pozwala na pogrupowanie obserwacji zgodnie z wybranym odgórnie kryterium. Jak widać, poszczególne obserwacje tworzą wyraźne grupy w zależności od gatunku.
Przydatny przy wizualizacji PCA może okazać się także pakiet factoextra. Wbudowane w niego funkcje znacznie ułatwiają przedstawienie wyników analizy.
Za pomocą pakietu można łatwo stworzyć wykres przedstawiający część zmienności wyjaśnianej przez poszczególne główne składowe (ang. screeplot).
library("factoextra")
fviz_eig(iris.pca, main = "% zmienności wyjaśnianej przez poszczególne główne składowe")
Można także przedstawić obserwacje w dwuwymiarowym układzie współrzędnych (po zrzutowaniu na pierwsze główne składowe), za pomocą funkcji fviz_pca_ind)
iris.species <- iris[,5]
fviz_pca_ind(iris.pca,
geom="point", #alteratywnie geom = "text" - zamiast punktów na wykresie nazwy obserwacji
habillage = iris.species #grupowanie obserwacji zgodnie z gatunkiem
)
Przy pomocy funkcji fviz_pca_var szybko stworzymy przejrzysty wykres pokazujący korelację zmiennych i ich wpływ na główne składowe.
fviz_pca_var(iris.pca,
col.var = "contrib", #kolor strzałek odzwierciedla wpływ zmiennych na główne składowe
repel = TRUE #dzięki takimu ustawieniu nazwy zmiennych na wykresie nie będą na siebie nachodzić
)
Zastosowanie funkcji fviz_pca_biplot umożliwa nałożenie na siebie poprzednich dwóch wykresów:
fviz_pca_biplot(iris.pca, geom = "point", habillage = iris.species, repel = "TRUE")
###Podsumowanie Analiza głównych składowych jest niezwykle przydatna przy analizie i wizualizacji wielowymiarowych zbiorów danych. Dzięki dostępnym w R pakietom można dokonać jej szybko i łatwo, a wyniki analizy za pomocą kilku komend przedstawić w formie przejrzystych wykresów. Mamy nadzieję, że niniejsza praca okaże się pomocna w nauce tej przydatnej metody.