Análisis No Supervisado de Factores que Inciden en la Esperanza de Vida ¿Qué Variables Marcan la Diferencia? Una Exploración Estadística de la Esperanza de Vida.
La esperanza de vida la podemos pensar como un indicador clave del desarrollo humano, ya que condensa múltiples dimensiones que conocemos como por ejemplo la salud pública, las condiciones sociales, económicas y ambientales de un país. Sin embargo, tratar de comprender qué variables están asociadas a este indicador y cómo se agrupan distintos países según sus características es un reto que no solo requiere herramientas analíticas adecuadas y precisas, sino que también requiere de una interpretación, un análisis y de cierta manera, trascender de ciertos conceptos.
Este trabajo va a hacer uso de técnicas de aprendizaje no supervisado para explorar posibles agrupaciones de países a partir de un conjunto de variables cuantitativas relacionadas con su nivel de vida, infraestructura, medio ambiente y desarrollo económico en gran parte con herramientas estadísticas como el Análisis de Componentes Principales (ACP) y la clusterización. En dónde, busca identificar patrones que permitan segmentar los países en grupos con características similares, sin partir de una clasificación previa simultáneamente a ir las nutriendo con interpretaciones y análisis.
Como base de datos utilizada retoma el enfoque del caso anterior, del cual ya se maneja una idea concisa, pero lo amplía significativamente en cantidad de variables y países, obtenida de la fuente Our World un Data correspondientes al año 2020. Se espera que el análisis permita una visión más global y estructurada de las condiciones asociadas a la esperanza de vida, y que a partir de las técnicas aplicadas y potenciadas aún más por conocimientos del profesor y nuestra interpretación con estas, sea posible generar agrupaciones útiles para su interpretación.
Este caso se enmarca y tiende al desarrollo de habilidades de análisis multivariado y exploración de datos no etiquetados, con el fin de obtener una comprensión más amplia y objetiva de los factores que pueden incidir en algo tan importante como lo es la calidad de vida entre países.
La metodología de este estudio se estructura en varias fases, abordando desde la recopilación y preparación de datos hasta la aplicación de técnicas avanzadas de análisis multivariado como el Análisis de Componentes Principales (ACP) y la Clusterización. El objetivo es identificar patrones y agrupar países con características similares que puedan influir en la expectativa de vida.
Los datos utilizados para este análisis provienen de diversas fuentes abiertas y confiables, principalmente de la plataforma Our World in Data y el Banco Mundial. Se recolectaron variables clave para el año 2020, con el objetivo de obtener una instantánea coherente de la situación global en ese período. Las bases de datos específicas consultadas incluyen información sobre Expectativa de Vida, PIB per Cápita, Población, Tasas de Mortalidad, Gasto en Salud, Mortalidad Infantil, Sin Acceso a Saneamiento Básico, Población Urbana vs. Rural, Acceso a Agua Potable, Índice de Desarrollo Humano (HDI), Emisiones de CO2 per cápita, Prevalencia de Diabetes, Porcentaje de adultos que fuman, Consumo total de Alcohol per cápita, Acceso a Electricidad.
El conjunto de datos integrado utilizado para el modelado comprende las siguientes variables:
Expect): Variable
cuantitativa que representa la expectativa de vida al nacer (en años).
Originalmente continua, será utilizada para generar una variable binaria
y posteriormente para el análisis de clusterización.GDP): Variable
cuantitativa que mide el Producto Interno Bruto por habitante, ajustado
por paridad de poder adquisitivo. Refleja el nivel de desarrollo
económico.Population): Variable
cuantitativa que representa el total de habitantes del país.Death_rate):
Variable cuantitativa que indica el número de muertes por cada 1000
habitantes.Care):
Variable cuantitativa que representa el gasto total en salud por
habitante.Infant): Variable
cuantitativa que indica la tasa de mortalidad de infantes (generalmente
por cada 1000 nacidos vivos).Sanitation):
Variable cuantitativa que mide el porcentaje de población sin acceso a
saneamiento mejorado. Nótese que esta variable indica la falta de
acceso.Rural): Variable
cuantitativa que indica el porcentaje de población que reside en áreas
rurales.Urban): Variable
cuantitativa que indica el porcentaje de población que reside en áreas
urbanas.Water):
Variable cuantitativa que mide el porcentaje de población con acceso a
servicios básicos de agua potable.Fertility):
Variable cuantitativa que indica el número promedio de hijos por
mujer.HDI):
Variable cuantitativa que mide el nivel de desarrollo humano (largo y
saludable de vida, acceso a conocimientos y un nivel de vida
decente).CO2): Variable
cuantitativa que representa las emisiones de dióxido de carbono per
cápita.Diabetes):
Variable cuantitativa que indica el porcentaje de la población entre 20
y 79 años con diabetes.Smoke): Variable
cuantitativa que mide el porcentaje de adultos que fuman o usan
tabaco.Alcohol): Variable
cuantitativa que indica el consumo total de alcohol puro per cápita
(litros) por personas de 15 años o más.Electricity):
Variable cuantitativa que mide el porcentaje de la población con acceso
a electricidad.La etapa de procesamiento de datos fue crucial para consolidar la información y adecuarla a los requisitos de los modelos de clasificación y las técnicas de análisis multivariado.
Primero, se cargaron las múltiples bases de datos descargadas,
filtrándolas para el año 2020. Posteriormente, se
unieron en un único dataframe (bd_final) utilizando
operaciones de left_join basadas en el
Country y Year. Este proceso permitió
integrar toda la información relevante en una sola estructura.
Tras la unión, se procedió a la limpieza de datos. Se optó por
eliminar las filas que presentaban valores faltantes
(NA) en cualquiera de las variables clave para asegurar
que los modelos se entrenaran y los análisis se realizaran con un
conjunto de datos completo y consistente. Adicionalmente, se eliminó una
fila específica (bd_final[-144,]) que se identificó como un
posible outlier o un dato anómalo que podía distorsionar los análisis
posteriores (Una de las bases de datos contenia un “País” llamado
“World” el cual afectaba nuestros resultados así que
decidimos eliminarlo).
# Cargamos las bases de datos con "readr y las indexamos a su repectiva variable"
bd_expec <- read.csv("life-expectancy.csv")
bd_gdp <- read.csv("gdp-per-capita-worldbank.csv")
bd_pop <- read.csv("population.csv")
bd_death <- read.csv("death-rate.csv")
bd_care <- read.csv("annual-healthcare-expenditure-per-capita.csv")
bd_inf <- read.csv("infant-mortality.csv")
bd_san <- read.csv("number-without-access-to-improved-sanitation.csv")
bd_uvr <- read.csv("urban-vs-rural-majority.csv")
bd_water <- read.csv("population-using-at-least-basic-drinking-water.csv")
bd_fert <- read.csv("Fertility-rate.csv")
bd_hdi <- read.csv("human-development-index.csv")
bd_co2 <- read.csv("co-emissions-per-capita.csv")
bd_diab <- read.csv("diabetes-prevalence.csv")
bd_smk <- read.csv("share-of-adults-who-smoke.csv")
bd_alh <- read.csv("total-alcohol-consumption-per-capita-litres-of-pure-alcohol.csv")
bd_elec <- read.csv("share-of-the-population-with-access-to-electricity.csv")
# Filtramos las bases de datos
bd_expec_1 <- bd_expec %>%
select(Entity, Year, Period.life.expectancy.at.birth...Sex..total...Age..0) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Expect = Period.life.expectancy.at.birth...Sex..total...Age..0
)
bd_gdp_1 <- bd_gdp %>%
select(Entity, Year, GDP.per.capita..PPP..constant.2021.international...) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
GDP = GDP.per.capita..PPP..constant.2021.international...
)
bd_pop_1 <- bd_pop %>%
select(Entity, Year, Population..historical.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Population = Population..historical.
)
bd_death_1 <- bd_death %>%
select(Entity, Year, Death.rate...Sex..all...Age..all...Variant..estimates) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Death_rate = Death.rate...Sex..all...Age..all...Variant..estimates
)
bd_care_1 <- bd_care %>%
select(Entity, Year, Current.health.expenditure.per.capita..PPP..current.international...) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Care = Current.health.expenditure.per.capita..PPP..current.international...
)
bd_inf_1 <- bd_inf %>%
select(Entity, Year, Observation.value...Indicator..Infant.mortality.rate...Sex..Total...Wealth.quintile..Total...Unit.of.measure..Deaths.per.100.live.births) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Infant = Observation.value...Indicator..Infant.mortality.rate...Sex..Total...Wealth.quintile..Total...Unit.of.measure..Deaths.per.100.live.births
)
bd_san_1 <- bd_san %>%
select(Entity, Year, The.totalpopulation.not.using.improved.sanitation.facilities) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Sanitation = The.totalpopulation.not.using.improved.sanitation.facilities
)
bd_uvr_1 <- bd_uvr %>%
select(Entity, Year, Share.of.population.residing.in.rural.areas..HYDE.estimates.and.UN.projections., Share.of.population.residing.in.urban.areas..HYDE.estimates.and.UN.projections.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Rural = Share.of.population.residing.in.rural.areas..HYDE.estimates.and.UN.projections.,
Urban = Share.of.population.residing.in.urban.areas..HYDE.estimates.and.UN.projections.
)
bd_water_1 <- bd_water %>%
select(Entity, Year, Share.of.the.population.using.at.least.basic.drinking.water.services) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Water = Share.of.the.population.using.at.least.basic.drinking.water.services,
)
bd_fert_1 <- bd_fert %>%
select(Entity, Year, Fertility.rate...Sex..all...Age..all...Variant..estimates) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Fertility = Fertility.rate...Sex..all...Age..all...Variant..estimates
)
bd_hdi_1 <- bd_hdi %>%
select(Entity, Year, Human.Development.Index) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
HDI = Human.Development.Index
)
bd_co2_1 <- bd_co2 %>%
select(Entity, Year, Annual.CO..emissions..per.capita.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
CO2 = Annual.CO..emissions..per.capita.
)
bd_diab_1 <- bd_diab %>%
select(Entity, Year, Diabetes.prevalence....of.population.ages.20.to.79.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Diabetes = Diabetes.prevalence....of.population.ages.20.to.79.
)
bd_smk_1 <- bd_smk %>%
select(Entity, Year, Share.of.adults.who.smoke.or.use.tobacco..age.standardized.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Smoke = Share.of.adults.who.smoke.or.use.tobacco..age.standardized.
)
bd_alh_1 <- bd_alh %>%
select(Entity, Year, Total.alcohol.consumption.per.capita..liters.of.pure.alcohol..projected.estimates..15..years.of.age.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Alcohol = Total.alcohol.consumption.per.capita..liters.of.pure.alcohol..projected.estimates..15..years.of.age.
)
bd_elec_1 <- bd_elec %>%
select(Entity, Year, Access.to.electricity....of.population.) %>%
filter(Year == "2020") %>%
rename(
Country = Entity,
Electricity = Access.to.electricity....of.population.
)
# Unimos las bases manteniendo todos los países y años
bd_final <- bd_gdp_1 %>%
left_join(bd_expec_1, by = c("Country", "Year")) %>%
left_join(bd_pop_1, by = c("Country", "Year")) %>%
left_join(bd_death_1, by = c("Country", "Year")) %>%
left_join(bd_care_1, by = c("Country", "Year")) %>%
left_join(bd_inf_1, by = c("Country", "Year")) %>%
left_join(bd_san_1, by = c("Country", "Year")) %>%
left_join(bd_uvr_1, by = c("Country", "Year")) %>%
left_join(bd_water_1, by = c("Country", "Year")) %>%
left_join(bd_fert_1, by = c("Country", "Year")) %>%
left_join(bd_hdi_1, by = c("Country", "Year")) %>%
left_join(bd_co2_1, by = c("Country", "Year")) %>%
left_join(bd_diab_1, by = c("Country", "Year")) %>%
left_join(bd_smk_1, by = c("Country", "Year")) %>%
left_join(bd_alh_1, by = c("Country", "Year")) %>%
left_join(bd_elec_1, by = c("Country", "Year")) %>%
filter(!is.na(Fertility) & !is.na(Electricity) & !is.na(Alcohol) & !is.na(Smoke) & !is.na(Diabetes) & !is.na(CO2) & !is.na(Water) & !is.na(Urban) & !is.na(Rural) & !is.na(Sanitation) & !is.na(Infant) & !is.na(Care) & !is.na(Population) & !is.na(Death_rate) & !is.na(HDI) & !is.na(GDP) ) %>%
distinct(Country, .keep_all = TRUE)
bd_final_1 <- bd_final[-144, ]
#view(bd_final_1)
Posteriormente, la variable Expect (Expectativa de Vida)
fue transformada en una variable objetivo binaria:
Expect_high. Se definió que un país tiene “Alta
Expectativa de Vida” (Expect_high = "Si") si su
expectativa de vida original (Expect) es mayor a 72
años, y “Baja Expectativa de Vida”
(Expect_high = "No") si es menor o igual a 72 años. Esta
dicotomización se basó en la mediana de la expectativa de vida para el
año 2020 en el conjunto de datos, con el fin de obtener una distribución
balanceada de las clases.
# Creación de la variable objetivo binaria (Esperanza de Vida Alta)
bd_final_2 <- bd_final_1 %>%
mutate(Expect_high = ifelse(Expect > 72, "Si", "No"))
bd_final_2$Expect_high <- factor(bd_final_2$Expect_high, levels = c("No", "Si"))
Para el Análisis de Componentes Principales y la Clusterización, se
seleccionaron las variables cuantitativas de interés. Se estableció la
columna Country como nombres de las filas en el dataframe
data_for_analysis y luego se eliminó como una columna
regular para que los análisis se centraran en los valores numéricos. Las
variables seleccionadas (GDP, Population,
Death_rate, Care, Infant,
Sanitation, Rural, Urban,
Water, Fertility, HDI,
CO2, Diabetes, Smoke,
Alcohol, Electricity) se escalaron para
asegurar que todas tuvieran el mismo peso en el cálculo de distancias y
en la varianza explicada por los componentes principales. El escalado
(centrado en media 0 y desviación estándar 1) es crucial en ACP para
evitar que las variables con rangos de valores más grandes dominen los
componentes.
# Preparación de datos para PCA y Clustering
data_for_analysis <- bd_final_2
# Establecer la columna 'Country' como nombres de las filas y luego eliminarla
rownames(data_for_analysis) <- data_for_analysis$Country
data_for_analysis$Country <- NULL
# Definir explícitamente las variables explicativas para PCA.
vars_for_pca <- c("GDP", "Population", "Death_rate", "Care", "Infant", "Sanitation",
"Rural", "Urban", "Water", "Fertility", "HDI", "CO2", "Diabetes",
"Smoke", "Alcohol", "Electricity")
numerical_data_for_pca_clustering <- data_for_analysis %>%
select(all_of(vars_for_pca))
# Escalar los datos numéricos.
bd_scaled_for_pca_clustering <- scale(numerical_data_for_pca_clustering)
bd_scaled_for_pca_clustering <- as.data.frame(bd_scaled_for_pca_clustering)
rownames(bd_scaled_for_pca_clustering) <- rownames(numerical_data_for_pca_clustering)
Al final de este proceso, contamos con el dataframe
bd_scaled_for_pca_clustering, que contiene las variables
numéricas estandarizadas y listas para el análisis de componentes
principales y la clusterización, y bd_final_2, que mantiene
la variable objetivo binaria para futuras referencias en la
interpretación de los clusters.
Análisis de Componentes Principales (ACP)
El Análisis de Componentes Principales (ACP) es una técnica de reducción de dimensionalidad que transforma un conjunto de variables posiblemente correlacionadas en un nuevo conjunto de variables no correlacionadas llamadas componentes principales. Estas componentes son combinaciones lineales de las variables originales y se construyen de manera que la primera componente principal explica la mayor cantidad posible de varianza en los datos, la segunda componente explica la mayor varianza restante y así sucesivamente.
El objetivo del ACP en este estudio es:
La aplicación del ACP se realizó utilizando la función
prcomp() en los datos escalados, lo que asegura que todas
las variables contribuyan equitativamente al análisis.
Clusterización (Agrupamiento)
La clusterización es una técnica de aprendizaje no supervisado cuyo objetivo es agrupar un conjunto de objetos de tal manera que los objetos en el mismo grupo (llamado cluster) sean más similares entre sí que a los de otros grupos. En este estudio, la clusterización se aplica sobre las componentes principales obtenidas del ACP, lo que permite agrupar países basándose en sus características multivariadas subyacentes.
Para determinar el número óptimo de clusters, se utilizaron métodos como el de la suma de cuadrados intra-cluster (método del codo o WSS) y el coeficiente de silueta. Estos métodos gráficos ayudan a identificar un número de clusters que equilibre la compacidad dentro de los grupos y la separación entre ellos.
La implementación de la clusterización se realizó utilizando la
función FactoClass del paquete FactoClass, que
integra el ACP (mediante dudi.pca de ade4) con
métodos de clusterización jerárquica. Esto permite que la agrupación se
realice directamente sobre las componentes principales, lo que es
ventajoso porque las componentes ya han reducido el ruido y la
redundancia de los datos originales. La interpretación de los clusters
se centrará en analizar las medias de las variables originales para cada
grupo, lo que permite caracterizar el perfil de los países dentro de
cada cluster.
En esta sección, se presentan los resultados del análisis descriptivo de las variables originales y los hallazgos del Análisis de Componentes Principales (ACP), que busca reducir la dimensionalidad de los datos y extraer los factores subyacentes que describen las similitudes entre países.
Primero, se visualizan las estadísticas descriptivas de las variables
originales en el dataframe bd_final_1. Esto nos permite
entender la distribución original, rangos, medias, medianas y la
dispersión de cada variable antes de cualquier transformación.
DT::datatable(bd_final_2)
summary(bd_final_2)
## Country Year GDP Expect
## Length:145 Min. :2020 Min. : 833.9 Min. :53.07
## Class :character 1st Qu.:2020 1st Qu.: 5963.2 1st Qu.:66.92
## Mode :character Median :2020 Median : 14801.3 Median :72.38
## Mean :2020 Mean : 25004.5 Mean :72.26
## 3rd Qu.:2020 3rd Qu.: 41372.8 3rd Qu.:78.25
## Max. :2020 Max. :130689.5 Max. :84.67
## Population Death_rate Care Infant
## Min. :7.740e+04 Min. : 1.053 Min. : 44.61 Min. :0.1653
## 1st Qu.:3.796e+06 1st Qu.: 6.341 1st Qu.: 246.00 1st Qu.:0.4769
## Median :1.087e+07 Median : 7.519 Median : 873.72 Median :1.2497
## Mean :5.138e+07 Mean : 8.156 Mean : 1865.47 Mean :1.9307
## 3rd Qu.:3.817e+07 3rd Qu.: 9.502 3rd Qu.: 2907.32 3rd Qu.:3.1770
## Max. :1.426e+09 Max. :17.899 Max. :11758.42 Max. :8.0342
## Sanitation Rural Urban Water
## Min. : 0 Min. : 0.00 Min. : 10.64 Min. : 35.50
## 1st Qu.: 2510 1st Qu.:24.21 1st Qu.: 41.97 1st Qu.: 83.97
## Median : 250809 Median :35.51 Median : 64.49 Median : 96.00
## Mean : 7008926 Mean :40.35 Mean : 59.65 Mean : 89.06
## 3rd Qu.: 3890492 3rd Qu.:58.03 3rd Qu.: 75.79 3rd Qu.: 99.81
## Max. :233385900 Max. :89.36 Max. :100.00 Max. :100.00
## Fertility HDI CO2 Diabetes
## Min. :0.812 Min. :0.3910 Min. : 0.04481 Min. : 1.100
## 1st Qu.:1.575 1st Qu.:0.6090 1st Qu.: 0.94005 1st Qu.: 5.500
## Median :2.051 Median :0.7420 Median : 2.37934 Median : 6.800
## Mean :2.522 Mean :0.7308 Mean : 4.47544 Mean : 8.161
## 3rd Qu.:3.234 3rd Qu.:0.8610 3rd Qu.: 6.11448 3rd Qu.:10.400
## Max. :6.369 Max. :0.9630 Max. :36.56411 Max. :30.800
## Smoke Alcohol Electricity Expect_high
## Min. : 3.60 Min. : 0.000 Min. : 9.10 No:68
## 1st Qu.:11.60 1st Qu.: 1.930 1st Qu.: 85.40 Si:77
## Median :19.70 Median : 4.580 Median : 99.90
## Mean :19.67 Mean : 5.433 Mean : 85.71
## 3rd Qu.:26.10 3rd Qu.: 9.160 3rd Qu.:100.00
## Max. :45.90 Max. :16.800 Max. :100.00
El summary(bd_final_2) proporciona una visión detallada
de las 17 variables cuantitativas utilizadas en el
análisis, junto con la variable Expect_high que es de tipo
factor. La Expectativa de Vida (Expect) original muestra
una media de aproximadamente 72.26 años y una mediana
de 72.38 años, con un rango que va desde 53.0
hasta 84.0 años. La variable dicotomizada
Expect_high revela una distribución relativamente
equilibrada, con 68 países clasificados como
“No” (esperanza de vida \(\leq\) 72 años) y 77
países como “Si” (esperanza de vida \(>\) 72 años).
Variables como GDP (PIB per cápita),
Population, Care (gasto en salud) y
CO2 (emisiones de CO2) muestran una gran variabilidad y
asimetría positiva, indicando la presencia de algunos países con valores
excepcionalmente altos que elevan la media. Por ejemplo, el
GDP tiene una media de 25,004 USD y una
mediana de 14,801 USD, y Population una
media de 51.3 millones con una mediana de 10.8
millones, lo que subraya las vastas diferencias económicas y
demográficas entre las naciones.
Por otro lado, variables como Death_rate (tasa de
mortalidad), Infant (mortalidad infantil),
Fertility (tasa de fertilidad), Diabetes,
Smoke, y Alcohol exhiben rangos considerables,
reflejando las diversas condiciones de salud y hábitos de vida a nivel
global. Las variables relacionadas con servicios básicos como
Water (acceso a agua) y Electricity (acceso a
electricidad) tienden a tener medias más altas, sugiriendo un mayor
nivel de acceso global, aunque Sanitation (población sin
saneamiento) muestra que aún hay una parte significativa de la población
sin este servicio. Finalmente, el HDI (Índice de Desarrollo
Humano) presenta un rango de 0.391 a 0.963, lo que
reafirma las brechas en el desarrollo humano entre los países. Estas
estadísticas descriptivas iniciales son cruciales para entender la
naturaleza de los datos antes de aplicar técnicas de reducción de
dimensionalidad y clusterización.
El ACP se realizó sobre las variables cuantitativas escaladas
(bd_scaled_for_pca_clustering). Este proceso permite
identificar las dimensiones principales de variabilidad en los
datos.
Eigenvalores y Varianza Explicada
El primer paso en el ACP es examinar los eigenvalores (o valores propios), que representan la cantidad de varianza explicada por cada componente principal. Un gráfico de eigenvalores (scree plot) es útil para determinar el número óptimo de componentes a retener.
# --- Análisis de Componentes Principales (ACP) ---
res.pca <- prcomp(bd_scaled_for_pca_clustering, scale. = FALSE)
print(res.pca)
## Standard deviations (1, .., p=16):
## [1] 2.702513e+00 1.454028e+00 1.340058e+00 1.177942e+00 9.703681e-01
## [6] 8.055535e-01 6.573272e-01 6.107524e-01 5.291845e-01 4.501027e-01
## [11] 4.224194e-01 3.814411e-01 2.866463e-01 2.683603e-01 2.062803e-01
## [16] 1.439498e-07
##
## Rotation (n x k) = (16 x 16):
## PC1 PC2 PC3 PC4 PC5
## GDP 0.29996509 0.003269210 -0.09824050 -0.292396755 -0.37179302
## Population -0.01750718 0.216486332 0.62202781 -0.281916144 0.07568461
## Death_rate 0.05091832 -0.525502593 0.28501769 0.176469345 -0.01811076
## Care 0.29102315 -0.133337087 -0.03557921 -0.290127116 -0.28533864
## Infant -0.32736959 -0.068974489 -0.04196973 -0.149886167 0.02060852
## Sanitation -0.11720507 0.163070694 0.56939195 -0.348915781 0.02020923
## Rural -0.29666182 0.074532245 0.08826836 0.206733341 -0.41904706
## Urban 0.29666182 -0.074532264 -0.08826835 -0.206733356 0.41904705
## Water 0.31929007 0.129099182 0.05983112 0.174144129 0.22346908
## Fertility -0.32428236 -0.046819470 -0.13414833 -0.163801511 -0.06417640
## HDI 0.35907069 0.007065494 0.02490481 -0.003084529 -0.08351136
## CO2 0.22051795 0.263108387 -0.15370687 -0.254169857 -0.39710999
## Diabetes 0.05718356 0.524530027 0.01072630 0.247622564 -0.13507968
## Smoke 0.13157775 -0.059588455 0.30364138 0.498882593 -0.32485409
## Alcohol 0.17085189 -0.471077410 0.16720859 -0.062467416 -0.18413413
## Electricity 0.30176944 0.167333546 0.11525864 0.232712088 0.21413093
## PC6 PC7 PC8 PC9 PC10
## GDP -0.04977622 -0.144851576 -0.0282573159 -0.23014706 -0.10146724
## Population 0.03058685 -0.065694365 0.0598521072 0.07244036 0.48496966
## Death_rate -0.20431927 0.402574862 0.3132922844 -0.44450042 0.18662517
## Care -0.07627910 -0.256814557 -0.3192450090 -0.39900202 0.09672363
## Infant -0.26364864 0.077332894 0.1321260800 -0.27518723 -0.20138278
## Sanitation -0.02457644 0.018047622 -0.0531164917 -0.03899968 -0.49727420
## Rural 0.39188298 -0.008327168 0.0011002802 -0.15750554 0.02246124
## Urban -0.39188299 0.008327125 -0.0011002766 0.15750552 -0.02246121
## Water 0.20780617 0.030497372 0.1415143731 -0.28416903 -0.13563264
## Fertility -0.20515643 0.014318425 -0.0007093787 -0.07776939 -0.36607004
## HDI 0.10510000 -0.034764089 -0.0617629123 -0.03868929 0.01397385
## CO2 -0.03842500 0.329696160 0.6282709455 0.24822711 -0.02101180
## Diabetes -0.37918363 0.519417664 -0.4500418840 -0.13764035 0.07512236
## Smoke -0.47086005 -0.428426737 0.1194681726 0.25931693 -0.16575182
## Alcohol 0.20398723 0.418301961 -0.3572402476 0.43466602 -0.21168561
## Electricity 0.25858749 0.029552369 0.1107787831 -0.18192900 -0.43647527
## PC11 PC12 PC13 PC14 PC15
## GDP -0.101554602 -0.161696289 -0.574918088 -0.471260536 0.005951974
## Population 0.413640313 0.082904718 -0.042313224 -0.217332266 -0.066571113
## Death_rate -0.199414533 0.171373779 -0.019058266 -0.062118571 0.028605268
## Care 0.169680813 0.084217079 0.453574026 0.261757777 0.279804734
## Infant 0.362931273 -0.638112983 0.172679808 -0.023066758 -0.291428631
## Sanitation -0.445210729 -0.023576976 -0.003475275 0.243638807 0.051176144
## Rural 0.013960636 -0.006510961 0.003938517 0.022921160 -0.023932924
## Urban -0.013960579 0.006510950 -0.003938466 -0.022921175 0.023932828
## Water 0.368824323 -0.065414734 -0.453634330 0.532694991 0.066304547
## Fertility 0.378515734 0.691237875 -0.144037884 -0.037122206 -0.134701921
## HDI -0.123709250 0.130918372 0.141232587 0.108660099 -0.883999894
## CO2 0.051761394 0.031260715 0.188202993 0.143331955 0.098192912
## Diabetes 0.001640399 0.005329352 -0.023267385 -0.024556711 0.006589290
## Smoke 0.115340296 -0.044836206 -0.009531761 0.052393951 0.011158596
## Alcohol 0.292941592 -0.127265634 -0.047088064 -0.002371292 0.030691337
## Electricity 0.152641759 0.065190664 0.383376071 -0.525846728 0.113930896
## PC16
## GDP -7.380115e-09
## Population 3.591416e-08
## Death_rate -2.050252e-09
## Care 2.332889e-08
## Infant 4.932616e-08
## Sanitation -2.825998e-08
## Rural -7.071068e-01
## Urban -7.071068e-01
## Water -1.822208e-08
## Fertility 1.151657e-08
## HDI 5.869170e-08
## CO2 -1.036826e-08
## Diabetes -1.799469e-08
## Smoke 1.532356e-08
## Alcohol -8.050902e-09
## Electricity 1.076529e-09
El print(res.pca) muestra la desviación estándar de cada
componente principal y la matriz de rotación (loadings), que indica cómo
las variables originales contribuyen a cada componente.
En este apartado analizamos los componentes principales, estos están ordenados de mayor a menor desviación estándar, es decir, de mayor a menor varianza explicada. Por ejemplo, PC1 tiene la desviación estándar más alta, lo que significa que explica la mayor cantidad de variabilidad en los datos. Para la Rotación (n x k) analizaremos los dos primeros componentes principales.
Para el PC1, observamos que las variables con cargas positivas altas
son HDI (0.359), Electricity
(0.302), GDP (0.300),
Water (0.319) y Care
(0.291); mientras que las variables con cargas
negativas altas son Infant (-0.327),
Fertility (-0.324) y Rural
(-0.297). Esto agrupa estas variables en cada extremo
del PC1, más adelante Dim 1, sugiriendo un nombre o etiqueta para este
como puede ser “Desarrollo”,
“Prosperidad” o “Modernización”.
Para el PC2, observamos que las variables con cargas positivas altas
son Diabetes (0.525),
Population (0.216),
Sanitation (0.163) y CO2
(0.263); mientras que las variables con cargas
negativas altas son Death_rate (-0.525) y
Alcohol (-0.471). Esto agrupa estas
variables en cada extremo del PC2, más adelante Dim 2, sugiriendo un
nombre o etiqueta para este como puede ser “Desarrollo
Acelerado”, “Sobrepoblación” o
“Enfermedades de la modernización”.
# Gráfico interactivo de los eigenvalores
eig_plot <- fviz_eig(res.pca, addlabels = TRUE, ylim = c(0, 50))
ggplotly(eig_plot)
El gráfico interactivo de los eigenvalores (eig_plot)
permite observar visualmente la “regla del codo”, donde la pendiente de
la curva disminuye bruscamente. En este caso, el codo parece situarse
después del segundo o tercer componente, sugiriendo que retener los dos
o tres primeros componentes sería razonable para capturar la mayor parte
de la información relevante con una reducción significativa de la
dimensionalidad.
Visualización de Individuos (Países)
El gráfico de individuos proyecta los países en el plano formado por
las dos primeras componentes principales. La coloración por
cos2 (calidad de representación) permite identificar qué
países están mejor representados por este plano.
# Gráfico interactivo de los individuos (países)
ind_plot <- fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
label = "ind",
geom = "point",
pointsize = 2 # Tamaño de los puntos
)
# fviz_pca_ind genera un ggplot.
ind_plot_interactive <- ind_plot +
geom_text(aes(label = rownames(res.pca$x)), size = 3, vjust = -1, hjust = 0, check_overlap = TRUE) +
labs(title = "Individuos (Países) en el plano principal - Interactivo")
ggplotly(ind_plot_interactive, tooltip = c("label", "x", "y", "col.ind"))
Al momento de analizar el gráfico Individuos (Países) en el Plano Principal, podemos corregir y etiquetar correctamente cada dimensión pues podemos agrupar las características de cada país en el contexto histórico, geográfico y geopolítico.
Si analizamos solo teniendo en cuenta la Dim1 obtenemos la confirmación de que “Modernización” es un buen nombre para esta dimensión ya que en el extremo derecho (Altos PC1): Qatar, Kuwait, Arabia Saudita, EAU, Singapur, Australia, Estados Unidos, Canadá, Europa Occidental, Japón, Corea del Sur, Luxemburgo. Son claramente los países más desarrollados y prósperos. Mientras que en el extremo izquierdo (Bajos PC1): Níger, Burkina Faso, Chad, Etiopía, Burundi, R.D. del Congo, Madagascar, Afganistán, Somalia, Yemen, Sierra Leona, Lesoto (África mayormente). Son los países con menor desarrollo, alta mortalidad infantil, alta natalidad y ruralidad.
Por otra parte tenemos la Dim2 en la cual encontramos algo muy interesante, en la parte superior tenemos a países como India, Pakistán, China, Bangladesh, Indonesia, Egipto, Bahréin, Malasia. Los cuales son grandes países, muchos de ellos en desarrollo acelerado, que enfrentan la presión de grandes poblaciones sobre sus infraestructuras de saneamiento y, en algunos casos, el aumento de enfermedades relacionadas con la dieta moderna como la diabetes. Son estas economías emergentes que se modernizan rápidamente. En la parte inferior encontramos a países como Rusia, Bielorrusia, Ucrania, Moldavia, Georgia, Armenia. Estos países, muchos de ellos ex-repúblicas soviéticas, muestran un patrón distinto de salud pública con tasas de mortalidad más altas y prevalencia de consumo de alcohol, mostrando cierta inseguridad, que no está directamente ligado a su nivel de desarrollo en el eje 1.
Ahora analizando esto como grupo proponemos un nombre más adecuado
para la Dim2: “Crecimiento acelerado”, en el extremo
positivo tenemos a Diabetes, la cual está fuertemente
asociada con cambios en la dieta y estilos de vida sedentarismo que
acompañan al desarrollo económico y la urbanización en países que
experimentan un rápido crecimiento, también está
Population pues países con muy alta población como
India, China e
Indonesia son a menudo los que están experimentando un
crecimiento económico y demográfico
masivo; además, está Sanitation pues si un país
está creciendo rápidamente en población y urbanización, incluso si está
invirtiendo en infraestructura, el número absoluto de personas sin
acceso a saneamiento adecuado puede seguir siendo alto debido al rápido
crecimiento. Esto apunta a los desafíos de infraestructura que acompañan
al crecimiento acelerado si no se mantienen al ritmo de la
población.
Por otro lado, en el extremo negativo tenemos a
Death_rate, una alta tasa de mortalidad por cualquier causa
puede indicar problemas de salud sistémicos, acceso limitado a atención
médica básica, o crisis de salud pública que no se resuelven fácilmente
y Alcohol pues está ligada a problemas de salud pública y
sociales que pueden ser persistentes en regiones con economías
estancadas o en transición difícil.
Entonces el gráfico tendría las siguientes etiquetas:
# Gráfico interactivo de los individuos (países)
ind_plot <- fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
label = "ind",
geom = "point",
pointsize = 2 # Tamaño de los puntos
)
# fviz_pca_ind genera un ggplot.
ind_plot_interactive <- ind_plot +
geom_text(aes(label = rownames(res.pca$x)), size = 3, vjust = -1, hjust = 0, check_overlap = TRUE) +
xlab("Modernización (45.6%)") +
ylab("Crecimiento Acelerado (13.2%)") +
labs(title = "Individuos (Países) en el plano principal - Interactivo")
ggplotly(ind_plot_interactive, tooltip = c("label", "x", "y", "col.ind")) # Asegurarse de que el tooltip muestre el país, CP1 y CP2
La ubicación de los países en el plano refuerza los nombres y apoya a las ideas propuestas:
En el primer cuadrante (alto PC1 y PC2): Países como China, Bahrein, Arabia Saudí, Qatar, Kuwait o Emiratos Árabes Unidos son ejemplos de países que están lo suficientemente desarrollados y tienen un gran crecimiento económico pues su influencia geopolítica, desarrollo tecnológico o recursos naturales les han permitido posicionarse en estos lugares.
En el segundo cuadrante (bajo PC1 y alto PC2): Países como India, Pakistán, Bangladesh y Egipto son ejemplos de países que no están muy desarrollados en el presente pero que experimentan un crecimiento acelerado en su economía, población y desarrollo con los desafíos y características asociadas (diabetes, emisiones, y quizás la brecha en saneamiento para una población en expansión).
En el tercer cuadrante (Bajo PC1 y bajo PC2): Países como Chad, Burkina, Faso, Benin y gran parte de África, junto a Haití, son ejemplos de países con un bajo crecimiento actual y un desarrollo precario debido a diferentes factores como lo es el bajo desarrollo de áfrica en general, guerras civiles y corrupción.
En el cuarto cuadrante (Alto PC1 y bajo PC2): Países como Rusia, Bielorrusia, Ucrania, Moldavia, Georgia, Armenia e, increíblemente, Estados Unidos y Europa en general. Son países que según este orden de ideas son desarrollados que están estancados o tienen un crecimiento menor que otros; países que a menudo son referidos como la “antigua Unión Soviética” o la “Europa del Este” se han enfrentado (o aún enfrentan) períodos de estancamiento económico, transición política compleja, y arrastran problemas de salud pública (como altas tasas de alcoholismo y mortalidad) que se vieron agravados o no resueltos tras la disolución de la URSS. Mientras que países como Estados Unidos y Europa en general se ve este crecimiento constante pero más lento que China o Qatar por ejemplo, por ende, se posicionan en estos lugares y buscan no quedarse atrás o verse superados por las potencias emergentes, por algo en las elecciones Estados Unidos ganó el eslogan “Make America great again”.
# Gráfico interactivo de las variables
var_plot <- fviz_pca_var(res.pca,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = FALSE,
axes = c(1,2),
labelsize = 4
)
var_plot_interactive <- var_plot +
xlab("Modernización (45.6%)") +
ylab("Crecimiento acelerado (13.2%)") +
labs(title = "Círculo de Correlación de Variables - Interactivo")
ggplotly(var_plot_interactive, tooltip = c("label", "x", "y", "col.var"))
# 2. Círculo de correlación de variables (equivalente a s.corcircle(dudi_resultado$co))
var_plot_factoextra <- fviz_pca_var(dudi_resultado,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
axes = c(1,2),
labelsize = 4
) +
xlab("Modernización (45.6%)") +
ylab("Crecimiento Acelerado (13.2%)") +
labs(title = "Círculo de Correlación de Variables") +
theme_minimal()
print(var_plot_factoextra)
Ahora analizaremos el Círculo de Correlación de Variables, en el eje
horizontal tenemos la Dim1 que corresponde a
“Modernización” (descartamos desarrollo pues es igual
que HDI que ya es una variable). Observamos como las variables que están
más cercanas al eje y están en colores más rojizos corresponden a
aquellas variables que más aportaron en Rotation (n x
k). Observamos flechas apuntando a la derecha:
HDI, GDP, Electricity,
Water, Care, Urban,
CO2, Smoke, que indican claramente esa
“Mayor modernización” a pesar de que el gráfico
no distingue los extremos de mayor o menor “modernización”;
También observamos flechas apuntando a la izquierda:
Infant, Fertility, Rural,
indicando esa “Menor modernización”. Algo curioso que
observamos es que Urban y Rural están casi en
línea recta opuestas, confirmando la relación inversa esperada pues son
mutuamente excluyentes.
En el eje vertical tenemos la Dim2 que corresponde a
“Crecimiento acelerado” . Tenemos flechas apuntando
hacia arriba: Diabetes, Population,
Sanitation, CO2. Países con alta prevalencia
de diabetes, grandes poblaciones y desafíos de saneamiento para esas
poblaciones y flechas apuntando hacia abajo: Death_rate,
Alcohol. Países con alta tasa de muerte y alto consumo de
alcohol. Pero no encontramos una clara tendencia de mayor o menor
“Crecimiento” dentro de la dim2.
Las variables con flechas más largas y cercanas al círculo exterior son aquellas mejor representadas por el plano PC1-PC2 y, por lo tanto, tienen una mayor contribución a la varianza explicada.
Biplot de Individuos y Variables
El biplot combina el gráfico de individuos y el círculo de correlación, permitiendo visualizar la relación de los países con las variables de forma simultánea.
# Biplot interactivo de individuos y variables
biplot_interactive_base <- fviz_pca_biplot(res.pca,
repel = FALSE,
col.var = "#2E9FDF",
col.ind = "#696969",
labelsize.var = 5,
labelsize.ind = 4
)
biplot_interactive <- biplot_interactive_base +
xlab("Modernización (45.6%)") +
ylab("Crecimiento Acelerado (13.2%)") +
labs(title = "Biplot Interactivo de Individuos y Variables")
ggplotly(biplot_interactive, tooltip = c("label", "x", "y"))
El biplot corrobora las interpretaciones del gráfico de individuos y del círculo de correlación. Permite ver cómo los países se relacionan con las variables:
GDP,
Care, HDI, Water,
Electricity, y también muestran una mayor prevalencia en
Smoke, Alcohol, y Diabetes.Infant, Death_rate, Fertility y
Sanitation (alto porcentaje sin saneamiento), y bajo acceso
a los servicios básicos.Estos gráficos interactivos son de gran utilidad para una exploración profunda de las relaciones multivariadas en el conjunto de datos.
Contribución de Variables e Individuos a las Componentes
Es crucial analizar la contribución de cada variable e individuo a la construcción de las componentes principales, ya que esto indica su importancia en la definición de cada dimensión.
# --- Acceder e interpretar los resultados del ACP ---
eig.val <- get_eigenvalue(res.pca)
print(eig.val)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 7.303574e+00 4.564734e+01 45.64734
## Dim.2 2.114196e+00 1.321373e+01 58.86107
## Dim.3 1.795756e+00 1.122347e+01 70.08454
## Dim.4 1.387547e+00 8.672167e+00 78.75670
## Dim.5 9.416142e-01 5.885089e+00 84.64179
## Dim.6 6.489165e-01 4.055728e+00 88.69752
## Dim.7 4.320790e-01 2.700494e+00 91.39802
## Dim.8 3.730185e-01 2.331365e+00 93.72938
## Dim.9 2.800363e-01 1.750227e+00 95.47961
## Dim.10 2.025925e-01 1.266203e+00 96.74581
## Dim.11 1.784381e-01 1.115238e+00 97.86105
## Dim.12 1.454973e-01 9.093584e-01 98.77041
## Dim.13 8.216609e-02 5.135381e-01 99.28394
## Dim.14 7.201727e-02 4.501079e-01 99.73405
## Dim.15 4.255157e-02 2.659473e-01 100.00000
## Dim.16 2.072153e-14 1.295096e-13 100.00000
Ahora analizaremos esta tabla, el eigenvalue o valor propio representa la cantidad de variabilidad o información en cada dimensión. Están acomodados de mayor a menor por ende la Dim1 explica la mayor cantidad de varianza, la Dim2 la segunda mayor y así sucesivamente. Ahora por criterio de Kaiser consideramos significativas aquellas dimensiones en el que su eigenvalue es mayor a 1, pues explican más varianza que una variable misma, observamos que Dim1, Dim2, Dim3, y Dim4 cumplen este criterio, por lo tanto reducimos el número de dimensiones a analizar de 16 a 4.
res.var <- get_pca_var(res.pca)
DT::datatable(res.var$contrib[,1:4])
colSums( res.var$contrib[,1:4] )
## Dim.1 Dim.2 Dim.3 Dim.4
## 100 100 100 100
res.ind <- get_pca_ind(res.pca)
#view(res.ind$contrib[,1:4])
La decisión de retener y enfocarse en los dos primeros Componentes Principales (PC1 y PC2) para este análisis de países se basa en una combinación de criterios estadísticos y consideraciones prácticas para la interpretabilidad y visualización del estudio socioeconómico; al observar los valores propios, el PC1 explica el 45.65% de la varianza total de los datos, y el PC2 añade un 13.21% adicional. Conjuntamente, estos dos componentes capturan el 58.86% de la varianza total. Si bien la tercera dimensión (PC3) explica un 11.22% adicional, lo que elevaría la varianza acumulada al 70.08%, el incremento marginal en la varianza explicada comienza a disminuir significativamente después del segundo componente. Esto se visualiza claramente en el Screen Plot, donde se observa un ‘codo’ pronunciado a partir del segundo componente, indicando que la contribución de los componentes subsiguientes a la varianza total es menos significativa en comparación con los dos primeros. Finalmente, operar con dos dimensiones simplifica enormemente el análisis posterior, permitiendo una visualización clara y directa de la relación entre los países y las variables en un plano bidimensional, facilitando la comunicación de los hallazgos sin comprometer la capacidad de identificar los principales patrones de diferenciación entre los países.
Además de los loadings (n x k), el análisis de las
contribuciones de las variables de esta tabla, en la que se extraen las
primeras 4 dimensiones y la contribución de cada variable para construir
dichas dimensiones, valida nuestras interpretaciones. Por ejemplo, para
el PC1 (Modernización), las variables
Infant, Fertility, Water,
Care, Urban, Rural y
GDP son las que presentan las mayores contribuciones,
confirmando su papel central en la definición de esta dimensión. De
manera similar, para el PC2 (Crecimiento acelerado) las
variables Death_rate, Alcohol y
Diabetes son las principales contribuyentes, lo que
refuerza su interpretación como un eje de desafíos de salud pública y
patrones de crecimiento. Aunque el foco principal de nuestro análisis se
ha puesto en las dos primeras dimensiones , es
relevante notar que las dimensiones subsiguientes también capturan
varianza y aportan información adicional sobre la estructura de los
datos. Por ejemplo, para el PC3, con un 11.22% de la
varianza explicada, se encuentra significativamente impulsado por
variables como la Population (38.69% de
contribución) y la variable de Sanitation,
entendida como la cantidad de personas sin acceso a alcantarillado
(32.42% de contribución). Esto sugiere que el tercer
componente diferenciaría principalmente a los países según la magnitud
de su población y los desafíos de saneamiento asociados. Finalmente,
para el PC4, que explica un 8.67% de la varianza,
recibe contribuciones notables de Sanidad
(12.17%), GDP (8.55%), y
Care (8.42%), entre otras.
Una vez realizado el Análisis de Componentes Principales y comprendidas las dimensiones subyacentes de los datos, el siguiente paso es agrupar los países en clusters homogéneos. La determinación del número óptimo de clusters es un paso crítico en el análisis de agrupamiento.
Aunque se utilizará una aproximación integrada con
FactoClass que puede sugerir el número de componentes y
clusters, es una buena práctica visualizar métodos comunes para
determinar el k óptimo en K-Means, como el método del codo
(WSS) y el coeficiente de silueta.
# --- Determinar el número óptimo de clusters (para K-Means) ---
fviz_nbclust(bd_scaled_for_pca_clustering, FUN = kmeans, method = "wss", k.max = 10)
Ahora al analizar la tabla anterior junto a estos gráficos observamos la forma de codo y el peso de cada dimensión para analizar los datos, como grupo de trabajo tenemos la idea o tendencia de agrupar los países en dos grupos “desarrollados y subdesarrollados” o “Primer mundo y tercer mundo”, y observamos la clara tendencia del modelo a ello.
Los gráficos generados por fviz_nbclust utilizando el
método de la suma de cuadrados intra-cluster (WSS) y el
coeficiente de silueta proporcionan una guía para la elección del número
de clusters (k). El método del codo (WSS) busca un punto de
inflexión en la curva donde la adición de más clusters ya no produce una
reducción significativa en la variabilidad dentro de los clusters. Por
su parte, el coeficiente de silueta mide la similitud de un objeto con
su propio cluster en comparación con otros clusters, donde valores más
altos indican una mejor agrupación. En general, un pico en el gráfico de
silueta sugiere un k óptimo.
fviz_nbclust(bd_scaled_for_pca_clustering, FUN = kmeans, method = "silhouette", k.max = 10)
Al analizar este gráfico obtenemos la confirmación de que escoger 2 dimensiones es óptimo, apoyando nuestra idea de que los países se agrupan en dos grandes grupos, por ello se decide utilizar 2 clusters para el análisis y el resto del modelo.
En resumen, usaremos 2 componentes o dimensiones: la Dimensión 1 (ahora llamada “Modernización” y la Dimensión 2 (ahora llamada “Crecimiento Acelerado”, con los cuales explicamos el 58.86% de la varianza. La mayor “ganancia” en reducción de la suma de cuadrados intra-cluster se observa al pasar de 1 a 2 clusters, lo cual, sumado a la confirmación del “Optimal number of clusters” (método de la silueta y WSS), valida esta elección. Aunque las Dim3 y Dim4 suman información importante, es más práctico y revelador para nuestro objetivo de clusterización basar el análisis en estas dos primeras dimensiones.
FactoClassEl paquete FactoClass permite realizar un análisis
integrado donde se combinan el Análisis de Componentes Principales
(utilizando dudi.pca del paquete ade4) y la
clusterización jerárquica. Esto es ventajoso porque la clusterización se
realiza sobre un espacio de menor dimensionalidad (los componentes
principales) que ya ha capturado la mayor parte de la varianza,
reduciendo el ruido y la redundancia. En la ejecución del código, se
ingresó 3 como el número de componentes principales a retener y 2 como
el número de clusters a formar.
# --- Clustering integrado con ACP usando FactoClass ---
resultado_FactoClass <- FactoClass(bd_scaled_for_pca_clustering, dudi.pca, nf = 2, nfcl = 2, k.clust = 2, scanFC = FALSE)
## The number of retained axes for factorial analysis is 2
##
## The number of axes for clustering is 2
## Look the histogram of 25 indexes
## Partition in 2 clusters
# Obtener las asignaciones de cluster
cluster_asignado <- resultado_FactoClass$cluster
# --- Análisis de los Clusters ---
cluster_df_for_join <- data.frame(
Country = names(cluster_asignado),
Cluster = factor(cluster_asignado)
)
# Une las asignaciones de cluster a tu dataframe original (bd_final_2) usando left_join
bd_final_con_clusters <- bd_final_2 %>%
left_join(cluster_df_for_join, by = "Country")
# Visualiza los primeros países con su asignación de cluster
DT::datatable(bd_final_con_clusters)
El resultado de FactoClass es un objeto que contiene,
entre otras cosas, las asignaciones de cluster para cada país. Estas
asignaciones se unieron al dataframe original (bd_final_2)
para crear bd_final_con_clusters, lo que permite asociar
cada país con su cluster y sus variables originales. La visualización de
bd_final_con_clusters permite inspeccionar las asignaciones
de forma tabular.
Para entender las diferencias entre los clusters, se calculan las estadísticas descriptivas (medias) de todas las variables originales para cada cluster. Esto ayuda a perfilar las características distintivas de los países dentro de cada grupo.
# Estadísticas descriptivas por cluster
desc_por_cluster <- bd_final_con_clusters %>%
filter(!is.na(Cluster)) %>%
group_by(Cluster) %>%
summarise(
Cantidad_Paises = n(),
Media_Expectativa_Vida = mean(Expect, na.rm = TRUE),
Media_PIB = mean(GDP, na.rm = TRUE),
Media_Poblacion = mean(Population, na.rm = TRUE),
Media_Tasa_Muerte = mean(Death_rate, na.rm = TRUE),
Media_Gasto_Salud = mean(Care, na.rm = TRUE),
Media_Mortalidad_Infantil = mean(Infant, na.rm = TRUE),
Media_Saneamiento = mean(Sanitation, na.rm = TRUE),
Media_Rural = mean(Rural, na.rm = TRUE),
Media_Urbana = mean(Urban, na.rm = TRUE),
Media_Agua = mean(Water, na.rm = TRUE),
Media_Fertilidad = mean(Fertility, na.rm = TRUE),
Media_IDH = mean(HDI, na.rm = TRUE),
Media_CO2 = mean(CO2, na.rm = TRUE),
Media_Diabetes = mean(Diabetes, na.rm = TRUE),
Media_Fumar = mean(Smoke, na.rm = TRUE),
Media_Alcohol = mean(Alcohol, na.rm = TRUE),
Media_Electricidad = mean(Electricity, na.rm = TRUE)
)
# Visualiza las estadísticas descriptivas por cluster
DT::datatable(desc_por_cluster)
La tabla desc_por_cluster es fundamental para la
interpretación de los grupos. Al examinar las medias de las variables
para cada uno de los tres clusters, se pueden identificar sus perfiles
distintivos:
GDP, Care,
HDI, Water, y Electricity.
Simultáneamente, presentan las medias más altas en Infant,
Sanitation (alto porcentaje sin saneamiento), y
Fertility. Estos países generalmente tienen una
Expectativa de Vida baja, Pero increiblemente presentan una
media más baja en Death_rate. Este cluster podría
representar a naciones en etapas tempranas de desarrollo, con
infraestructuras limitadas y desafíos significativos en salud pública,
por lo que decidimos nombrarlo “Subdesarrollados”.GDP, Care,
HDI, Water, y Electricity.
Paralelamente, tienen las medias más bajas en Infant, y
Fertility. Sin embargo, también muestran medias
relativamente altas en CO2, Diabetes,
Smoke, y Alcohol. Su
Expectativa de Vida es la más alta entre los clusters. Este
grupo podría representar a naciones altamente desarrolladas, con
excelentes indicadores de salud y calidad de vida, pero también con
patrones de consumo y estilos de vida asociados a problemas de salud
modernos y mayores emisiones, por lo que decidimos nombrarlo
“Desarrollados”.Esta caracterización es esencial para comprender las diferentes realidades globales que emergen de los datos y cómo estas se relacionan con la expectativa de vida.
Los boxplots por variable y cluster, y el gráfico de individuos coloreados por cluster en el plano principal, permiten una visualización intuitiva de las diferencias entre los grupos.
# Gráfico de boxplot por variable y cluster - Interactivo
bd_final_con_clusters_renamed <- bd_final_con_clusters %>%
mutate(
Cluster = recode_factor(Cluster,
"1" = "Países Subdesarrollados",
"2" = "Países Desarrollados")
)
bd_long_clusters <- bd_final_con_clusters_renamed %>%
filter(!is.na(Cluster)) %>%
select(-Country, -Year, -Expect_high) %>%
melt(id.vars = "Cluster")
plot_boxplots <- ggplot(bd_long_clusters, aes(y = value, x = variable, fill = Cluster)) +
geom_boxplot() +
facet_wrap(~variable, scales = "free_y") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
labs(title = "Distribución de Variables por Cluster",
x = "Variable",
y = "Valor")
ggplotly(plot_boxplots)
Los boxplots interactivos por variable y cluster son
particularmente útiles para visualizar cómo la distribución de cada
variable difiere entre los clusters. Por ejemplo, se observará que el
Cluster 1 tendrá boxplots con valores más bajos para GDP y
HDI, y más altos para Infant y
Death_rate, mientras que el Cluster 2 mostrará el patrón
opuesto. El gráfico de individuos coloreados por cluster en el
plano principal (cluster_ind_plot) permite ver la
separación de los clusters en el espacio de componentes principales.
Idealmente, los puntos de diferentes colores (clusters) deberían formar
grupos distintos, lo que indicaría una buena separación. Estos gráficos
confirman visualmente las caracterizaciones obtenidas de las
estadísticas descriptivas por cluster, ofreciendo una comprensión más
profunda de la estructura de los datos y las agrupaciones de países.
# Gráfico de individuos coloreados por cluster - Interactivo
cluster_df_for_join <- cluster_df_for_join %>%
mutate(
Cluster = recode_factor(Cluster,
"1" = "Países Subdesarrollados",
"2" = "Países Desarrollados")
)
ind_coords <- as.data.frame(res.pca$x) %>%
select(PC1, PC2) %>%
mutate(Country = rownames(.)) %>%
left_join(cluster_df_for_join, by = "Country")
cluster_ind_plot <- ggplot(ind_coords, aes(x = PC1, y = PC2, color = Cluster, text = Country)) +
geom_point(size = 3, alpha = 0.8) +
labs(
title = "Individuos (Países) en el plano principal coloreados por Cluster",
x = paste0("Modernización (", round(eig.val$variance.percent[1], 1), "%)"),
y = paste0("Crecimiento Acelerado (", round(eig.val$variance.percent[2], 1), "%)")
) +
theme_minimal()
ggplotly(cluster_ind_plot, tooltip = "text")
# --- Conversión de gráficos ade4 a ggplotly ---
dudi_resultado <- resultado_FactoClass$dudi
s.class(dudi_resultado$li, factor(resultado_FactoClass$cluster),
sub = "Modernización y Crecimiento Acelerado con Clusters", possub = "bottomright",
xax = 1, yax = 2,
col = rainbow(nlevels(factor(resultado_FactoClass$cluster))))
Análisis Detallado (Biplot de Individuos Coloreados por Cluster con Elipses)
Este gráfico, un biplot de individuos coloreados por cluster, es crucial para visualizar la efectividad de nuestra segmentación y para comprender las características distintivas de cada grupo de países en el espacio de las componentes principales. En este biplot, el eje horizontal (PC1) representa la “Modernización”, mientras que el eje vertical (PC2) representa el “Crecimiento Acelerado”. Cada punto simboliza un país y su color indica la pertenencia a uno de los dos clusters identificados: “Países Desarrollados” (azul) o “Países Subdesarrollados” (rojo). Las elipses de confianza al 95% alrededor de cada cluster ofrecen una representación visual de la dispersión y la separación entre los grupos.
Al observar la cantidad y distribución de los puntos, es inmediatamente perceptible que existe una mayor concentración de puntos rojos (“Países Subdesarrollados”) en comparación con los puntos azules (“Países Desarrollados”). Esta distribución sugiere que, dentro de nuestro conjunto de datos, una proporción más grande de países se clasifica en la categoría de “Subdesarrollados” según las variables consideradas. Los puntos azules se agrupan de manera compacta en el lado derecho del biplot (valores altos de PC1), mientras que los puntos rojos se congregan en el lado izquierdo (valores bajos de PC1). Esta división horizontal es extremadamente clara, y la ausencia de solapamiento significativo entre las elipses de confianza de ambos clusters confirma que nuestro algoritmo de clusterización ha logrado una separación robusta y efectiva entre los grupos.
Las flechas rojas en el biplot representan las variables originales y su relación con las componentes principales. Es crucial entender que estas flechas no “se salen de los círculos o elipses” en el sentido de límites, sino que se proyectan desde el origen del gráfico, indicando la dirección y fuerza de la correlación de cada variable con las nuevas dimensiones. Por ejemplo, en relación con la PC1 (Modernización):
Las flechas que apuntan fuertemente hacia la derecha (valores
positivos de PC1), como las de GDP, HDI,
Care, Water y Electricity,
muestran una alta correlación positiva con esta dimensión. Esto
significa que los países que se agrupan en el lado derecho del biplot
(el cluster azul de “Países Desarrollados”) son aquellos que exhiben
altos valores en estas características, es decir, un elevado
nivel de modernización y desarrollo.
Por el contrario, las flechas que se extienden hacia la izquierda
(valores negativos de PC1), como Death_rate,
Infant y Fertility, indican una fuerte
correlación negativa. Los países con altos valores en estas variables
(altas tasas de mortalidad y fertilidad) se sitúan en el lado izquierdo
del biplot, caracterizando al cluster rojo de “Países
Subdesarrollados” por un menor grado de modernización.
Respecto a la PC2 (Crecimiento Acelerado):
Las flechas que se dirigen hacia arriba (valores positivos de
PC2), como Smoke, Alcohol y
Diabetes, señalan una correlación positiva. Los países
ubicados en la parte superior del biplot tienden a tener mayor
prevalencia de estas características, vinculadas a estilos de vida
urbanos o a un “Crecimiento Acelerado” que conlleva ciertos
desafíos de salud pública.
Las flechas que apuntan hacia abajo (valores negativos de PC2),
como Sanitation y Rural, indican una
correlación negativa. Los países en la parte inferior del biplot podrían
tener un menor impacto de los problemas de estilo de vida o enfrentar
desafíos relacionados con infraestructura básica y una población más
rural.
A partir del Análisis de Componentes Principales (ACP) y la clusterización, podemos interpretar los factores latentes que estructuran la variabilidad de nuestros datos y describir los perfiles de los clusters de países.
El Análisis de Componentes Principales (ACP) ha revelado dos dimensiones latentes principales que explican la mayor parte de la variabilidad en las características de los países. La interpretación de estos factores se basa en las cargas (loadings) de las variables originales sobre cada componente, lo que indica la fuerza y dirección de su contribución.
Primera Componente Principal (PC1):
Factor de Desarrollo Socioeconómico y Salud: Esta
dimensión, que es la más importante al explicar el
45.65% de la varianza total, se asocia fuertemente con
indicadores de prosperidad y bienestar. Las variables que contribuyen
positivamente a esta componente incluyen el Producto Interno Bruto
(GDP), el Índice de Desarrollo Humano (HDI),
el Gasto en Salud (Care), y el acceso a servicios básicos
como Agua (Water) y Electricidad
(Electricity). Esto sugiere que PC1 representa un eje de
“modernización” o “progreso”. En
contraste, variables como la Tasa de Mortalidad
(Death_rate), la Mortalidad Infantil (Infant)
y la Tasa de Fertilidad (Fertility) muestran una fuerte
correlación negativa. Por lo tanto, los países con puntuaciones altas en
PC1 se caracterizan por una economía robusta, un alto desarrollo humano,
sistemas de salud avanzados y bajas tasas de mortalidad y natalidad.
Inversamente, los países con puntuaciones bajas en PC1 enfrentan
desafíos económicos y sociales significativos, con menor acceso a
servicios y mayores tasas de mortalidad y fertilidad.
Segunda Componente Principal (PC2):
Factor de Estilo de Vida y Salud Pública: Esta
componente, que explica un 13.21% adicional de la
varianza, captura aspectos relacionados con los patrones de vida y los
desafíos de salud emergentes. Se observa una contribución positiva de
variables como el Consumo de Tabaco
(Smoke), el Consumo de Alcohol
(Alcohol) y la Prevalencia de Diabetes
(Diabetes), lo que sugiere una conexión con enfermedades no
transmisibles asociadas a ciertos estilos de vida. En menor medida, la
Población (Population) y las Emisiones de CO2
(CO2) también se correlacionan positivamente. Por otro
lado, variables como la población sin Saneamiento mejorado y la
proporción de población Rural se oponen a estas variables, mostrando una
correlación negativa. Esto implica que los países con puntuaciones altas
en PC2 pueden estar experimentando un “crecimiento
acelerado” que conlleva un aumento de las enfermedades de
estilo de vida y presiones ambientales. Aquellos con puntuaciones bajas
en PC2, en cambio, podrían tener una menor incidencia de estas
problemáticas o, en un contexto de menor desarrollo, enfrentar desafíos
de salud más vinculados a la falta de infraestructuras básicas.
Estos dos factores combinados (PC1 y PC2)
explican la mayor parte de la varianza en las características de los
países, ofreciendo una base sólida para la segmentación.
Tras la aplicación del algoritmo K-Means sobre las puntuaciones de los países en las dos componentes principales (PC1 y PC2), se identificaron dos grupos distintivos. La validez y las características de estos clusters se confirman mediante el análisis de las estadísticas descriptivas de cada grupo (tablas de promedios), la distribución de las variables por cluster (gráficos de boxplots interactivos), y crucialmente, la visualización en el biplot de individuos coloreados por cluster con elipses de confianza (como se muestra en el gráfico de individuos).
Posicionamiento en el Biplot: Este cluster se ubica predominantemente en el lado derecho del biplot (altos valores en PC1), lo que refleja su alta asociación con el “Factor de Desarrollo Económico y Humano”. Dentro de este grupo, los países se distribuyen verticalmente a lo largo del eje PC2, ocupando tanto regiones de altos como de bajos valores de la segunda componente. Esto indica que, si bien todos son naciones desarrolladas, existen matices en sus desafíos relacionados con el estilo de vida y la salud pública. Por ejemplo, países como Estados Unidos y gran parte de Europa tienden a ubicarse en el cuadrante de Alto PC1 y bajo PC2, sugiriendo un desarrollo maduro con desafíos de estilo de vida quizás más controlados o diferentes a los de economías en rápido auge. En contraste, países como China o Qatar pueden posicionarse en el cuadrante de Alto PC1 y alto PC2, reflejando un desarrollo acelerado que, si bien trae prosperidad, también puede acarrear una mayor prevalencia de problemas de salud asociados al estilo de vida o al impacto ambiental.
Características Clave: Este grupo engloba a las
naciones con el nivel más alto de desarrollo socioeconómico. Se
distinguen por tener los valores más elevados en indicadores como el
PIB per cápita, el Índice de Desarrollo
Humano (HDI), una considerable inversión
en gasto de salud (Care) y un acceso casi
universal a servicios básicos de calidad como agua y electricidad. Como
consecuencia de este desarrollo, presentan las tasas de mortalidad
general e infantil más bajas y una tasa de fertilidad controlada. Son
predominantemente urbanos. La capacidad de sus sistemas de salud y su
infraestructura avanzada les permite gestionar eficazmente los desafíos
de salud, incluso aquellos relacionados con el estilo de vida.
Posicionamiento en el Biplot: Este cluster se encuentra mayoritariamente en el lado izquierdo del biplot (bajos valores en PC1), evidenciando su relación con los aspectos de menor desarrollo económico y humano. Dentro de este cluster, la mayoría de los países se concentran en el cuadrante de Bajo PC1 y bajo PC2 (ejemplos claros son Chad, Burkina Faso, Benín, Haití). Estos son países que enfrentan desafíos estructurales en su desarrollo y donde los problemas de salud están más vinculados a la falta de fundamentos básicos como el saneamiento y el acceso a recursos. Un menor número de países de este cluster podría extenderse hacia valores más altos en PC2, lo que podría indicar naciones en fases iniciales de industrialización donde a los problemas de subdesarrollo se suman los primeros indicios de desafíos de salud pública ligados a cambios en el estilo de vida.
Características Clave: Este grupo comprende a los países que enfrentan los mayores desafíos en términos de desarrollo y bienestar. Se caracterizan por tener los valores más bajos en PIB per cápita, IDH, gasto en salud y un acceso deficiente a servicios básicos. Como resultado, exhiben altas tasas de mortalidad (general e infantil) y una alta tasa de fertilidad. Los problemas de saneamiento inadecuado son predominantes, y a menudo, una mayor proporción de su población reside en áreas rurales. En estos países, las principales preocupaciones de salud están ligadas a la pobreza y la falta de acceso a infraestructura, más que a las enfermedades crónicas asociadas al estilo de vida de las naciones más desarrolladas.
Este análisis no supervisado ha permitido explorar la compleja interacción de factores económicos, sociales y de salud que influyen en la esperanza de vida a nivel global, mediante la aplicación de Análisis de Componentes Principales (ACP) y algoritmos de clusterización.
En primer lugar, el ACP fue instrumental para reducir la dimensionalidad de nuestro conjunto de datos, identificando dos componentes principales clave: el “Factor de Desarrollo Económico y Humano” (PC1) y el “Factor de Estilo de Vida y Salud Pública” (PC2). Estas dos dimensiones explican conjuntamente el 58.86% de la varianza, logrando una representación eficiente y significativa de la complejidad de los datos. La interpretación de estas componentes reveló los ejes fundamentales que diferencian a los países, desde su nivel de prosperidad y bienestar básico hasta los desafíos sanitarios vinculados a sus patrones de vida.
En segundo lugar, la clusterización de los países basada en estas dos dimensiones nos permitió identificar dos grupos distintos y bien diferenciados: el cluster de “Países Desarrollados” y el cluster de “Países en Desarrollo”. Las características intrínsecas de cada cluster, validadas a través de visualizaciones como el biplot y el análisis de boxplots por variable, corroboran las divisiones esperadas basadas en el desarrollo global. El primer cluster agrupa a naciones con alta esperanza de vida, robustez económica y social, y capacidad para gestionar desafíos de salud más complejos. El segundo cluster comprende a países que enfrentan limitaciones estructurales significativas, baja esperanza de vida y desafíos de salud primarios.
Finalmente, este estudio demuestra cómo las técnicas de análisis no supervisado son herramientas poderosas para descubrir patrones ocultos y estructuras naturales dentro de grandes conjuntos de datos. La segmentación obtenida no solo es teóricamente sólida, sino que también ofrece implicaciones prácticas valiosas para la formulación de políticas y la asignación de recursos. Comprender estas tipologías de países permite diseñar estrategias más focalizadas y efectivas para mejorar la esperanza de vida, abordando las necesidades específicas y los perfiles de riesgo de cada grupo. Los resultados confirman la hipótesis de que el desarrollo económico y humano, junto con los patrones de estilo de vida y salud pública, son factores determinantes en la esperanza de vida de una nación.