"Machine Learning For Hackers" de O'Reilly dice que cada componente principal representa un porcentaje de la variación. He citado la parte relevante de la página a continuación (capítulo 8, p. 207). Hablando con otro experto, acordaron que es el porcentaje.
Sin embargo, los 24 componentes suman 133.2095%. ¿Como puede ser?
Habiéndonos convencido de que podemos usar PCA, ¿cómo lo hacemos en R? Nuevamente, este es un lugar donde R brilla: la totalidad de PCA se puede hacer en una línea de código. Usamos la función princomp para ejecutar PCA:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Si solo escribimos pca en R, veremos un resumen rápido de los componentes principales:
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.
En este resumen, las desviaciones estándar nos dicen cuánto de la varianza en el conjunto de datos se explica por los diferentes componentes principales. El primer componente, llamado Comp.1, representa el 29% de la varianza, mientras que el siguiente componente representa el 20%. Al final, el último componente, Comp.24, representa menos del 1% de la varianza. Esto sugiere que podemos aprender mucho sobre nuestros datos con solo mirar el primer componente principal.
[El código y los datos se pueden encontrar en github .]
Standard deviations
es un poco fuera de lugar. Dado que las desviaciones estándar son de hecho desviaciones estándar, debemos ajustarlas al cuadrado para ver cuánta varianza representa cada componente. El primer componente representaría por ciento de la varianza total.R
software en sí. Encontrar ese error fue una buena captura (¡espero que te haya resultado gratificante descubrir qué está pasando realmente con PCA)!Respuestas:
Use
summary.princomp
para ver la "Proporción de varianza" y la "Proporción acumulativa".fuente
sqrt(pca$sdev[1]/sum(pca$sdev))
(aproximadamentesqrt(29.1/133.2)
) da 0.4673904.sdev
implica que estás viendo la desviación estándar , es decir, la raíz cuadrada de la varianza (o , usando la notación de mi respuesta), lo que debería explicar la diferencia. Intenta en sulugar.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
muestra que cuadra elsdev
componente, questats:::princomp.default
muestrasqrt
el valor propio.Deberían sumar el100 %.
fuente
Aquí hay un código R para complementar las respuestas anteriores (
pca[["sdev"]]
generalmente se escribepca$sdev
, pero causa un mal formato en el fragmento a continuación).Entonces, como señala @Max, trabajar con la varianza en lugar de la desviación estándar y no olvidar dividir por la varianza total resuelve el problema.
fuente