Analisis de Componentes Principales

El Análisis de Componentes Principales (ACP) es un método estadístico que simplifica conjuntos de datos de alta dimensión manteniendo la mayor cantidad de información posible. Donde hay un conjunto de individuos con múltiples variables, el ACP busca reducir el número de variables originales a un conjunto menor de componentes principales que explican la mayor parte de la variabilidad de los datos.

Sus principales aplicaciones incluyen la reducción de dimensionalidad, facilitando la interpretación y visualización de los datos, la comparación de individuos, permitiendo identificar patrones en los datos, y la descripción de relaciones entre variables, logrando sintetizar la información en pocos ejes factoriales cuando existe alta correlación entre las variables.

Metodología

Se emplearan herramientas de estadistica descriptiva multivariada como:

Es necesario activar los paquetes WDI,factoextra, FactoMineR, psych y corrplot.

library(WDI)

library("factoextra")

library("FactoMineR")

library(psych)

library("corrplot")

library(knitr)

El análisis de componentes principales se realizara a una base de datos economicos de Colombia desde el año 2000 hasta el 2020, proporcionada por el WDI del banco mundial. Las variables usadas para tal efecto son:

indicadores <- c("NY.GDP.MKTP.CD", "FP.CPI.TOTL.ZG", "SL.UEM.TOTL.ZS","NE.EXP.GNFS.ZS","NE.IMP.GNFS.ZS",
                 "DT.TDS.DECT.GN.ZS","NY.GDP.PCAP.CD","SP.DYN.LE00.IN",
                 "EG.PROD.TOTL.KT.OE", "EN.ATM.CO2E.KT
                 ","SH.DYN.MORT")


data_CO <- WDI(country="CO",indicator = indicadores, start = 2000, end = 2020)

data_CO2 <- data_CO [,- c(1,2,3,4)]

matriz_data_CO <- as.matrix.data.frame(data_CO2)

colnames(matriz_data_CO) <- c("PIB", "IPC", "Tasa Desempleo", "Exportaciones %PIB", 
                        "Importaciones %PIB", "Deuda externa %PNB", "PIB per capita",
                        "Esperanza de vida", "Tasa de mortalidad infantil")

Head_data<- head(matriz_data_CO)

kable(Head_data, digits = 3)
PIB IPC Tasa Desempleo Exportaciones %PIB Importaciones %PIB Deuda externa %PNB PIB per capita Esperanza de vida Tasa de mortalidad infantil
99875074951 9.225 20.520 15.915 16.752 5.267 2555.008 71.320 25.1
98200641203 7.966 15.040 15.387 18.514 6.617 2472.991 71.502 24.3
97945812803 6.352 14.481 14.816 18.167 7.186 2428.930 71.939 23.6
94644969157 7.130 13.221 16.575 19.941 9.440 2311.942 72.361 22.8
117092416666 5.904 13.717 16.771 19.093 6.819 2818.572 72.695 22.2
145600529606 5.051 11.062 16.971 20.452 7.235 3456.066 73.081 21.5

Se procede a escalar los datos para poder realizar el análisis de componentes principales

scale_data_CO <- scale(matriz_data_CO)

Head_data_e<- head(scale_data_CO)

kable(Head_data_e, digits = 3)
PIB IPC Tasa Desempleo Exportaciones %PIB Importaciones %PIB Deuda externa %PNB PIB per capita Esperanza de vida Tasa de mortalidad infantil
-1.389 2.122 2.994 -0.367 -2.284 -0.190 -1.351 -1.767 1.756
-1.406 1.506 1.137 -0.742 -1.069 0.542 -1.391 -1.666 1.538
-1.408 0.718 0.948 -1.148 -1.309 0.850 -1.413 -1.424 1.347
-1.441 1.098 0.521 0.101 -0.086 2.070 -1.471 -1.190 1.129
-1.220 0.499 0.689 0.240 -0.671 0.651 -1.220 -1.005 0.966
-0.940 0.082 -0.210 0.382 0.266 0.876 -0.906 -0.791 0.775

Se calcula la matriz de covarianza, que permite ver la dispersión de los datos en las 9 variables a estudiar.

library(knitr)

matriz_cov <- cov(scale_data_CO)

matriz_cov_redondeada <- round(matriz_cov, 3)

kable(matriz_cov_redondeada, digits = 3)
PIB IPC Tasa Desempleo Exportaciones %PIB Importaciones %PIB Deuda externa %PNB PIB per capita Esperanza de vida Tasa de mortalidad infantil
PIB 1.000 -0.749 -0.712 0.240 0.443 -0.511 0.994 0.923 -0.867
IPC -0.749 1.000 0.544 -0.222 -0.282 0.280 -0.740 -0.659 0.680
Tasa Desempleo -0.712 0.544 1.000 -0.314 -0.692 0.311 -0.720 -0.797 0.644
Exportaciones %PIB 0.240 -0.222 -0.314 1.000 0.086 -0.566 0.321 0.043 0.148
Importaciones %PIB 0.443 -0.282 -0.692 0.086 1.000 0.019 0.410 0.597 -0.606
Deuda externa %PNB -0.511 0.280 0.311 -0.566 0.019 1.000 -0.585 -0.310 0.134
PIB per capita 0.994 -0.740 -0.720 0.321 0.410 -0.585 1.000 0.893 -0.813
Esperanza de vida 0.923 -0.659 -0.797 0.043 0.597 -0.310 0.893 1.000 -0.948
Tasa de mortalidad infantil -0.867 0.680 0.644 0.148 -0.606 0.134 -0.813 -0.948 1.000

Las librerias necesarias para realizar el PCA son:

matriz_cov <- cov(matriz_data_CO)

install.packages("factoextra")

install.packages("FactoMineR")

library("factoextra")

library("FactoMineR")

library(psych)

Se obtiene el PCA y la correlación de las variables

Se extraen los valores propios obtenidos al realizar el PCA para poder determinar con que dimensiones se realizara el análisis.

get_eigenvalue(Colombia_pca)
##         eigenvalue variance.percent cumulative.variance.percent
## Dim.1 5.4986820294     61.096466993                    61.09647
## Dim.2 1.6283601897     18.092890996                    79.18936
## Dim.3 0.9071827070     10.079807856                    89.26917
## Dim.4 0.5017461190      5.574956878                    94.84412
## Dim.5 0.2243812534      2.493125037                    97.33725
## Dim.6 0.1914416697      2.127129663                    99.46438
## Dim.7 0.0422535201      0.469483556                    99.93386
## Dim.8 0.0056278404      0.062531560                    99.99639
## Dim.9 0.0003246715      0.003607461                   100.00000
fviz_eig(Colombia_pca, addlabels=T)

Se puede observar tanto en la tabla como en el anterior gráfico que las componentes 1 y 2 son las más significativas ya que capturan el 79,2% de las varianzas de las variables.

fviz_pca_var(Colombia_pca,repel=T,colvar="cos2",col.var="contrib",
             alpha.var="contrib", gradient.cols=c('#FF0000','#FFF000','#00FF00'))

library("corrplot")

get_pca_var(Colombia_pca)
## Principal Component Analysis Results for variables
##  ===================================================
##   Name       Description                                    
## 1 "$coord"   "Coordinates for the variables"                
## 2 "$cor"     "Correlations between variables and dimensions"
## 3 "$cos2"    "Cos2 for the variables"                       
## 4 "$contrib" "contributions of the variables"
get_pca_coord <- as.matrix(get_pca_var(Colombia_pca)$coord[,1:3])

kable(get_pca_coord, digits = 3)
Dim.1 Dim.2 Dim.3
PIB 0.966 0.061 -0.192
IPC -0.773 -0.036 0.281
Tasa Desempleo -0.839 0.027 -0.392
Exportaciones %PIB 0.266 0.819 0.387
Importaciones %PIB 0.609 -0.371 0.642
Deuda externa %PNB -0.464 -0.759 0.126
PIB per capita 0.958 0.161 -0.173
Esperanza de vida 0.952 -0.214 -0.058
Tasa de mortalidad infantil -0.884 0.407 0.160
get_pca_cont <- as.matrix(get_pca_var(Colombia_pca)$contrib[,1:5])

kable(get_pca_cont, digits = 3)
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
PIB 16.968 0.228 4.075 0.635 0.265
IPC 10.881 0.081 8.679 54.778 1.654
Tasa Desempleo 12.811 0.045 16.975 0.013 56.624
Exportaciones %PIB 1.292 41.206 16.525 12.720 1.193
Importaciones %PIB 6.737 8.463 45.499 0.646 29.388
Deuda externa %PNB 3.908 35.407 1.745 26.935 3.149
PIB per capita 16.703 1.600 3.314 0.787 0.010
Esperanza de vida 16.484 2.811 0.366 3.033 2.907
Tasa de mortalidad infantil 14.216 10.159 2.821 0.455 4.810

Las siguientes graficas son utiles para determinar la viabilidad de eliminacion de dimensiones.

corrplot(get_pca_var(Colombia_pca)$cos2)

Se puede observar que la correlación entre las componentes principales (índice económicos) y cada concepto (en cada componente principal) es en Dim(1) donde la mayoría de las variables aportan un gran porcentaje; PIB, IPC, Tasa de Desempleo, PIB per cápita, Esperanza de vida y Tasa de mortalidad infantil. Mientras que la Dim(2) describe de mejor manera las Exportaciones como porcentaje del PIB y la Deuda externa como porcentaje del PIB. Mientras que las Importaciones como porcentaje del PIB este descrito mayormente en las Dim (1) y Dim (3).

colSums(get_pca_var(Colombia_pca)$contrib)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 
##   100   100   100   100   100
#gráfica para mirar la contibucion de las variables al pca

fviz_contrib(Colombia_pca, choice = "var", axes=1)

fviz_contrib(Colombia_pca, choice = "var", axes=2)

fviz_contrib(Colombia_pca, choice = "var", axes=3)

fviz_pca_biplot(Colombia_pca)