Importar base de datos

gdp_combo <- read.csv("C:/Users/Tania/Downloads/gdp_combo.csv")

Al importar la base de datos podemos notar que la misma contiene un total de 1785 observaciones y 8 variables. Limpiaremos esta base de datos para así poder aplicar técnicas de PCA para poder analizar los datos.

Preprocesamiento de los datos

data <- gdp_combo

summary(data)
##       year        country               tot              cpm        
##  Min.   :1820   Length:1785        Min.   :0.0005   Min.   :0.0005  
##  1st Qu.:1875   Class :character   1st Qu.:0.0075   1st Qu.:0.0075  
##  Median :1920   Mode  :character   Median :0.0184   Median :0.0184  
##  Mean   :1919                      Mean   :0.1004   Mean   :0.1004  
##  3rd Qu.:1965                      3rd Qu.:0.0582   3rd Qu.:0.0582  
##  Max.   :2009                      Max.   :0.8739   Max.   :0.8739  
##                                    NA's   :680      NA's   :680     
##      gdp_cp              pop               gdp             gdp_raw         
##  Min.   :0.008892   Min.   :0.01099   Min.   :0.00809   Min.   :4.130e+06  
##  1st Qu.:0.055038   1st Qu.:0.02973   1st Qu.:0.04998   1st Qu.:6.597e+07  
##  Median :0.107921   Median :0.04610   Median :0.08072   Median :2.008e+08  
##  Mean   :0.106443   Mean   :0.10644   Mean   :0.10644   Mean   :5.842e+08  
##  3rd Qu.:0.144783   3rd Qu.:0.09760   3rd Qu.:0.12173   3rd Qu.:5.800e+08  
##  Max.   :0.343846   Max.   :0.72414   Max.   :0.56355   Max.   :9.730e+09  
## 
colSums(is.na(data))
##    year country     tot     cpm  gdp_cp     pop     gdp gdp_raw 
##       0       0     680     680       0       0       0       0
data.limpia <- na.omit(data)

summary(data.limpia)
##       year        country               tot                cpm          
##  Min.   :1880   Length:1105        Min.   :0.000550   Min.   :0.000550  
##  1st Qu.:1908   Class :character   1st Qu.:0.007455   1st Qu.:0.007455  
##  Median :1935   Mode  :character   Median :0.018415   Median :0.018415  
##  Mean   :1935                      Mean   :0.100413   Mean   :0.100413  
##  3rd Qu.:1963                      3rd Qu.:0.058192   3rd Qu.:0.058192  
##  Max.   :1990                      Max.   :0.873909   Max.   :0.873909  
##      gdp_cp              pop               gdp              gdp_raw         
##  Min.   :0.008892   Min.   :0.01099   Min.   :0.009498   Min.   :8.461e+06  
##  1st Qu.:0.053702   1st Qu.:0.02926   1st Qu.:0.050901   1st Qu.:1.285e+08  
##  Median :0.088280   Median :0.04518   Median :0.082976   Median :2.341e+08  
##  Mean   :0.100453   Mean   :0.10045   Mean   :0.100453   Mean   :4.846e+08  
##  3rd Qu.:0.140416   3rd Qu.:0.11507   3rd Qu.:0.119145   3rd Qu.:5.334e+08  
##  Max.   :0.343846   Max.   :0.42320   Max.   :0.469154   Max.   :5.803e+09

Luego de limpiar la base de datos y eliminar aquellos que no contenían valores, nos quedamos con una base de datos de 1105 observaciones y las mismas 8 variables. De las 8 variables que tenemos en la base de datos, 7 son numéricas y 1 es carácter.

Aplicación del PCA:

Para aplicar PCA vamos a seguir los 5 pasos fundamentales para poder llevar a cabo el análisis de los datos.

#Paso 1: Estandarizar de los datos

data_estandarizada <- scale(data.limpia[, -2])
colMeans(data_estandarizada)
##          year           tot           cpm        gdp_cp           pop 
##  8.045914e-16 -2.722809e-17  5.651588e-18 -5.659123e-17 -2.216678e-17 
##           gdp       gdp_raw 
## -5.005423e-17  2.784663e-17

Al estandarizar los datos podemos obsarvar que las todas las medias se aproximan a 0, lo que nos da a entender que la estandarización de los datos fue una correcta.

#Paso 2: Matriz de covarianza

Calculamos la matriz de covarianza de los datos reales y de los datos estandarizados.

Datos reales

cov(data.limpia[, -2])
##                  year           tot           cpm        gdp_cp           pop
## year     1.019458e+03 -2.197884e-02 -2.197884e-02 -2.411224e-02 -2.411224e-02
## tot     -2.197884e-02  4.638976e-02  4.638976e-02  9.043945e-03 -2.452734e-03
## cpm     -2.197884e-02  4.638976e-02  4.638976e-02  9.043945e-03 -2.452734e-03
## gdp_cp  -2.411224e-02  9.043945e-03  9.043945e-03  4.249529e-03 -4.128384e-03
## pop     -2.411224e-02 -2.452734e-03 -2.452734e-03 -4.128384e-03  1.223412e-02
## gdp     -2.411224e-02  1.419985e-02  1.419985e-02  2.853903e-03  1.638256e-03
## gdp_raw  1.266151e+10  7.788618e+07  7.788618e+07  1.374343e+07  3.221929e+06
##                   gdp      gdp_raw
## year    -2.411224e-02 1.266151e+10
## tot      1.419985e-02 7.788618e+07
## cpm      1.419985e-02 7.788618e+07
## gdp_cp   2.853903e-03 1.374343e+07
## pop      1.638256e-03 3.221929e+06
## gdp      6.337097e-03 3.372109e+07
## gdp_raw  3.372109e+07 5.134668e+17

En los datos reales las varianzas son bastante similares.

Datos estandarizados

cov(data_estandarizada)
##                 year          tot          cpm      gdp_cp          pop
## year     1.000000000 -0.003196016 -0.003196016 -0.01158464 -0.006827575
## tot     -0.003196016  1.000000000  1.000000000  0.64413432 -0.102956329
## cpm     -0.003196016  1.000000000  1.000000000  0.64413432 -0.102956330
## gdp_cp  -0.011584638  0.644134317  0.644134318  1.00000000 -0.572563048
## pop     -0.006827575 -0.102956329 -0.102956330 -0.57256305  1.000000000
## gdp     -0.009486536  0.828185385  0.828185388  0.54995052  0.186058837
## gdp_raw  0.553407242  0.504653353  0.504653354  0.29421749  0.040651206
##                  gdp    gdp_raw
## year    -0.009486536 0.55340724
## tot      0.828185385 0.50465335
## cpm      0.828185388 0.50465335
## gdp_cp   0.549950524 0.29421749
## pop      0.186058837 0.04065121
## gdp      1.000000000 0.59115353
## gdp_raw  0.591153530 1.00000000

En los datos estandarizados, las varianzas quedan iguales.

#Paso 3: Componentes principales

Calcular las componentes principales

pca <- prcomp(data_estandarizada, scale = TRUE)
round(pca$rotation,3)
##            PC1    PC2    PC3    PC4    PC5    PC6    PC7
## year     0.068 -0.523  0.628  0.379 -0.400 -0.155  0.000
## tot      0.498  0.053 -0.151  0.438  0.151  0.111 -0.707
## cpm      0.498  0.053 -0.151  0.438  0.151  0.111  0.707
## gdp_cp   0.395  0.399  0.234 -0.331 -0.571  0.441  0.000
## pop     -0.086 -0.577 -0.588 -0.017 -0.365  0.424  0.000
## gdp      0.464 -0.137 -0.286 -0.346 -0.242 -0.711  0.000
## gdp_raw  0.349 -0.459  0.278 -0.493  0.526  0.265  0.000

Al realizar los componentes principales, concluimos que hay 7 componentes principales. Para interpretar el primer componente podemos decir que las variables tot, cpm, y gdp tienen pesos relativamente altos y positivos, lo que sugiere que este primer componente podría estar capturando una combinación de estas variables. Esto podría interpretarse como una medida general de crecimiento económico o de condiciones socioeconómicas. En el segundo componente principal, la variable pop tiene un peso negativo fuerte, lo que indica que el componente principal 2 podría estar relacionado inversamente con la población. Por otro lado, en el tercer componente principal la variable year tiene un peso positivo considerable en este componente, lo que podría sugerir una tendencia temporal o algún cambio relacionado con el tiempo. Finalmente en el componente principal 7 podemos ver que la mayoría de los resultados son 0 lo que nos indica que esas variables las cuales resultaron en 0 no aportan significativamente a este componente.

#Paso 4: Selección de las componentes principales

prop_varianza      <- pca$sdev^2 / sum(pca$sdev^2)
prop_varianza
## [1] 5.220309e-01 2.122330e-01 1.790627e-01 4.169917e-02 3.537618e-02
## [6] 9.598037e-03 5.347158e-16
prop_varianza_acum <- cumsum(prop_varianza)
round(prop_varianza_acum,2)
## [1] 0.52 0.73 0.91 0.96 0.99 1.00 1.00

El primer componente explica un 52% de la varianza, el segundo un 21% y el tercero un 17.9% y asi sucesivamente. Por lo cual con los primeros tres componentes ya se explica el 91% de la varianza de los datos.

Visualización

library(ggplot2)
ggplot(data = data.frame(prop_varianza_acum, pc = 1:7),
       aes(x = pc, y = prop_varianza_acum, group = 1)) +
        geom_point() +
        geom_line() +
        theme_bw() +
labs(x = "Componente principal", y = "Prop. varianza explicada acumulada")

En esta gráfica podemos observar que con tan solo 2 componentes se puede explicar aproximadamente un 74% de la varianza observada en los datos. Si queremos mas certeza de la explicación de los datos podemos utilizar los primeros 3 componentes ya que esos explican un 91% aproximadamente de la varianza de los datos.

library(corrplot)
## corrplot 0.95 loaded
correlacion <- cor(data.limpia[, -2])

corrplot(correlacion, method = "circle", type = "lower", tl.col = "black", tl.srt = 45)

En la gráfica de correlación podemos notar que mientras más grande y oscuro sea el círculo que representa la variable, la correlación es más alta, incluso es igual a 1. Mientras esa correlación va disminuyendo, el círculo y el tono de azul también. En la variable de población podemos notar una correlación negativa en tres ocasiones, la misma está demostrada con un tono rojo. Aquellas variables que no tienen ningun círculo, significan que no están correlacionadas a la variable.

#Paso 5: Transformar los datos al nuevo espacio dimensional

pca$rotation <- -pca$rotation
pca$x        <- -pca$x
biplot(pca, scale = 0, cex = 0.5, col = c("blue2", "red2"))

En esta gráfica podemos notar que hay mucha concentración de los datos presentados. La mayoría de los datos tienen en común el gdp_cp, el gdp_raw, el año y la población.

#Preguntas de análisis que deben responder:

  1. ¿Cuánta variabilidad explican cada componente principal?
  1. ¿Cuántas componentes principales son necesarias para entender el conjunto de datos?
  1. ¿Qué patrones o agrupaciones observan al proyectar los datos en estos componentes?
  1. ¿Cómo se relaciona el análisis de PCA con el contexto de los datos?