Korzystanie z tych danych:
head(USArrests)
nrow(USArrests)
Mogę zrobić PCA w następujący sposób:
plot(USArrests)
otherPCA <- princomp(USArrests)
Mogę pobrać nowe komponenty
otherPCA$scores
oraz odsetek wariancji wyjaśniony przez składniki z
summary(otherPCA)
Ale co jeśli chcę wiedzieć, które zmienne są w większości wyjaśnione przez które główne składniki? I odwrotnie: czy np. PC1 lub PC2 jest głównie wyjaśnione przez murder
? W jaki sposób mogę to zrobić?
Czy mogę na przykład powiedzieć, że PC1 jest w 80% wyjaśnione przez murder
lub assault
?
Myślę, że obciążenia mi tu pomagają, ale pokazują one kierunkowość, a nie wyjaśnioną wariancję, tak jak ją rozumiem, np
otherPCA$loadings
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Murder 0.995
Assault -0.995
UrbanPop -0.977 -0.201
Rape -0.201 0.974
r
pca
dimensionality-reduction
regression-strategies
użytkownik1320502
źródło
źródło
Odpowiedzi:
Masz rację, ładunki mogą ci w tym pomóc. Można ich użyć do obliczenia korelacji między zmiennymi a głównymi składnikami. Co więcej, suma kwadratowych obciążeń jednej zmiennej we wszystkich głównych składnikach jest równa 1. Stąd, kwadratowe ładunki informują o proporcji wariancji jednej zmiennej wyjaśnionej przez jeden główny składnik.
Problem z princomp polega na tym, że pokazuje on tylko „bardzo wysokie” obciążenia. Ale ponieważ obciążenia są tylko wektorami własnymi macierzy kowariancji, wszystkie obciążenia można uzyskać za pomocą
eigen
polecenia w R:Teraz masz żądane informacje w matrycy
explvar
.źródło
assault
czyurban pop
możemy to zrobić? częściowo zdezorientowany, ponieważ w macierzy występuje tylko jedna korelacja dlaassault
Myślę, że przyjęta odpowiedź może być niebezpiecznie myląca (-1). Istnieją co najmniej cztery różne pytania zmieszane razem w PO. Rozważę je jeden po drugim.
Te dwa pytania są równoważne, a odpowiedzi udziela kwadrat współczynnika korelacji między zmienną a komputerem. Jeśli PCA jest wykonywane na korelacjach, wówczas współczynnik korelacji jest podawany ( patrz tutaj ) przez odpowiedni element obciążeń . PC jest związany z wektorem własnym macierzy korelacji i odpowiednią wartością własną . Wektor jest podany przez . Jego elementami są korelacje tego komputera z odpowiednimi oryginalnymi zmiennymi. r ir2 r i Vi si Li Li=(si)1/2Vi
Zauważ, że wektory własne i ładunki to dwie różne rzeczy! W R wektory własne są myląco nazywane „ładunkami”; należy zachować ostrożność: ich elementy nie są pożądanymi korelacjami. [Aktualnie akceptowana odpowiedź w tym wątku dezorientuje oba.]Vi Li
Ponadto, jeśli PCA jest wykonywane na kowariancjach (a nie na korelacjach), wówczas ładunki dadzą również kowariancje, a nie korelacje. Aby uzyskać korelacje, należy je obliczyć ręcznie, zgodnie z PCA. [Aktualnie akceptowana odpowiedź na ten temat jest niejasna.]
Ponieważ komputery PC są ortogonalne (tj. Nieskorelowane), można po prostu dodać indywidualne wartości (patrz Q1), aby uzyskać globalną wartość .r2 R2
Aby wybrać podzbiór, można dodawać komputery o najwyższych korelacjach ( ) z daną pierwotną zmienną, aż do osiągnięcia pożądanej ilości wyjaśnionej wariancji ( ).r2 R2
Odpowiedź na to pytanie nie jest udzielana automatycznie przez PCA! Np. Jeśli wszystkie oryginalne zmienne są bardzo silnie skorelowane z parami , wówczas korelacje między pierwszym komputerem a wszystkimi zmiennymi będą wokół . Nie można dodać tych liczb aby obliczyć odsetek wariancji tego komputera wyjaśniony, powiedzmy, pięcioma zmiennymi oryginalnymi (spowodowałoby to nonsensowny wynik ). Zamiast tego należałoby zrestartować komputer na tych zmiennych i uzyskać wielokrotną wartość .R = 0.9 R 2 R 2 = 0,9 ⋅ 0,9 ⋅ 5 > 1 R 2r=0.9 r=0.9 r2 R2=0.9⋅0.9⋅5>1 R2
Jak wybrać podzbiór wyjaśniający daną wielkość wariancji, zasugerował @FrankHarrell (+1).
źródło
Możesz dokonać wyboru zmiennych krokowych do tyłu lub do przodu, przewidując składnik lub liniową kombinację składników na podstawie ich zmiennych składowych. będzie 1,0 w pierwszym etapie, jeśli korzystają z tyłu Stepdown. Chociaż regresja krokowa jest katastrofą podczas przewidywania , może działać dobrze, gdy przewidywanie jest mechanistyczne, jak ma to miejsce w tym przypadku. Możesz dodawać lub usuwać zmienne, dopóki nie wyjaśnisz 0,8 lub 0,9 (na przykład) informacji w głównych komponentach. YR2 Y
źródło
Dane dotyczące aresztowań USA w pakiecie z R są tutaj tylko przykładem, ale zauważam, że obliczenia ładunków w pytaniu pochodzą z PCA macierzy kowariancji . Jest to gdzieś pomiędzy arbitralnym a nonsensownym, ponieważ zmienne są mierzone w różnych skalach.
Populacja miejska wygląda jak procent. Kalifornia jest 91% i najwyższa.
Trzy zmienne dotyczące przestępczości wydają się być liczbą aresztowań za przestępstwa wyrażoną w stosunku do liczby ludności (przypuszczalnie przez pewien okres czasu). Prawdopodobnie jest to gdzieś udokumentowane, niezależnie od tego, czy jest aresztowaniem na 1000, 10000 czy cokolwiek innego.
Średnia zmiennej szturmowej w danych jednostkach wynosi około 171, a średnia liczba zabójstw wynosi około 8. Zatem wyjaśnienie twoich obciążeń jest takie, że w dużej mierze wzór jest artefaktem: zależy od bardzo różnej zmienności zmiennych.
Tak więc, chociaż dane mają sens w tym, że jest o wiele więcej aresztowań za napaści niż za morderstwa itp., Ten znany (lub nie zaskakujący) fakt dominuje w analizie.
To pokazuje, że jak każde inne miejsce w statystykach, musisz pomyśleć o tym, co robisz w PCA.
Jeśli pójdziesz dalej:
Twierdziłbym, że lepiej jest pominąć procent urbanizacji. Bycie miejskim nie jest przestępstwem; może oczywiście służyć jako proxy dla zmiennych wpływających na przestępczość.
Moim zdaniem PCA oparty na macierzy korelacji miałby większy sens. Inną możliwością jest praca z logarytmami wskaźników aresztowań, a nie wskaźników aresztowań (wszystkie wartości są dodatnie; patrz poniżej).
Uwaga: Odpowiedź @ random_guy celowo wykorzystuje macierz kowariancji.
Oto kilka statystyk podsumowujących. Użyłem Staty, ale to dość niematerialne.
źródło