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!
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