El análisis de componentes principales (principal component analysis) o PCA es una de las técnicas de aprendizaje no supervisado, las cuales suelen aplicarse como parte del análisis exploratorio de los datos (EDA).
Una de las aplicaciones de PCA es la reducción de dimensionalidad (variables), perdiendo la menor cantidad de información (varianza) posible: cuando contamos con un gran número de variables cuantitativas posiblemente correlacionadas (indicativo de existencia de información redundante), PCA permite reducirlas a un número menor de variables transformadas (componentes principales) que expliquen gran parte de la variabilidad en los datos. Cada dimensión o componente principal generada por PCA será una combinación lineal de las variables originales, y serán además independientes o no correlacionadas entre sí.
A partir del dataset utilizado en el proyecto final realizar un análisis PCA, ya sea con la función de base R o con el paquete psych.
Interpretar los componentes principales con mayor impacto en el dataset.
Se debe incluir el objeto con los resultados del modelo.
Un scree plot que muestre el peso de cada componente principal.
## tibble [249 × 13] (S3: tbl_df/tbl/data.frame)
## $ deftarjcredito: num [1:249] 1 1 1 1 1 0 1 1 1 1 ...
## $ ingresos : num [1:249] 1756 748 1501 1831 1622 ...
## $ vecescajero : num [1:249] 13 9 10 10 14 17 6 10 6 18 ...
## $ servbanca : num [1:249] 4 2 1 4 6 3 3 8 4 6 ...
## $ tdebito : num [1:249] 0 1 0 0 0 0 0 1 0 0 ...
## $ edad : num [1:249] 47 36 22 59 49 40 29 35 40 59 ...
## $ casado : num [1:249] 1 0 1 1 0 0 0 1 1 0 ...
## $ cbog : num [1:249] 0 1 1 0 0 1 0 1 0 0 ...
## $ ccal : num [1:249] 0 0 0 1 0 0 1 0 0 0 ...
## $ ccart : num [1:249] 0 0 0 0 1 0 0 0 1 0 ...
## $ cmed : num [1:249] 1 0 0 0 0 0 0 0 0 1 ...
## $ city : chr [1:249] "Medellín" "Bogotá" "Bogotá" "Calí" ...
## $ casadosoltero : chr [1:249] "casado" "soltero" "casado" "casado" ...
## Warning: NAs introducidos por coerción
## Warning: NAs introducidos por coerción
## tibble [249 × 13] (S3: tbl_df/tbl/data.frame)
## $ deftarjcredito: num [1:249] 1 1 1 1 1 0 1 1 1 1 ...
## $ ingresos : num [1:249] 1756 748 1501 1831 1622 ...
## $ vecescajero : num [1:249] 13 9 10 10 14 17 6 10 6 18 ...
## $ servbanca : num [1:249] 4 2 1 4 6 3 3 8 4 6 ...
## $ tdebito : num [1:249] 0 1 0 0 0 0 0 1 0 0 ...
## $ edad : num [1:249] 47 36 22 59 49 40 29 35 40 59 ...
## $ casado : num [1:249] 1 0 1 1 0 0 0 1 1 0 ...
## $ cbog : num [1:249] 0 1 1 0 0 1 0 1 0 0 ...
## $ ccal : num [1:249] 0 0 0 1 0 0 1 0 0 0 ...
## $ ccart : num [1:249] 0 0 0 0 1 0 0 0 1 0 ...
## $ cmed : num [1:249] 1 0 0 0 0 0 0 0 0 1 ...
## $ city : num [1:249] NA NA NA NA NA NA NA NA NA NA ...
## $ casadosoltero : num [1:249] NA NA NA NA NA NA NA NA NA NA ...
## [1] "tbl_df" "tbl" "data.frame"
pca_bankdumcity2 <-prcomp(bankdumcity2, center = TRUE, scale. = TRUE)
names(pca_bankdumcity2)
## [1] "sdev" "rotation" "center" "scale" "x"
plot(pca_bankdumcity2$x [ ,1], pca_bankdumcity2$x [ ,2], xlab = "PCA 1", ylab = "PCA 2")
Como podemos observar en el gráfico anterior, no existe correlación entre el primer par de componentes principales.
summary(pca_bankdumcity2)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.3547 1.2850 1.196 1.1506 1.00005 0.99215 0.96629
## Proportion of Variance 0.1668 0.1501 0.130 0.1204 0.09092 0.08949 0.08488
## Cumulative Proportion 0.1668 0.3170 0.447 0.5673 0.65823 0.74772 0.83260
## PC8 PC9 PC10 PC11
## Standard deviation 0.87394 0.79778 0.66420 3.511e-16
## Proportion of Variance 0.06943 0.05786 0.04011 0.000e+00
## Cumulative Proportion 0.90203 0.95989 1.00000 1.000e+00
Los autovalores son determinados por los autovectores, que podemos obtener del objeto “rotation” del objeto pca creado.
Estas variables nos interesan porque nos permiten calcular el porcentaje de la variabilidad explicada por cada una de las componentes del dataset.
autovectores <- pca_bankdumcity2$rotation
autovalores <- pca_bankdumcity2$sdev * pca_bankdumcity2$sdev
Guardamos el porcentaje de variación de cada componente y los mostramos en un gráfico.
pca_var_pct <- round(autovalores/sum(autovalores)*100, digits = 2)
barplot(pca_var_pct, main = "Scree Plot", xlab = "Componente Principal", ylab = "Variacion Porcentual")
Podemos observar que los primeros 5 PCA tienen un desvío estándar de 1.3547 1.2850 1.196 1.1506 1.00005 0.99215 0.96629 aunque si quisiéramos una explicación superior al 80% deberíamos considerar los 7 primeros componentes principales.
screeplot(pca_bankdumcity2, type = "l", main = "Screeplot Bankdumcity")
Como puede verse en el gráfico anterior, los primeros 7 componentes principales son los que explican el mayor porcentaje de la varianza, llegando al 83.26% tal como se puede ver en el acumulado del summary del punto 6.