Qual é a diferença entre summary () e loadings () para o objeto princomp () no R?

11

Código de exemplo:

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

Estou obtendo resultados diferentes de cada um e não tenho certeza de entender qual é a diferença.

Aqui está a saída:

> 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: como posso acessar a tabela criada pelo resumo (pc.cr)? (Eu não consigo encontrá-lo em str.)

Tal Galili
fonte
Para a 2ª pergunta, você quer dizer os vetores próprios ou o resumo dos carregamentos de componentes?
chl
Oi chl - refiro-me à saída de "summary (pc.cr)" - por algum motivo, não consigo encontrá-lo. (fazendo algo como resumo (pc.cr) [[1]] vai me receber apenas parte da tabela)
Tal Galili
Por que você tem um # inappropriatecomentário na primeira linha?
Ameba diz Reinstate Monica
@amoeba - Sinceramente, não me lembro. Eu removi isso. :)
Tal Galili

Respostas:

4

A primeira saída é a correta e mais útil. A chamada loadings()ao seu objeto apenas retorna um resumo em que o SS é sempre igual a 1; portanto, a variação% é apenas o carregamento do SS dividido pelo número de variáveis. Faz sentido apenas ao usar a Análise Fatorial (como em factanal). Eu nunca uso princompou a sua alternativa à base de SVD ( prcomp), e prefiro o FactoMineR ou ade4 pacote que são de longe mais poderoso!

Sobre sua segunda pergunta, a summary()função retorna o SD de cada componente ( pc.cr$sdevno seu caso) e o restante da tabela parece ser calculado posteriormente (através do método printou show, eu não investiguei isso em detalhes).

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

O que em princomp()si pode ser visto usando getAnywhere("princomp.default").

chl
fonte
+1 Eu também uso o FactoMineR, mas lembro que, quando tentei o método PCA em um conjunto de dados muito grande, nunca obtive resultados.
George Dontas
@ gd047 Ele falhou para mim também, embora seja baseado em uma SVD (pode ser otimizado para lidar com grande conjunto de dados :)
chl