В чем разница между summary () и loadings () для объекта princomp () в R?

11

Пример кода:

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

Я получаю разные результаты от каждого, и я не уверен, что понимаю, в чем разница.

Вот вывод:

> 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: как я могу получить доступ к таблице, созданной по сводке (pc.cr) ?? (Я не могу найти его на ул.)

Таль Галили
источник
Для 2-го вопроса вы имеете в виду собственные векторы или суммарную загрузку компонентов?
ЧЛ
Привет chl - я имею в виду вывод "summary (pc.cr)" - по некоторым причинам я не могу его найти. (делая что-то вроде резюме (pc.cr) [[1]] получу мне только часть таблицы)
Тал Галили
Почему у вас есть # inappropriateкомментарий в первой строке?
говорит амеба, восстанови Монику
@amoeba - я, честно говоря, не помню. Я удалил это. :)
Тал Галили

Ответы:

4

Первый вывод является правильным и наиболее полезным. Вызов loadings()вашего объекта просто возвращает сводку, где SS всегда равны 1, следовательно,% дисперсии - это просто загрузка SS, деленная на количество переменных. Это имеет смысл только при использовании факторного анализа (как в factanal). Я никогда не использую princompили его альтернативу на основе SVD ( prcomp), и я предпочитаю пакет FactoMineR или ade4 , который намного более мощный!

Что summary()касается вашего второго вопроса, функция просто возвращает SD для каждого компонента ( pc.cr$sdevв вашем случае), а остальная часть таблицы, кажется, вычисляется впоследствии (с помощью метода printили show, я не исследовал это подробно).

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

То princomp(), что делает сам, можно посмотреть с помощью getAnywhere("princomp.default").

хл
источник
+1 Я также использую FactoMineR, но я помню, что когда я пробовал использовать метод PCA для действительно большого набора данных, я никогда не получал результатов.
Джордж Донтас
@ gd047 Для меня это тоже не удалось, хотя он основан на SVD (может быть оптимизирован для работы с большим набором данных :)
chl