2013-06-01 14 views
6

Chciałbym móc konstruować wyniki analizy głównych komponentów przy użyciu ich ładowania, ale nie mogę dowiedzieć się, co faktycznie robi funkcja princomp, gdy oblicza wyniki zestawu danych. Przykład zabawkowy:Konstruowanie wyników z ładunków princomp w R

cc <- matrix(1:24,ncol=4) 
PCAcc <- princomp(cc,scores=T,cor=T) 
PCAcc$loadings 

Loadings: 
    Comp.1 Comp.2 Comp.3 Comp.4 
[1,] 0.500 0.866    
[2,] 0.500 -0.289 0.816  
[3,] 0.500 -0.289 -0.408 -0.707 
[4,] 0.500 -0.289 -0.408 0.707 

PCAcc$scores 

     Comp.1  Comp.2  Comp.3 Comp.4 
[1,] -2.92770 -6.661338e-16 -3.330669e-16  0 
[2,] -1.75662 -4.440892e-16 -2.220446e-16  0 
[3,] -0.58554 -1.110223e-16 -6.938894e-17  0 
[4,] 0.58554 1.110223e-16 6.938894e-17  0 
[5,] 1.75662 4.440892e-16 2.220446e-16  0 
[6,] 2.92770 6.661338e-16 3.330669e-16  0 

Moje zrozumienie jest to, że wyniki są liniową kombinacją ładunków i oryginalnych danych przeskalowanych. Starając się „ręcznie”:

rescaled <- t(t(cc)-apply(cc,2,mean)) 
rescaled%*%PCAcc$loadings 

    Comp.1  Comp.2  Comp.3 Comp.4 
[1,]  -5 -1.332268e-15 -4.440892e-16  0 
[2,]  -3 -6.661338e-16 -3.330669e-16  0 
[3,]  -1 -2.220446e-16 -1.110223e-16  0 
[4,]  1 2.220446e-16 1.110223e-16  0 
[5,]  3 6.661338e-16 3.330669e-16  0 
[6,]  5 1.332268e-15 4.440892e-16  0 

Kolumny są wyłączone przez współczynnik 1.707825, 2 i 1,333333, odpowiednio. Dlaczego to? Ponieważ macierz danych zabawek ma taką samą wariancję w każdej kolumnie, normalizacja nie powinna tu być konieczna. Każda pomoc jest bardzo doceniana.

Dzięki!

+1

na oddzielnej nocie, może to nie jest najlepszy wybrane przykładowe dane dla PCA od swojej skoncentrowanej ('skalę (CC)') punkty są w tej samej linii. Tak więc PC1 przechwyci całą wariancję, a pozostałe komputery będą bezużyteczne (prawdopodobnie śmieci wyliczone z szumu.) Pokazuje również, że twoje wyniki są niezerowe tylko dla PC1. – flodel

Odpowiedz

4

Trzeba

scale(cc,PCAcc$center,PCAcc$scale)%*%PCAcc$loadings 

lub łatwiejszy

predict(PCAcc,newdata=cc) 
+0

Dzięki, nie wiedziałem o funkcji skali. Miałem nadzieję, że lepiej zrozumiem, dlaczego "princomp" skaluje się o współczynnik 1.707825 w pierwszej kolejności. Skąd to pochodzi? Byłoby dla mnie sens, gdyby to było standardowe odchylenie kolumny, ale tak nie jest. – Escotch

Powiązane problemy