O "Aprendizado de Máquina para Hackers" de O'Reilly diz que cada componente principal representa uma porcentagem da variação. Citei a parte relevante da página abaixo (capítulo 8, p.207). Falando com outro especialista, eles concordaram que é a porcentagem.
No entanto, os 24 componentes somam 133,2095%. Como pode ser?
Tendo nos convencido de que podemos usar o PCA, como fazemos isso no R? Novamente, este é um local em que R brilha: a totalidade do PCA pode ser feita em uma linha de código. Usamos a função princomp para executar o PCA:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Se digitarmos pca em R, veremos um resumo rápido dos principais componentes:
Call: princomp(x = date.stock.matrix[, 2:ncol(date.stock.matrix)]) Standard deviations: Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 29.1001249 20.4403404 12.6726924 11.4636450 8.4963820 8.1969345 5.5438308 Comp.8 Comp.9 Comp.10 Comp.11 Comp.12 Comp.13 Comp.14 5.1300931 4.7786752 4.2575099 3.3050931 2.6197715 2.4986181 2.1746125 Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20 Comp.21 1.9469475 1.8706240 1.6984043 1.6344116 1.2327471 1.1280913 0.9877634 Comp.22 Comp.23 Comp.24 0.8583681 0.7390626 0.4347983 24 variables and 2366 observations.
Neste resumo, os desvios padrão nos dizem quanto da variação no conjunto de dados é explicada pelos diferentes componentes principais. O primeiro componente, chamado Comp.1, responde por 29% da variação, enquanto o próximo componente responde por 20%. No final, o último componente, Comp.24, responde por menos de 1% da variação. Isso sugere que podemos aprender muito sobre nossos dados apenas olhando para o primeiro componente principal.
[Código e dados podem ser encontrados no github .]
Standard deviations
é um pouco errada. Como os desvios-padrão são de fato desvios-padrão, devemos quadrá-los para ver quanto da variação cada componente representa. O primeiro componente representaria % da variação total.R
próprio software. Encontrar esse erro foi uma boa solução (espero que você tenha achado gratificante descobrir o que realmente está acontecendo com o PCA)!Respostas:
Use
summary.princomp
para ver a "Proporção de variação" e "Proporção cumulativa".fonte
sqrt(pca$sdev[1]/sum(pca$sdev))
(aproximadamentesqrt(29.1/133.2)
) dá 0,4673904.sdev
implica que você está olhando para o desvio padrão , ou seja, a raiz quadrada da variação (ou , usando a notação da minha resposta), que deve explicar a diferença. Tente emvez disso.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
mostra que esquadrinha osdev
componente, questats:::princomp.default
mostrasqrt
os valores de eigen.Eles devem somar100 %.
fonte
Aqui está um código R para complementar as respostas anteriores (
pca[["sdev"]]
geralmente é escritopca$sdev
, mas causa uma formatação incorreta no trecho abaixo).Portanto, como o @Max aponta, trabalhar com a variação em vez do desvio padrão e não esquecer de dividir pela variação total resolve o problema.
fonte