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: