Jaka jest różnica między podsumowaniem () a ładowaniem () dla obiektu princomp () w R?

11

Przykładowy kod:

(pc.cr <- princomp(USArrests))  
summary(pc.cr)
loadings(pc.cr)  ## note that blank entries are small but not zero

Otrzymuję różne wyniki i nie jestem pewien, czy rozumiem, na czym polega różnica.

Oto wynik:

> summary(pc.cr)
Importance of components:
                           Comp.1      Comp.2      Comp.3       Comp.4
Standard deviation     82.8908472 14.06956001 6.424204055 2.4578367034
Proportion of Variance  0.9655342  0.02781734 0.005799535 0.0008489079
Cumulative Proportion   0.9655342  0.99335156 0.999151092 1.0000000000


> loadings(pc.cr)  ## note that blank entries are small but not zero

...

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00

PS: jak mogę uzyskać dostęp do tabeli utworzonej przez podsumowanie (pc.cr) ?? (Nie mogę tego znaleźć w str.)

Tal Galili
źródło
W przypadku drugiego pytania masz na myśli wektory własne lub podsumowanie ładowania składników?
chl
Cześć chl - mam na myśli wynik z „podsumowania (pc.cr)” - z jakiegoś powodu nie mogę go znaleźć. (robienie czegoś takiego jak podsumowanie (pc.cr) [[1]] dostarczy mi tylko część tabeli)
Tal Galili
Dlaczego masz # inappropriatekomentarz w pierwszym wierszu?
ameba
@amoeba - Naprawdę nie pamiętam. Usunąłem to. :)
Tal Galili

Odpowiedzi:

4

Pierwsze wyjście jest poprawne i najbardziej przydatne. Wywołanie loadings()twojego obiektu po prostu zwraca podsumowanie, gdzie SS jest zawsze równe 1, stąd% wariancji jest tylko ładunkami SS podzielonymi przez liczbę zmiennych. Ma to sens tylko przy użyciu analizy czynnikowej (jak w factanal). Nigdy nie używam princompalternatywy opartej na SVD ( prcomp) i wolę pakiet FactoMineR lub ade4 , które są zdecydowanie bardziej wydajne!

Jeśli chodzi o twoje drugie pytanie, summary()funkcja zwraca SD dla każdego komponentu ( pc.cr$sdevw twoim przypadku), a reszta tabeli wydaje się być obliczona później (za pomocą metody printlub shownie zbadałem tego szczegółowo).

> getS3method("summary","princomp")
function (object, loadings = FALSE, cutoff = 0.1, ...)
{
    object$cutoff <- cutoff
    object$print.loadings <- loadings
    class(object) <- "summary.princomp"
    object
}
<environment: namespace:stats>

To princomp(), co się robi, można wyświetlić za pomocą getAnywhere("princomp.default").

chl
źródło
+1 Używam również FactoMineR, ale pamiętam, że kiedy wypróbowałem metodę PCA na naprawdę dużym zbiorze danych, nigdy nie otrzymałem wyników.
George Dontas,
@ gd047 Dla mnie też się nie powiodło, chociaż jest oparty na SVD (może być zoptymalizowany do obsługi dużego zestawu danych :)
chl