library(readxl)
library(MASS)
library(ggplot2)
library(caret)
library(klaR)
library(MVN)
library(tidyverse)
library(e1071)
library(biotools)
library(dplyr)
library(factoextra)
library(kableExtra)La medición del progreso de las naciones ha evolucionado desde una visión unidimensional centrada exclusivamente en la expansión del Producto Interno Bruto (PIB) hacia una comprensión multidimensional del desarrollo humano. No obstante, en el sistema internacional contemporáneo, la persistencia de brechas sociales y la volatilidad económica plantean un desafío fundamental: ¿por qué, ante niveles de riqueza similares, algunas naciones logran transformaciones sociales tangibles mientras otras permanecen estancadas?
La presente investigación aborda esta interrogante mediante una perspectiva de ciencia de datos, integrando variables macroeconómicas, institucionales y de salud pública en un modelo de clasificación multivariante. El objetivo central es determinar el impacto de estas variables sobre el Índice de Calidad de Vida (usando el IDH como proxy) en 169 naciones durante el periodo 2000-2019.
Pregunta Principal:
Preguntas Secundarias:
Dimensión Político-Económica: ¿De qué manera la configuración multidimensional de la riqueza, la infraestructura sanitaria y la estabilidad institucional genera agrupaciones naturales de países a lo largo del tiempo, y en qué medida estas agrupaciones reflejan o contradicen las categorías de desarrollo humano tradicionales?
Dimensión de Modelado Estadístico: ¿De qué manera la clasificación basada en aprendizaje estadístico evidencia las barreras estructurales y la resiliencia de los estados para transitar entre niveles de desarrollo, contrastando la realidad institucional contemporánea con la medición tradicional del IDH?
Para alcanzar este propósito, el estudio se despliega a través de los siguientes objetivos específicos:
Caracterizar el bienestar social mediante la comparación estadística entre diferentes sistemas políticos y modelos económicos, evaluando la eficiencia en la inversión pública.
Identificar los determinantes críticos que explican la varianza en la calidad de vida, utilizando el peso estadístico de factores institucionales, sanitarios y de mercado.
Implementar un modelo predictivo (QDA) capaz de diagnosticar la trayectoria de desarrollo de las naciones y evidenciar las barreras estructurales que limitan su movilidad.
Evaluar la rigidez estructural del sistema internacional, detectando divergencias entre los legados históricos de bienestar y la realidad institucional contemporánea.
Para fundamentar el análisis del impacto de los factores macroeconómicos, políticos y de salud pública en la calidad de vida, la presente investigación se apoya en dos ejes teóricos principales, con especial énfasis en la literatura desarrollada para América Latina y economías emergentes:
Eje 1: La relación entre el Crecimiento Macroeconómico y el Desarrollo Humano en economías emergentes.
El análisis del bienestar no puede limitarse exclusivamente a la acumulación de riqueza. Garzón-González (2025), en su estudio sobre la relación entre el crecimiento del PIB y la mejora del Índice de Desarrollo Humano (IDH) en América Latina (2000-2022), demuestra que, si bien el crecimiento económico es una condición necesaria, no es suficiente por sí sola para garantizar el progreso social. En economías en vías de desarrollo, la riqueza generada a menudo choca con barreras de desigualdad estructural. Esto concuerda con lo planteado por Torres-Torres et al. (2020), quienes analizaron el impacto de variables socioeconómicas en el IDH de las economías latinoamericanas, concluyendo que la verdadera calidad de vida de una nación depende críticamente de cómo el Estado logra (o fracasa en) traducir ese Producto Interno Bruto en inversión social tangible, especialmente en épocas de volatilidad económica.
Eje 2: Determinantes epidemiológicos y la infraestructura de Salud Pública.
Las métricas biológicas, como la esperanza de vida y las tasas de mortalidad, son el reflejo final de la calidad de vida de una población. El Global Burden of Disease Study (2019) establece que los determinantes de salud explican la mayor varianza en la esperanza de vida ajustada a nivel global. En el contexto de vías de desarrollo, estudios como el de Martínez-García et al. (2021) sobre mortalidad en 363 ciudades de América Latina, evidencian que el entorno urbano, el saneamiento y la inversión directa en programas de inmunización y salud materno-infantil tienen un impacto predictivo altísimo sobre la longevidad y el desarrollo del capital humano. Esto valida la necesidad de incluir variables como el gasto en salud, las muertes infantiles y las coberturas de vacunación en los modelos estadísticos que buscan predecir el bienestar de una nación.
A pesar de la extensa literatura expuesta en los ejes anteriores, se evidencia una fragmentación en el análisis tradicional: los enfoques económicos aíslan el PIB, mientras que los estudios en salud pública se centran en la epidemiología. Muy pocos estudios empíricos a nivel global integran explícitamente la estructura cualitativa del Estado (Tipo de Gobierno y Sistema Económico) interactuando simultáneamente con variables de salud y mercado dentro de un modelo estadístico longitudinal (2000-2019).
Aquí radica el valor diferenciador y la pertinencia de nuestra investigación. Al fusionar los registros del Banco Mundial, OWID y la OMS en una única base de datos depurada de 169 países, nuestro proyecto no busca simplemente confirmar que “el dinero mejora la vida”. Nuestro objetivo es utilizar enfoques de ciencia de datos para cuantificar el peso estadístico real (Feature Importance) de cada factor. Esto nos permitirá responder a nuestra pregunta de investigación identificando, por ejemplo, si bajo un gobierno autoritario el gasto en salud rinde menos que en una república parlamentaria, o si la inmunización pesa más que el PIB para predecir el Índice de Calidad de Vida en naciones en desarrollo. De este modo, el proyecto trasciende la estadística descriptiva para sentar las bases de un modelado predictivo integral.
Diseño del Muestreo y Población
La verdadera capacidad de un modelo estadístico no reside únicamente en su precisión matemática, sino en su habilidad para revelar las dinámicas invisibles que gobiernan el desarrollo de las naciones. Tras la consolidación de una serie histórica de 2998 registros globales, el presente capítulo trasciende la descripción estadística para implementar un enfoque predictivo robusto.
El objetivo no es solo predecir la clasificación de los países según el PNUD, sino diagnosticar con rigor probabilístico cómo las variables institucionales y sanitarias actúan como factores determinantes en la movilidad —o estancamiento— de las economías internacionales. A continuación, se presenta la validación del rendimiento global del algoritmo y el diagnóstico estructural específico aplicado a Colombia, contrastando las predicciones del modelo con la trayectoria histórica y la realidad institucional contemporánea.
Aqui cargamos los datos de nuestra base de Datos
Tras un proceso de iteración técnica, revisión bibliográfica y pruebas de sensibilidad, hemos definido un conjunto robusto de variables para la construcción de nuestro modelo. Esta selección no responde únicamente a la disponibilidad de datos, sino a un criterio de coherencia teórica y capacidad discriminante.
Analizar la existencia de perfiles estructurales diferenciados de brecha de género en salud entre los países de América Latina durante el período 2000–2019, evaluando en qué medida el régimen político y el nivel de desarrollo humano (IDH) determinan la magnitud y dirección de dicha brecha.
Estrategia analítica:
Para mejorar la calidad del agrupamiento, se aplica primero un Análisis Factorial sobre las seis variables de brecha e institucionales, reduciendo su dimensionalidad a factores latentes no correlacionados. Luego se aplica K-means sobre los scores factoriales, lo que elimina el ruido entre variables correlacionadas y mejora la varianza explicada del modelo de clústeres.
Variables de análisis:
brecha_vida = Esperanza de vida femenina − Esperanza de
vida masculinabrecha_mort_adulta = Mortalidad adulta masculina −
Mortalidad adulta femeninabrecha_mort_inf = Mortalidad infantil masculina −
Mortalidad infantil femeninagdpPerCapitaPPP (log)corruptionIndexCHEPercentGDPHuman_Development_Index = Índice de Desarrollo Humano
(bienestar, educación e ingreso per cápita)library(readxl)
library(tidyverse)
library(cluster)
library(factoextra)
library(knitr)
library(scales)
library(ggplot2)
library(dplyr)
library(gridExtra)
library(psych) # para el análisis factorial# Países de América Latina (excluye EE.UU. y Canadá)
paises_latam <- c(
"Argentina", "Belize", "Bolivia (Plurinational State of)", "Brazil",
"Chile", "Colombia", "Costa Rica", "Cuba", "Dominican Republic",
"Ecuador", "El Salvador", "Guatemala", "Guyana", "Haiti", "Honduras",
"Jamaica", "Mexico", "Nicaragua", "Panama", "Paraguay", "Peru",
"Suriname", "Trinidad and Tobago", "Uruguay",
"Venezuela (Bolivarian Republic of)"
)
vars_genero <- c(
"lifeExpectancyData_male", "lifeExpectancyData_female",
"adultMortality_male", "adultMortality_female",
"underFiveMortality_male", "underFiveMortality_female",
"gdpPerCapitaPPP", "corruptionIndex",
"CHEPercentGDP", "politicalRegime",
"Country", "Year",
"Human_Development_Index"
)
datos_g <- datos %>%
filter(Country %in% paises_latam) %>%
dplyr::select(all_of(vars_genero)) %>%
mutate(Human_Development_Index = as.numeric(Human_Development_Index)) %>%
na.omit() %>%
mutate(
brecha_vida = lifeExpectancyData_female - lifeExpectancyData_male,
brecha_mort_adult = adultMortality_male - adultMortality_female,
brecha_mort_inf = underFiveMortality_male - underFiveMortality_female,
gdpPerCapitaPPP = log(gdpPerCapitaPPP + 1)
)
cat("Observaciones disponibles:", nrow(datos_g), "\n")## Observaciones disponibles: 462
## Países cubiertos: 22
##
## Estadísticas de la brecha en esperanza de vida (años):
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -7.33 4.84 5.79 5.34 6.49 9.97
La brecha promedio en América Latina es de aproximadamente 5.34 años a favor de las mujeres, con un rango que va desde −7.3 años (Haití 2010, tras el terremoto) hasta 9.97 años (El Salvador 2015, con alta mortalidad masculina por violencia). Esta heterogeneidad sugiere que existen perfiles muy distintos de desigualdad de género en salud dentro de la región.
tabla_regimen <- datos_g %>%
group_by(politicalRegime) %>%
summarise(
N = n(),
Brecha_Vida_Media = round(mean(brecha_vida), 2),
Brecha_Vida_SD = round(sd(brecha_vida), 2),
Brecha_MortAdult = round(mean(brecha_mort_adult) * 100, 2),
Brecha_MortInf = round(mean(brecha_mort_inf) * 100, 3),
.groups = "drop"
) %>%
arrange(desc(Brecha_Vida_Media))
kable(tabla_regimen,
caption = "Tabla 1: Brechas de género en salud promedio por régimen político — América Latina (2000–2019)",
col.names = c("Régimen Político", "N",
"Brecha Esp. Vida (años)", "SD",
"Brecha Mort. Adulta (%)",
"Brecha Mort. Infantil (%)"),
align = "lccccc")| Régimen Político | N | Brecha Esp. Vida (años) | SD | Brecha Mort. Adulta (%) | Brecha Mort. Infantil (%) |
|---|---|---|---|---|---|
| Liberal democracy | 78 | 6.05 | 1.17 | 6.57 | 0.251 |
| Electoral democracy | 334 | 5.62 | 1.66 | 7.69 | 0.521 |
| Electoral autocracy | 48 | 2.46 | 2.92 | 2.75 | 0.794 |
| Closed autocracy | 2 | 0.33 | 2.03 | -0.79 | 0.935 |
colores_regimen <- c(
"Liberal democracy" = "#1A5276",
"Electoral democracy" = "#2E86C1",
"Electoral autocracy" = "#E67E22",
"Closed autocracy" = "#C0392B"
)
ggplot(datos_g, aes(x = reorder(politicalRegime, brecha_vida, median),
y = brecha_vida, fill = politicalRegime)) +
geom_boxplot(alpha = 0.75, outlier.size = 1, outlier.alpha = 0.5) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40", linewidth = 0.8) +
scale_fill_manual(values = colores_regimen) +
coord_flip() +
labs(
title = "Figura 1: Brecha en Esperanza de Vida (Mujeres − Hombres) por Régimen Político",
subtitle = "América Latina (2000–2019). Línea discontinua = brecha cero. Valores negativos: hombres viven más",
x = NULL, y = "Brecha en esperanza de vida (años)", fill = "Régimen"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40", size = 9),
legend.position = "none"
)La Figura 1 muestra que la brecha a favor de las mujeres existe en todos los regímenes latinoamericanos, pero su comportamiento varía. Las democracias liberales y electorales presentan brechas más concentradas y predecibles (medianas de 6 y 5.6 años respectivamente). Las autocracias electorales muestran mayor dispersión (media 2.46, SD 2.92), y las autocracias cerradas presentan una brecha casi nula (0.33).
ggplot(datos_g, aes(x = gdpPerCapitaPPP, y = brecha_vida, color = politicalRegime)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(method = "loess", se = TRUE, linewidth = 1.2) +
scale_color_manual(values = colores_regimen) +
facet_wrap(~politicalRegime, ncol = 2) +
labs(
title = "Figura 2: PIB per cápita (log) vs. Brecha de Género en Esperanza de Vida",
subtitle = "América Latina — Cada panel muestra la tendencia dentro de cada régimen político",
x = "PIB per cápita (log, PPP)", y = "Brecha (años)"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40", size = 9),
legend.position = "none",
strip.text = element_text(face = "bold")
)Dentro de América Latina, el aumento del PIB tiende a ampliar la brecha en las democracias, reflejando la paradoja de la longevidad femenina: en países más ricos de la región, las mujeres viven proporcionalmente más años que los hombres.
Antes de aplicar K-means, se reduce la dimensionalidad de las siete variables mediante Análisis Factorial. Esto permite eliminar el ruido entre variables correlacionadas y mejorar la calidad del agrupamiento posterior. Se incorpora el IDH como variable adicional para capturar la dimensión de desarrollo humano integral — bienestar, educación e ingreso — que complementa el PIB y el índice de corrupción.
# Se agrega Human_Development_Index a las variables del factorial
vars_km <- c("brecha_vida", "brecha_mort_adult", "brecha_mort_inf",
"gdpPerCapitaPPP", "corruptionIndex", "CHEPercentGDP",
"Human_Development_Index")
datos_escala <- datos_g %>%
dplyr::select(all_of(vars_km)) %>%
scale() %>%
as.data.frame()
# Prueba de adecuación muestral KMO y Bartlett
kmo_resultado <- KMO(datos_escala)
cat("KMO global:", round(kmo_resultado$MSA, 3), "\n")## KMO global: 0.642
bartlett_resultado <- cortest.bartlett(cor(datos_escala), n = nrow(datos_escala))
cat("Prueba de Bartlett — p-valor:", format(bartlett_resultado$p.value, scientific = TRUE), "\n")## Prueba de Bartlett — p-valor: 0e+00
El análisis factorial resulta apropiado para los datos, dado que la prueba de esfericidad de Bartlett fue significativa (p < 0.001), lo que indica la existencia de correlaciones suficientes entre las variables. Además, el índice KMO global de 0.642 sugiere una adecuación muestral moderada, considerada aceptable para la aplicación del análisis factorial, aunque con margen de mejora en la estructura de los datos.
# Gráfico de sedimentación (scree plot)
scree(datos_escala, factors = TRUE, pc = FALSE,
main = "Figura 3: Gráfico de Sedimentación — Selección de Factores")# Ajuste del modelo factorial con rotación varimax
set.seed(123)
n_factores <- 2 # ajustar según el scree plot
modelo_fa <- fa(datos_escala,
nfactors = n_factores,
rotate = "varimax",
fm = "ml")
cat("Varianza explicada por factor:\n")## Varianza explicada por factor:
## ML2 ML1
## SS loadings 3.104 1.908
## Proportion Var 0.443 0.273
## Cumulative Var 0.443 0.716
## Proportion Explained 0.619 0.381
## Cumulative Proportion 0.619 1.000
##
## Cargas factoriales:
## ML2 ML1
## brecha_vida 0.377 0.871
## brecha_mort_adult 0.055 0.996
## brecha_mort_inf -0.803 -0.208
## gdpPerCapitaPPP 0.884 0.266
## corruptionIndex -0.612 -0.066
## CHEPercentGDP 0.414 0.174
## Human_Development_Index 0.993 0.097
Con la incorporación del IDH, el factorial captura tres grandes dimensiones latentes de la desigualdad de género en salud en América Latina: la violencia y mortalidad diferencial, la calidad del Estado e institucionalidad, y el desarrollo humano integral. El K-means ahora agrupa los países según cómo se combinan esas fuerzas en cada caso, lo que hace los perfiles mucho más interpretables y completos que antes.
cargas <- as.data.frame(round(modelo_fa$loadings[], 3))
cargas$Variable <- rownames(cargas)
rownames(cargas) <- NULL
kable(cargas %>% dplyr::select(Variable, everything()),
caption = "Tabla 2: Cargas factoriales (rotación Varimax)",
align = "lcc")| Variable | ML2 | ML1 |
|---|---|---|
| brecha_vida | 0.377 | 0.871 |
| brecha_mort_adult | 0.055 | 0.996 |
| brecha_mort_inf | -0.803 | -0.208 |
| gdpPerCapitaPPP | 0.884 | 0.266 |
| corruptionIndex | -0.612 | -0.066 |
| CHEPercentGDP | 0.414 | 0.174 |
| Human_Development_Index | 0.993 | 0.097 |
# Extraer scores factoriales para usar en K-means
scores_fa <- as.data.frame(modelo_fa$scores)
colnames(scores_fa) <- paste0("Factor", 1:n_factores)
cat("Dimensiones de los scores factoriales:", dim(scores_fa), "\n")## Dimensiones de los scores factoriales: 462 2
## Primeras filas:
## Factor1 Factor2
## 1 0.929 0.380
## 2 1.002 0.347
## 3 0.990 0.393
## 4 1.122 0.190
## 5 1.190 0.029
## 6 1.244 0.022
Los factores extraídos capturan las dimensiones latentes subyacentes a las variables de brecha de género e institucionales. El Factor 1 tipicamente agrupa las variables de desarrollo y calidad institucional, mientras el Factor 2 captura la dimensión específica de la brecha de género por violencia y conflicto. Estos scores limpios y no correlacionados son los que se usan en el K-means.
set.seed(123)
p1 <- fviz_nbclust(scores_fa, kmeans, method = "wss", k.max = 8) +
labs(title = "Método del Codo",
x = "Número de clústeres (k)", y = "Inercia (WSS)") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 11))
p2 <- fviz_nbclust(scores_fa, kmeans, method = "silhouette", k.max = 8) +
labs(title = "Coeficiente de Silueta",
x = "Número de clústeres (k)", y = "Silueta promedio") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 11))
p3 <- fviz_nbclust(scores_fa, kmeans, method = "gap_stat", k.max = 8, nboot = 50) +
labs(title = "Estadístico Gap",
x = "Número de clústeres (k)", y = "Gap statistic") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 11))
grid.arrange(p1, p2, p3, ncol = 3)Figura 4: Criterios para la selección del número óptimo de clústeres sobre scores factoriales.
set.seed(123)
modelo_km <- kmeans(scores_fa, centers = 4, nstart = 50, iter.max = 300)
datos_g$Cluster <- factor(modelo_km$cluster)
cat("Distribución por clúster:\n")## Distribución por clúster:
##
## 1 2 3 4
## 179 69 150 64
##
## Varianza explicada: 72.2 %
perfiles <- datos_g %>%
group_by(Cluster) %>%
summarise(
N = n(),
Brecha_Vida = round(mean(brecha_vida), 2),
Brecha_MortAd = round(mean(brecha_mort_adult) * 100, 2),
Esp_Vida_F = round(mean(lifeExpectancyData_female), 1),
Esp_Vida_M = round(mean(lifeExpectancyData_male), 1),
Corrupcion = round(mean(corruptionIndex), 3),
Gasto_Salud = round(mean(CHEPercentGDP) * 100, 1),
IDH_Medio = round(mean(Human_Development_Index), 3),
.groups = "drop"
) %>%
arrange(Brecha_Vida)
etiquetas <- c("Brecha Invertida", "Brecha Moderada", "Brecha Amplia", "Brecha Extrema")
perfiles$Perfil <- etiquetas[rank(perfiles$Brecha_Vida, ties.method = "first")]
mapa <- setNames(perfiles$Perfil, as.character(perfiles$Cluster))
datos_g$Perfil <- factor(mapa[as.character(datos_g$Cluster)], levels = etiquetas)
kable(perfiles %>% dplyr::select(Perfil, N, Brecha_Vida, Brecha_MortAd,
Esp_Vida_F, Esp_Vida_M, Corrupcion, Gasto_Salud, IDH_Medio),
caption = "Tabla 3: Perfil estructural de cada clúster — América Latina (K-means sobre factores)",
col.names = c("Perfil", "N", "Brecha Vida (años)", "Brecha Mort. Adulta (%)",
"Esp. Vida Mujer", "Esp. Vida Hombre",
"Corrupción (0–1)", "Gasto Salud (% PIB)", "IDH Promedio"),
align = "lccccccc")| Perfil | N | Brecha Vida (años) | Brecha Mort. Adulta (%) | Esp. Vida Mujer | Esp. Vida Hombre | Corrupción (0–1) | Gasto Salud (% PIB) | IDH Promedio |
|---|---|---|---|---|---|---|---|---|
| Brecha Invertida | 69 | 1.59 | 1.57 | 68.8 | 67.2 | 0.724 | 5.5 | 0.609 |
| Brecha Moderada | 150 | 5.64 | 5.96 | 80.1 | 74.4 | 0.320 | 7.3 | 0.792 |
| Brecha Amplia | 179 | 5.89 | 7.96 | 76.9 | 71.0 | 0.560 | 6.1 | 0.710 |
| Brecha Extrema | 64 | 7.13 | 12.24 | 73.8 | 66.7 | 0.641 | 6.2 | 0.641 |
Lo que la Tabla 3 muestra es que no todas las brechas son iguales dentro de América Latina. Que en un país las mujeres vivan 8 años más que los hombres puede significar cosas muy distintas: en algunos casos es porque la violencia está matando hombres jóvenes, en otros porque el sistema de salud es tan débil que ni siquiera las mujeres tienen ventaja real. Los cuatro perfiles capturan esas historias diferentes, y eso es justamente lo que la pregunta de investigación necesitaba demostrar.
fviz_cluster(modelo_km,
data = scores_fa,
geom = "point",
ellipse = TRUE,
ellipse.type = "convex",
palette = c("#8E44AD", "#27AE60", "#E67E22", "#C0392B"),
alpha = 0.35,
ggtheme = theme_minimal()) +
labs(
title = "Segmentación de Brechas de Género en Salud: K-means sobre Factores (k = 4)",
subtitle = "América Latina — Proyección sobre scores factoriales (F1 y F2)",
caption = "Cada punto representa un registro país-año"
) +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40"),
legend.position = "bottom"
)
El Clúster 1 (morado) es el más compacto y se ubica en el centro — son
los países “promedio” de la región, donde ni la violencia ni el
desarrollo institucional son extremos. El perfil más común de América
Latina. El Clúster 2 (verde) aparece arriba a la izquierda, separado de
los demás. Son países donde la brecha por violencia es baja pero el
desarrollo institucional tampoco es alto — un perfil que probablemente
corresponde a países pequeños o con dinámicas demográficas particulares
dentro de la región. El Clúster 3 (naranja) se corre hacia la derecha —
son los países con mayor desarrollo institucional de la región, donde
aún existe brecha de género pero el Estado funciona mejor. El perfil de
las economías medianas más consolidadas. El Clúster 4 (rojo) es el que
más llama la atención. Se estira hacia abajo y hacia la izquierda, con
una dispersión mucho mayor que los otros. Ese estiramiento hacia valores
negativos en Factor2 es la huella de los países donde el Estado falla:
alta corrupción, bajo gasto en salud y mortalidad infantil elevada. Es
el perfil más vulnerable de la región y el que más se aleja del
resto.
ggplot(datos_g, aes(x = Perfil, y = brecha_vida, fill = Perfil)) +
geom_boxplot(alpha = 0.75, outlier.size = 0.8, outlier.alpha = 0.4) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray30") +
scale_fill_manual(values = c(
"Brecha Invertida" = "#8E44AD",
"Brecha Moderada" = "#27AE60",
"Brecha Amplia" = "#E67E22",
"Brecha Extrema" = "#C0392B"
)) +
labs(
title = "Figura 6: Distribución de la Brecha de Vida por Perfil Estructural",
subtitle = "América Latina — La línea discontinua marca brecha = 0",
x = NULL, y = "Brecha (años: mujer − hombre)"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40"),
axis.text.x = element_text(angle = 15, hjust = 1),
legend.position = "none"
)tabla_cruzada <- datos_g %>%
count(Perfil, politicalRegime) %>%
group_by(Perfil) %>%
mutate(Proporcion = n / sum(n)) %>%
ungroup()
ggplot(tabla_cruzada, aes(x = Perfil, y = Proporcion, fill = politicalRegime)) +
geom_bar(stat = "identity", position = "fill",
color = "white", linewidth = 0.3) +
scale_y_continuous(labels = percent_format()) +
scale_fill_manual(values = colores_regimen, name = "Régimen Político") +
labs(
title = "Figura 7: Composición Política de los Perfiles de Brecha de Género",
subtitle = "América Latina — ¿El régimen político determina el tipo de desigualdad de género en salud?",
x = "Perfil Estructural (K-means)", y = "Proporción"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40"),
legend.position = "right",
axis.text.x = element_text(angle = 15, hjust = 1)
)Brecha Invertida Dominada por autocracia electoral (naranja, ~40%) y electoral democracy (azul claro, ~55%), con casi nada de liberal democracy. Es el perfil más “autoritario” del conjunto. Tiene sentido: las situaciones donde los hombres no viven más que las mujeres suelen coincidir con contextos de mayor inestabilidad institucional. Brecha Moderada Aquí aparece con fuerza la liberal democracy (azul oscuro, ~45%). Es el único perfil donde ese régimen tiene presencia significativa. Esto sugiere que los países con instituciones más consolidadas tienden a tener brechas de género moderadas, ni extremas ni invertidas. Brecha Amplia Mezcla de electoral democracy y liberal democracy, con algo de autocracia electoral. Un perfil intermedio en términos políticos. Brecha Extrema Casi 100% electoral democracy. Prácticamente sin autocracia ni liberal democracy. Esto es llamativo: las brechas más grandes no ocurren en los regímenes más autoritarios sino en democracias electorales, lo que sugiere que este tipo de brecha extrema es un fenómeno estructural que persiste incluso en contextos de cierta apertura política.
tabla_cont <- table(datos_g$Perfil, datos_g$politicalRegime)
kable(as.data.frame.matrix(tabla_cont),
caption = "Tabla 4: Distribución de regímenes políticos por perfil de brecha — América Latina (frecuencias absolutas)")| Closed autocracy | Electoral autocracy | Electoral democracy | Liberal democracy | |
|---|---|---|---|---|
| Brecha Invertida | 1 | 28 | 40 | 0 |
| Brecha Moderada | 1 | 0 | 78 | 71 |
| Brecha Amplia | 0 | 20 | 152 | 7 |
| Brecha Extrema | 0 | 0 | 64 | 0 |
##
## Prueba Chi-cuadrado de independencia:
## χ² = 229.68
## gl = 9
## p-valor = 1.923054e-44
El régimen político y el tipo de brecha de género en salud sí están relacionados en América Latina. La distribución de regímenes que ves en la Figura 7 donde por ejemplo la Brecha Extrema es casi exclusivamente democracia electoral, o donde la liberal democracy se concentra en Brecha Moderada no es coincidencia. Es un patrón estadísticamente sólido. Dicho de otro modo: conocer el régimen político de un país-año te da información real sobre qué tipo de brecha de género es probable que tenga..
colombia <- datos_g %>%
filter(Country == "Colombia") %>%
arrange(Year)
cat("Perfil histórico de Colombia:\n")## Perfil histórico de Colombia:
##
## Brecha Invertida Brecha Moderada Brecha Amplia Brecha Extrema
## 0 9 9 3
ggplot(colombia, aes(x = Year)) +
geom_line(aes(y = lifeExpectancyData_female, color = "Mujeres"), linewidth = 1.3) +
geom_line(aes(y = lifeExpectancyData_male, color = "Hombres"), linewidth = 1.3) +
geom_ribbon(aes(ymin = lifeExpectancyData_male,
ymax = lifeExpectancyData_female),
alpha = 0.15, fill = "#2E86C1") +
geom_text(aes(y = (lifeExpectancyData_female + lifeExpectancyData_male) / 2,
label = round(brecha_vida, 1)),
size = 2.8, color = "#2E86C1", nudge_x = 0.3) +
scale_color_manual(values = c("Mujeres" = "#C0392B", "Hombres" = "#1A5276")) +
labs(
title = "Figura 8: Esperanza de Vida por Sexo en Colombia (2000–2019)",
subtitle = "El área sombreada representa la brecha de género. Números = diferencia en años",
x = "Año", y = "Esperanza de vida (años)", color = NULL
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40", size = 9),
legend.position = "bottom"
)
Entre 2000 y 2019, la brecha de esperanza de vida en Colombia mostró una
tendencia decreciente estadísticamente consistente, pasando de 8 años en
2000 a un mínimo de 5.2 años hacia 2018, lo que representa una reducción
del 35% en el periodo, impulsada principalmente por una ganancia más
acelerada en la esperanza de vida masculina respecto a la femenina
tabla_col <- colombia %>%
dplyr::select(Year, Perfil, lifeExpectancyData_female,
lifeExpectancyData_male, brecha_vida, brecha_mort_adult) %>%
mutate(across(where(is.numeric), ~round(., 2)))
kable(tabla_col,
caption = "Tabla 5: Trayectoria histórica de Colombia — Brechas de género en salud (2000–2019)",
col.names = c("Año", "Perfil K-means", "Esp. Vida Mujer",
"Esp. Vida Hombre", "Brecha Vida (años)", "Brecha Mort. Adulta"),
align = "lccccc")| Año | Perfil K-means | Esp. Vida Mujer | Esp. Vida Hombre | Brecha Vida (años) | Brecha Mort. Adulta |
|---|---|---|---|---|---|
| 2000 | Brecha Extrema | 76.63 | 68.64 | 7.99 | 0.11 |
| 2001 | Brecha Extrema | 76.68 | 68.75 | 7.93 | 0.11 |
| 2002 | Brecha Extrema | 76.91 | 68.92 | 7.99 | 0.12 |
| 2003 | Brecha Amplia | 76.99 | 70.19 | 6.80 | 0.09 |
| 2004 | Brecha Amplia | 77.43 | 70.62 | 6.81 | 0.09 |
| 2005 | Brecha Amplia | 77.67 | 71.27 | 6.40 | 0.08 |
| 2006 | Brecha Amplia | 77.85 | 71.59 | 6.26 | 0.08 |
| 2007 | Brecha Amplia | 78.23 | 72.19 | 6.04 | 0.07 |
| 2008 | Brecha Amplia | 78.40 | 72.44 | 5.96 | 0.07 |
| 2009 | Brecha Amplia | 78.94 | 72.61 | 6.33 | 0.08 |
| 2010 | Brecha Amplia | 79.00 | 72.94 | 6.06 | 0.07 |
| 2011 | Brecha Amplia | 79.63 | 73.74 | 5.89 | 0.07 |
| 2012 | Brecha Moderada | 79.86 | 74.03 | 5.83 | 0.07 |
| 2013 | Brecha Moderada | 80.11 | 74.34 | 5.77 | 0.06 |
| 2014 | Brecha Moderada | 80.00 | 74.70 | 5.30 | 0.06 |
| 2015 | Brecha Moderada | 79.99 | 74.68 | 5.31 | 0.06 |
| 2016 | Brecha Moderada | 80.26 | 74.87 | 5.39 | 0.06 |
| 2017 | Brecha Moderada | 80.38 | 75.17 | 5.21 | 0.05 |
| 2018 | Brecha Moderada | 80.46 | 75.16 | 5.30 | 0.06 |
| 2019 | Brecha Moderada | 80.55 | 75.33 | 5.22 | 0.05 |
| 2020 | Brecha Moderada | 79.28 | 73.18 | 6.10 | 0.06 |
Colombia presenta una trayectoria coherente dentro del contexto latinoamericano: la brecha comenzó en casi 8 años en el 2000 —reflejo del impacto diferencial del conflicto armado sobre la mortalidad masculina— y se redujo progresivamente hasta estabilizarse alrededor de 5–6 años hacia 2019. Esta convergencia refleja principalmente la reducción de la violencia como causa de muerte diferencial entre sexos, consistente con el proceso de paz. El K-means clasifica a Colombia en el perfil Brecha Amplia a partir de 2007.
colombia_hdi <- datos_g %>%
filter(Country == "Colombia") %>%
arrange(Year) %>%
dplyr::select(Year, Human_Development_Index,
brecha_mort_adult, brecha_mort_inf, Perfil) %>%
mutate(
brecha_mort_adult = as.numeric(brecha_mort_adult) * 100,
brecha_mort_inf = as.numeric(brecha_mort_inf) * 100,
Human_Development_Index = as.numeric(Human_Development_Index)
)
escala <- max(c(colombia_hdi$brecha_mort_adult,
colombia_hdi$brecha_mort_inf), na.rm = TRUE) /
max(colombia_hdi$Human_Development_Index, na.rm = TRUE)
colombia_long <- colombia_hdi %>%
pivot_longer(cols = c(brecha_mort_adult, brecha_mort_inf),
names_to = "Variable", values_to = "Valor") %>%
mutate(Variable = recode(Variable,
"brecha_mort_adult" = "Brecha Mort. Adulta (%)",
"brecha_mort_inf" = "Brecha Mort. Infantil (%)"))
ggplot() +
geom_line(data = colombia_long,
aes(x = Year, y = Valor, color = Variable),
linewidth = 1.2) +
geom_point(data = colombia_long,
aes(x = Year, y = Valor, color = Variable), size = 2) +
geom_line(data = colombia_hdi,
aes(x = Year, y = Human_Development_Index * escala),
color = "gray30", linewidth = 1.1, linetype = "dashed") +
geom_point(data = colombia_hdi,
aes(x = Year, y = Human_Development_Index * escala),
color = "gray30", size = 2) +
scale_y_continuous(
name = "Brecha de Mortalidad (%)",
sec.axis = sec_axis(~ . / escala,
name = "Índice de Desarrollo Humano (IDH)")
) +
scale_color_manual(values = c(
"Brecha Mort. Adulta (%)" = "#C0392B",
"Brecha Mort. Infantil (%)" = "#E67E22"
)) +
scale_x_continuous(breaks = seq(2000, 2019, 2)) +
annotate("text", x = 2016, y = colombia_hdi$Human_Development_Index[17] * escala + 1.5,
label = "IDH", color = "gray30", size = 3.5, fontface = "italic") +
labs(
title = "Figura 9: IDH y Brechas de Mortalidad de Género en Colombia (2000–2019)",
subtitle = "Línea discontinua = IDH (eje derecho). Líneas sólidas = brechas de mortalidad (eje izquierdo)",
x = "Año", color = NULL
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(color = "gray40", size = 9),
legend.position = "bottom",
axis.title.y.right = element_text(color = "gray30"),
axis.text.y.right = element_text(color = "gray30")
)El análisis factorial combinado con K-means sobre brechas de género en salud en América Latina permite responder la pregunta de investigación con cuatro hallazgos concretos:
1. El análisis factorial identifica dimensiones latentes claras que subyacen a las variables de brecha de género: una dimensión de desarrollo institucional y desarrollo humano integral (en la que el IDH carga junto al PIB y el gasto en salud), y otra de mortalidad diferencial por violencia. Trabajar sobre estos factores mejora la calidad del agrupamiento respecto al K-means directo sobre variables crudas.
2. Existen cuatro perfiles estructurales de desigualdad de género claramente diferenciados dentro de la región. La brecha en esperanza de vida no es uniforme: va desde casos donde los hombres viven más (Brecha Invertida, Haití) hasta diferencias de casi 10 años (Brecha Extrema, El Salvador). El IDH promedio varía sistemáticamente entre perfiles, confirmando que el nivel de desarrollo humano es un determinante estructural de la magnitud de la brecha.
3. El régimen político se asocia significativamente con el perfil de brecha (p < 0.001), pero no de forma determinista. Las autocracias concentran los casos de Brecha Invertida, mientras que las democracias liberales presentan brechas amplias pero estables.
4. Colombia muestra una reducción histórica de la brecha consistente con la disminución del conflicto armado, manteniéndose en el perfil Brecha Amplia y complementando el diagnóstico del modelo QDA: el país ha consolidado avances en bienestar, pero la persistencia de una brecha de 5–6 años refleja las desigualdades estructurales de género propias de las democracias electorales de renta media en América Latina.
# Tabla de perfiles como imagen
library(gridExtra)
library(grid)
tabla_img <- perfiles %>%
dplyr::select(Perfil, N, Brecha_Vida, Brecha_MortAd,
Esp_Vida_F, Esp_Vida_M, Gasto_Salud, IDH_Medio) %>%
rename(
"Brecha Vida (a)" = Brecha_Vida,
"Mort. Adulta (%)" = Brecha_MortAd,
"Esp. Vida Mujer" = Esp_Vida_F,
"Esp. Vida Hombre" = Esp_Vida_M,
"Gasto Salud" = Gasto_Salud,
"IDH Prom." = IDH_Medio
)
png("tabla_perfiles.png", width = 1800, height = 400, res = 150)
grid.table(tabla_img, rows = NULL)
dev.off()## png
## 2
Aqui cargamos los datos de nuestra base de datos.
Antes de proceder con el agrupamiento, es fundamental evaluar el comprotamiento del espacio multivariado global mediante el Análisis de Componentes Principales (PCA). Dado que las 14 variables seleccionadas operan en unidades y escalas disímiles (tasas de mortalidad, coberturas porcentuales de vacunación, índices de percepción y valores monetarios), se aplica una estandarización Z-score. El objetivo principal es reducir la dimensionalidad del conjunto de datos. Además, se le aplica una transformación logarítmica al PIB per cápita PPP para permitir un análisis más limpio.
vars_pca <- c(
"gdpPerCapitaPPP", "inflationConsumerPrices", "corruptionIndex",
"CHEPercentGDP", "OOPEPercentCHE", "agricultureShare", "industryShare",
"diptheriaImmCoverage", "measlesImmCoverage", "ageDependencyRatio",
"underFiveMortality_bothSexes", "adultMortality_bothSexes",
"hypertension_bothSexes", "alcoholConsumers_bothSexes"
)
# 1. Filtrado para el año transversal (2019) y aislamiento de metadatos
datos_pca_2019 <- datos %>%
filter(Year == 2019) %>%
# Seleccionamos las 14 variables + el HDI que necesitamos para categorizar
dplyr::select(Country, all_of(vars_pca)) %>%
# Limpiamos filas con datos faltantes
na.omit()
# 2. Preparación de la matriz de entrenamiento para el PCA
# Se aplica el logaritmo al PIB para obtener una dispersión más estable
matriz_pca_2019 <- datos_pca_2019 %>%
mutate(gdpPerCapitaPPP = log(gdpPerCapitaPPP + 1)) %>%
dplyr::select(all_of(vars_pca)) %>%
as.data.frame()
rownames(matriz_pca_2019) <- datos_pca_2019$Country
# 3. Ejecución del PCA
pca_2019 <- prcomp(matriz_pca_2019, center = TRUE, scale. = TRUE)
# 4. Construcción de la tabla de Autovalores y Criterios de Selección dependiendo de Varianza
autovalores <- pca_2019$sdev^2
resumen_pca <- summary(pca_2019)$importance
tabla_criterios <- data.frame(
Componente = paste0("PC", 1:length(autovalores)),
`Autovalor (Criterio Kaiser)` = round(autovalores, 4),
`Varianza Individual` = round(resumen_pca[2, ], 4),
`Varianza Acumulada` = round(resumen_pca[3, ], 4)
)
# Renderizado elegante para el reporte HTML
kable(tabla_criterios[1:6, ],
col.names = c("Componente", "Autovalor (Kaiser)", "Varianza Individual", "Varianza Acumulada"),
align = "c",
caption = "Evaluación de Criterios de Selección de Componentes Principales (Top 6)")| Componente | Autovalor (Kaiser) | Varianza Individual | Varianza Acumulada | |
|---|---|---|---|---|
| PC1 | PC1 | 6.3828 | 0.4559 | 0.4559 |
| PC2 | PC2 | 1.6747 | 0.1196 | 0.5755 |
| PC3 | PC3 | 1.2185 | 0.0870 | 0.6626 |
| PC4 | PC4 | 1.0772 | 0.0770 | 0.7395 |
| PC5 | PC5 | 0.8555 | 0.0611 | 0.8006 |
| PC6 | PC6 | 0.6880 | 0.0492 | 0.8498 |
# 5. Renderizado del Gráfico de Sedimentación
fviz_eig(pca_2019,
addlabels = TRUE,
barfill = "violet",
barcolor = "violet",
linecolor = "#e74c3c",
main = "Scree Plot de Varianza Explicada") +
theme_minimal()Para decidir con cuántas componentes nos quedamos para resumir el mundo, aplicamos dos reglas muy sencillas:
Criterio de Kaiser: Nos dice que solo debemos elegir los componentes que tengan un autovalor mayor a 1.0 (ya que aportan más información que una variable sola). En nuestro caso, las primeras cuatro componentes cumplen la regla: PC1 (6.38), PC2 (1.67), PC3 (1.21) y PC4 (1.07). A partir de la quinta, el valor cae por debajo de 1.
El porcentaje de varianza explicada: Buscamos que las componentes elegidas sumen, al menos, el 70% de toda la información original. La primera componente explica el 45.59%, la segunda el 11.96%, la tercera el 8.70% y la cuarta el 7.69%. Al sumarlas, logramos capturar el 73.95% de la información global.
Basándonos en ambas reglas, elegimos las primeras 4 componentes principales. Con ellas reducimos el problema de 14 variables a solo 4 resúmenes matemáticos, manteniendo casi el 74% de la varianza original de los datos para poder agrupar los países con total confianza. Ahora, procedemos con la interpretación de estos componentes.
## PC1 PC2 PC3 PC4
## gdpPerCapitaPPP 0.35758658 0.01794575 -0.14045882 0.10450487
## inflationConsumerPrices -0.07474660 -0.06433737 0.63979437 0.00974436
## corruptionIndex -0.29423305 -0.35370604 -0.07592380 -0.08095823
## CHEPercentGDP 0.16699673 0.38601049 0.09070014 0.39055684
## OOPEPercentCHE -0.19789144 -0.30110480 -0.36252332 -0.05817283
## agricultureShare -0.33942219 0.07143459 0.13449693 -0.20455358
## industryShare 0.23605077 -0.39522252 -0.06244338 0.27398230
## diptheriaImmCoverage 0.29075795 -0.12411980 0.36397671 -0.29534270
## measlesImmCoverage 0.30720164 -0.15489372 0.33362677 -0.24172463
## ageDependencyRatio -0.31652775 0.26340756 0.12925176 0.03172409
## underFiveMortality_bothSexes -0.34828204 0.11686289 -0.01868244 0.13620541
## adultMortality_bothSexes -0.30210385 0.06850015 0.31451730 0.24713756
## hypertension_bothSexes -0.03468341 -0.41052639 0.18056019 0.66615201
## alcoholConsumers_bothSexes 0.22163589 0.41688883 -0.10567762 0.19887294
# 1. Definición de umbrales parametrizados
umbral_alta <- 0.40
umbral_moderada <- 0.30
umbral_baja <- 0.20
# 2. Extracción y transformación de la matriz de rotación
loadings_df <- as.data.frame(pca_2019$rotation[, 1:4]) %>%
rownames_to_column(var = "Variable") %>%
pivot_longer(
cols = starts_with("PC"),
names_to = "Componente",
values_to = "Carga_Factorial"
) %>%
mutate(
Valor_Absoluto = abs(Carga_Factorial),
Direccion = ifelse(Carga_Factorial >= 0, "Positiva (+)", "Negativa (-)"),
# Clasificación basada en tus umbrales
Impacto = case_when(
Valor_Absoluto >= umbral_alta ~ "Alta",
Valor_Absoluto >= umbral_moderada ~ "Moderada",
Valor_Absoluto >= umbral_baja ~ "Baja",
TRUE ~ "Insignificante"
),
Impacto = factor(Impacto, levels = c("Alta", "Moderada", "Baja", "Insignificante"))
)
# 3. Función generadora de tablas formateadas por Componente
generar_tabla_pc <- function(pc_nombre) {
tabla_filtrada <- loadings_df %>%
filter(Componente == pc_nombre & Impacto != "Insignificante") %>%
arrange(Impacto, desc(Valor_Absoluto)) %>%
dplyr::select(Variable, Carga_Factorial, Direccion, Impacto)
# Renderizado elegante con knitr y kableExtra para tu HTML
knitr::kable(
tabla_filtrada,
digits = 4,
align = "lcrr",
caption = paste("Variables dominantes en el", pc_nombre, "(Umbral Mínimo: 0.20)")
)
}
generar_tabla_pc("PC1")| Variable | Carga_Factorial | Direccion | Impacto |
|---|---|---|---|
| gdpPerCapitaPPP | 0.3576 | Positiva (+) | Moderada |
| underFiveMortality_bothSexes | -0.3483 | Negativa (-) | Moderada |
| agricultureShare | -0.3394 | Negativa (-) | Moderada |
| ageDependencyRatio | -0.3165 | Negativa (-) | Moderada |
| measlesImmCoverage | 0.3072 | Positiva (+) | Moderada |
| adultMortality_bothSexes | -0.3021 | Negativa (-) | Moderada |
| corruptionIndex | -0.2942 | Negativa (-) | Baja |
| diptheriaImmCoverage | 0.2908 | Positiva (+) | Baja |
| industryShare | 0.2361 | Positiva (+) | Baja |
| alcoholConsumers_bothSexes | 0.2216 | Positiva (+) | Baja |
| Variable | Carga_Factorial | Direccion | Impacto |
|---|---|---|---|
| alcoholConsumers_bothSexes | 0.4169 | Positiva (+) | Alta |
| hypertension_bothSexes | -0.4105 | Negativa (-) | Alta |
| industryShare | -0.3952 | Negativa (-) | Moderada |
| CHEPercentGDP | 0.3860 | Positiva (+) | Moderada |
| corruptionIndex | -0.3537 | Negativa (-) | Moderada |
| OOPEPercentCHE | -0.3011 | Negativa (-) | Moderada |
| ageDependencyRatio | 0.2634 | Positiva (+) | Baja |
| Variable | Carga_Factorial | Direccion | Impacto |
|---|---|---|---|
| inflationConsumerPrices | 0.6398 | Positiva (+) | Alta |
| diptheriaImmCoverage | 0.3640 | Positiva (+) | Moderada |
| OOPEPercentCHE | -0.3625 | Negativa (-) | Moderada |
| measlesImmCoverage | 0.3336 | Positiva (+) | Moderada |
| adultMortality_bothSexes | 0.3145 | Positiva (+) | Moderada |
| Variable | Carga_Factorial | Direccion | Impacto |
|---|---|---|---|
| hypertension_bothSexes | 0.6662 | Positiva (+) | Alta |
| CHEPercentGDP | 0.3906 | Positiva (+) | Moderada |
| diptheriaImmCoverage | -0.2953 | Negativa (-) | Baja |
| industryShare | 0.2740 | Positiva (+) | Baja |
| adultMortality_bothSexes | 0.2471 | Positiva (+) | Baja |
| measlesImmCoverage | -0.2417 | Negativa (-) | Baja |
| agricultureShare | -0.2046 | Negativa (-) | Baja |
PC1 (45.59%): Estructura y Desarrollo Humano Básico. Esta componente captura los datos macroestructurales del desarrollo global. Evalúa la transición material de las naciones al contrastar de forma inversa un bloque de bienestar -alta riqueza monetaria (\(0.35\)) y blindaje inmunológico (\(0.30\))- contra trampas de pobreza estructural, caracterizadas por altas tasas de mortalidad infantil (\(-0.34\)), alta dependencia demográfica (\(-0.31\)) y economías rezagadas en el sector primario agrícola (\(-0.33\)).
PC2 (11.96%): Estilos de Vida y Cobertura Financiera Pública. Esta componente abandona la macroeconomía para agrupar perfiles de comportamiento sociocultural y diseño de sistemas sanitarios. Identifica una paradoja del bienestar donde el desarrollo se asocia a modelos de financiamiento con fuerte respaldo del Estado (\(0.38\)) y bajo gasto de bolsillo, pero vinculados a patrones de consumo con alto impacto en alcohol (\(0.41\)). En su polo opuesto, visualiza economías desindustrializadas (\(-0.39\)) con alta prevalencia de hipertensión (\(-0.41\)) y desprotección financiera familiar (\(-0.30\)).
PC3 (8.70%): Inestabilidad Macroeconómica y Shocks de Precios. Esta componente aísla los fenómenos de vulnerabilidad económica temporal y estrés institucional. Está dominado de forma masiva por la presión inflacionaria (\(0.63\)), demostrando que las crisis de precios no ocurren en el vacío, sino que impactan de manera simultánea al desestabilizar el gasto de bolsillo en salud (\(-0.36\)), deteriorar los indicadores de mortalidad adulta (\(0.31\)) y deprimir las coberturas básicas de vacunación.
PC4 (7.69%): Eje de Transición Epidemiológica y Carga de Enfermedad Crónica. Esta componente se desentiende de la riqueza monetaria (el PIB no tiene peso aquí) para enfocar el análisis estrictamente en la salud biológica de las poblaciones. Captura de forma pura y cruda la transición hacia enfermedades no transmisibles del siglo XXI, liderada por una carga masiva en hipertensión (\(0.66\)) que presiona y obliga a los Estados a elevar el gasto sanitario total como porcentaje del PIB (\(0.39\)), aun en escenarios con sutiles rezagos en prevención de inmunización básica (\(-0.29\)).
# 1. Filtrado incluyendo el HDI
datos_grafico_2019 <- datos %>%
filter(Year == 2019) %>%
dplyr::select(Country, Human_Development_Index, all_of(vars_pca)) %>%
na.omit()
# 2. Construcción de scores (y transformación de HDI a numérico)
scores_df <- as.data.frame(pca_2019$x[, 1:4])
scores_df$Country <- rownames(matriz_pca_2019)
scores_df$HDI <- datos_grafico_2019$Human_Development_Index[match(scores_df$Country, datos_grafico_2019$Country)]
scores_df$HDI <- as.numeric(as.character(scores_df$HDI))
# 3. Visualización con gradiente que refleja HDI
ggplot(scores_df, aes(x = PC1, y = PC2, label = Country)) +
# El color ahora depende del valor continuo del HDI
geom_point(aes(color = HDI), size = 3.5, alpha = 0.9) +
# check_overlap evita que los nombres colapsen visualmente
geom_text(vjust = -0.9, size = 2.8, check_overlap = TRUE, color = "gray20") +
# Líneas guías del origen algebraico
geom_vline(xintercept = 0, linetype = "dashed", color = "gray60") +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray60") +
# Anotaciones conceptuales reales del PC1 (Eje X)
annotate("text", x = max(scores_df$PC1) + 2, y = 0,
label = "Desarrollo Material Alto →\n(PIB per Cápita,\nCoberturas de Inmunización)",
color = "#1b4f72", size = 3.2, fontface = "italic") +
annotate("text", x = min(scores_df$PC1), y = -0,
label = "← Rezago Estructural\n(Alta Mortalidad,\nDependencia Agrícola)",
color = "#7b241c", size = 3.2, fontface = "italic") +
# Anotaciones conceptuales reales del PC2 (Eje Y)
annotate("text", x = -.5, y = max(scores_df$PC2),
label = "↑ Cobertura Sanitaria Pública\n(Gasto CHE, Consumo Alcohol)",
color = "#1e8449", size = 3.2, fontface = "italic") +
annotate("text", x = -0, y = min(scores_df$PC2),
label = "↓ Desprotección Financiera (OOPE)\n(Prevalencia de Hipertensión)",
color = "#5d6d7e", size = 3.2, fontface = "italic") +
# Gradiente continuo personalizado: Rojo (0) -> Amarillo (0.5) -> Verde (1)
scale_color_gradientn(
colors = c("#c0392b", "#f1c40f", "#27ae60"),
limits = c(0, 1),
breaks = seq(0, 1, by = 0.2),
name = "Valor IDH"
) +
labs(
title = "Gradiente de Calidad de Vida en el Plano PC1 vs. PC2 (2019)",
subtitle = "Análisis del plano PC1 vs PC2 respecto al IDH",
x = "PC1: Transición Estructural y Desarrollo Humano Básico (45.59%)",
y = "PC2: Estilos de Vida y Cobertura Financiera Pública (11.96%)"
) +
xlim(min(scores_df$PC1) - 1.5, max(scores_df$PC1) + 3) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13, color = "#2c3e50"),
plot.subtitle = element_text(size = 10, color = "gray40"),
legend.position = "right",
legend.height = unit(1.5, "cm"),
panel.grid.minor = element_blank()
)Al evaluar el espacio geométrico delimitado por las dos primeras componentes principales, emerge un comportamiento visual contundente: el IDH varía de manera estrictamente horizontal a lo largo de PC1 (Transición Estructural y Desarrollo Humano Básico). La transición opera como un gradiente perfecto que se desplaza desde un rojo profundo en el extremo izquierdo (máximo rezago material y vulnerabilidad sanitaria) hacia un verde intenso en el extremo derecho (altos ingresos, industrialización y coberturas universales de inmunización). Esta distribución evidencia que la primera dimensión matemática del PCA se desplaza casi paralelamente con la medición tradicional de IDH las Naciones Unidas.
No obstante, es crítico notar la neutralidad del IDH respecto al eje vertical; PC2 (Estilos de vida y cobertura financiera pública) no altera el patrón del gradiente, lo que indica que naciones con niveles equivalentes de desarrollo material (puntos con el mismo color en el eje X) experimentan configuraciones de salud y consumo radicalmente distintas. Casos atípicos como el de la República Centroafricana, suspendido en el cuadrante superior izquierdo, corroboran la existencia de anomalías estructurales: estados con severas trampas de pobreza material que, sin embargo, sostienen dinámicas sanitarias u operativas divergentes a la norma de su bloque de ingresos.
# 2. Construcción de scores (y transformación de HDI a numérico)
scores_df <- as.data.frame(pca_2019$x[, 1:4])
scores_df$Country <- rownames(matriz_pca_2019)
scores_df$HDI <- datos_grafico_2019$Human_Development_Index[match(scores_df$Country, datos_grafico_2019$Country)]
scores_df$HDI <- as.numeric(as.character(scores_df$HDI))
# 3. Visualización con gradiente que refleja HDI
ggplot(scores_df, aes(x = PC2, y = PC3, label = Country)) +
# El color ahora depende del valor continuo del HDI
geom_point(aes(color = HDI), size = 3.5, alpha = 0.9) +
# check_overlap evita que los nombres colapsen visualmente
geom_text(vjust = -0.9, size = 2.8, check_overlap = TRUE, color = "gray20") +
# Líneas guías del origen algebraico
geom_vline(xintercept = 0, linetype = "dashed", color = "gray60") +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray60") +
# Anotaciones conceptuales reales del PC2 (Eje X)
annotate("text", x = max(scores_df$PC2) + 2, y = 0,
label = "Cobertura Sanitaria Pública →\n(Gasto CHE, Consumo Alcohol)",
color = "#1b4f72", size = 3.2, fontface = "italic") +
annotate("text", x = min(scores_df$PC2), y = 1,
label = "← Desprotección Financiera (OOPE)\n(Prevalencia de Hipertensión)",
color = "#7b241c", size = 3.2, fontface = "italic") +
# Anotaciones conceptuales reales del PC3 (Eje Y)
annotate("text", x = 0, y = max(scores_df$PC3) - 7,
label = "↑ Inestabilidad Macroeconómica\n(Alta Presión Inflacionaria)",
color = "#1e8449", size = 3.2, fontface = "italic") +
annotate("text", x = -1, y = min(scores_df$PC3),
label = "↓ Blindaje de Precios Estables\n(Bajo OOPE Sanitario)",
color = "#5d6d7e", size = 3.2, fontface = "italic") +
# Gradiente continuo personalizado: Rojo (0) -> Amarillo (0.5) -> Verde (1)
scale_color_gradientn(
colors = c("#c0392b", "#f1c40f", "#27ae60"),
limits = c(0, 1),
breaks = seq(0, 1, by = 0.2),
name = "Valor IDH"
) +
labs(
title = "Gradiente de Calidad de Vida en el Plano PC2 vs. PC3 (2019)",
subtitle = "Análisis del plano PC2 vs PC3 respecto al IDH",
x = "PC2: Estilos de Vida y Cobertura Financiera Pública (11.96%)",
y = "PC3: Inestabilidad Macroeconómica y Shocks de Precios (8.70%)"
) +
xlim(min(scores_df$PC2) - 1.5, max(scores_df$PC2) + 3) +
ylim(min(scores_df$PC3), max(scores_df$PC3) - 7) +
coord_cartesian(clip = "off") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13, color = "#2c3e50"),
plot.subtitle = element_text(size = 10, color = "gray40"),
legend.position = "right",
legend.height = unit(1.5, "cm"),
panel.grid.minor = element_blank()
)El panorama cambia drásticamente al inspeccionar el plano bidimensional compuesto por PC2 y PC3 (Inestabilidad Macroeconómica y Shocks de Precios). En esta proyección, el gradiente continuo de color que gobernaba de forma rectilínea el primer gráfico se disuelve por completo, dando paso a una “sopa de colores” aleatoria donde puntos rojos, amarillos y verdes coexisten en los mismos cuadrantes sin un patrón de vecindad aparente.
Este comportamiento geométrico demuestra empíricamente que el IDH de la ONU es incapaz de explicar o capturar la varianza contenida en estas dimensiones. La ortogonalidad (independencia) de estos ejes revela que variables críticas como el diseño de financiamiento sanitario (gasto de bolsillo frente a gasto público) y la resiliencia ante shocks inflacionarios operan de forma autónoma al estatus burocrático de desarrollo de los países. De este modo, dos estados catalogados de forma idéntica en las métricas de bienestar globales pueden habitar realidades opuestas en este plano, justificando la incorporación de modelos multivariados de aprendizaje no superficial para identificar las verdaderas vulnerabilidades institucionales que las mediciones unidimensionales tradicionales suelen invisibilizar.
Resulta muy provechoso sentarse a analizar la correlación entre PC1 y el IDH a lo largo de los años para estudiar qué tan cercanas son.
# Evolución histórica de la correlación (2000-2019)
loadings_2019 <- pca_2019$rotation[, 1:4]
# Creamos un contenedor para guardar los resultados de cada año
historico_correlaciones <- data.frame(Anio = integer(), Correlacion_PC1_HDI = numeric())
for(anio in 2000:2019) {
# 1. Filtramos y limpiamos los datos del año específico
datos_anio <- datos %>%
filter(Year == anio) %>%
dplyr::select(Country, Human_Development_Index, all_of(vars_pca)) %>%
na.omit()
# 2. Preparamos la matriz aplicando el logaritmo al PIB tal como en tu diseño
matriz_anio <- datos_anio %>%
mutate(gdpPerCapitaPPP = log(gdpPerCapitaPPP + 1)) %>%
dplyr::select(all_of(vars_pca)) %>%
as.data.frame()
# 3. Estandarizamos los datos de ese año específico
matriz_anio_escalada <- scale(matriz_anio)
# 4. Proyectamos los datos del año usando los loadings del mapa de 2019
scores_anio <- matriz_anio_escalada %*% loadings_2019
# 5. Calculamos la correlación local con el IDH de ese mismo año
hdi_local <- as.numeric(as.character(datos_anio$Human_Development_Index))
corr_local <- cor(scores_anio[, "PC1"], hdi_local, method = "pearson")
# 6. Guardamos en nuestra tabla histórica
historico_correlaciones <- rbind(
historico_correlaciones,
data.frame(Anio = anio, Correlacion_PC1_HDI = round(corr_local, 4))
)
}
# Media de correlación
mean(historico_correlaciones$Correlacion_PC1_HDI)## [1] 0.94839
# Renderizado de la tabla
knitr::kable(
historico_correlaciones,
col.names = c("Año", "Coeficiente de Correlación (r)"),
align = "cc",
caption = "Evolución de la Correlación Lineal entre el PC1 Estructural y el IDH (2000-2019)"
)| Año | Coeficiente de Correlación (r) |
|---|---|
| 2000 | 0.9573 |
| 2001 | 0.9572 |
| 2002 | 0.9564 |
| 2003 | 0.9548 |
| 2004 | 0.9533 |
| 2005 | 0.9511 |
| 2006 | 0.9484 |
| 2007 | 0.9516 |
| 2008 | 0.9540 |
| 2009 | 0.9444 |
| 2010 | 0.9480 |
| 2011 | 0.9488 |
| 2012 | 0.9484 |
| 2013 | 0.9464 |
| 2014 | 0.9444 |
| 2015 | 0.9402 |
| 2016 | 0.9391 |
| 2017 | 0.9409 |
| 2018 | 0.9422 |
| 2019 | 0.9409 |
La evaluación longitudinal de la primera componente principal mediante su proyección sobre la serie histórica (2000-2019) aporta la evidencia empírica definitiva sobre la robustez conceptual del espacio de características seleccionado. El análisis inferencial revela un coeficiente de correlación de Pearson promedio extraordinariamente alto, situándose en \(r = 0.9484\). Este resultado valida matemáticamente que el PC1 (Transición Estructural y Desarrollo Humano Básico) opera casi perfectamente con las dimensiones materiales y biológicas capturadas de forma sintética por el IDH de las Naciones Unidas, demostrando que la estructura subyacente de riqueza, inmunización y supervivencia infantil corre de forma paralela a las mediciones burocráticas globales.
Sin embargo, un examen minucioso del comportamiento dinámico revela una tendencia levemente decreciente a lo largo de las dos décadas, donde el coeficiente de correlación transita de forma paulatina desde \(r = 0.9573\) en el año 2000 hasta estabilizarse en el entorno del \(0.94\) en los años posteriores. Aunque esta sutil contracción marginal no compromete en absoluto la fuerza asociativa del modelo.
Este patrón sugiere que, a medida que el sistema internacional avanzó hacia el siglo XXI, la calidad de vida de las naciones comenzó a incorporar márgenes de varianza y heterogeneidades que la infraestructura económica y sanitaria básica ya no logran absorber por completo. De este modo, la rigidez del mapa global de inicios de milenio ha cedido sutilmente ante nuevas dinámicas cualitativas -tales como la eficiencia institucional, las transiciones epidemiológicas modernas y el diseño de la protección financiera pública analizados en las componentes subsiguientes- consolidando la necesidad de trascender los enfoques lineales tradicionales en favor de modelados predictivos multidimensionales más complejos.
matriz_pca_imputada <- matriz_pca_2019[rownames(matriz_pca_2019) != "Zimbabwe", ]
df <- scale(matriz_pca_imputada)
set.seed(5)
fviz_nbclust(df, kmeans, method = "wss") + geom_vline(xintercept = 4, linetype = 2)## K-means clustering with 4 clusters of sizes 21, 38, 66, 27
##
## Cluster means:
## gdpPerCapitaPPP inflationConsumerPrices corruptionIndex CHEPercentGDP
## 1 -1.1360072 -0.01870996 0.09566354 -0.06004701
## 2 1.1235740 -0.33573658 -1.29865859 0.86828911
## 3 0.1705472 0.01771659 0.29816465 -0.20663209
## 4 -1.1146583 0.44376311 1.02448983 -0.67023263
## OOPEPercentCHE agricultureShare industryShare diptheriaImmCoverage
## 1 -0.6756145 0.8939454 -0.8607837 0.2609293
## 2 -0.6858404 -0.9535162 0.2304927 0.5707715
## 3 0.2177241 -0.2107656 0.5067036 0.2578976
## 4 0.9585203 1.1618996 -0.8935076 -1.6366693
## measlesImmCoverage ageDependencyRatio underFiveMortality_bothSexes
## 1 0.0563452 1.0018748 0.7196173
## 2 0.5381096 -0.3906522 -0.7561483
## 3 0.3651517 -0.6230388 -0.3874252
## 4 -1.6937564 1.2935546 1.4515457
## adultMortality_bothSexes hypertension_bothSexes alcoholConsumers_bothSexes
## 1 1.3535693 -0.13498818 -0.5987661
## 2 -0.9129845 -0.47581685 1.2399152
## 3 -0.2844055 0.29474476 -0.2787330
## 4 0.9273786 0.05417178 -0.5980113
##
## Clustering vector:
## Afghanistan
## 4
## Angola
## 4
## Albania
## 3
## United Arab Emirates
## 3
## Argentina
## 3
## Armenia
## 3
## Australia
## 2
## Austria
## 2
## Azerbaijan
## 3
## Burundi
## 1
## Belgium
## 2
## Benin
## 4
## Burkina Faso
## 1
## Bangladesh
## 3
## Bulgaria
## 3
## Bahrain
## 3
## Bosnia and Herzegovina
## 3
## Belarus
## 3
## Bolivia (Plurinational State of)
## 3
## Brazil
## 3
## Bhutan
## 3
## Botswana
## 1
## Central African Republic
## 4
## Canada
## 2
## Switzerland
## 2
## Chile
## 2
## China
## 3
## Cote d'Ivoire
## 4
## Cameroon
## 4
## Congo
## 4
## Colombia
## 3
## Comoros
## 4
## Costa Rica
## 3
## Cyprus
## 2
## Czechia
## 2
## Germany
## 2
## Djibouti
## 1
## Denmark
## 2
## Dominican Republic
## 3
## Algeria
## 3
## Ecuador
## 3
## Egypt
## 3
## Spain
## 2
## Estonia
## 2
## Ethiopia
## 4
## Finland
## 2
## Fiji
## 1
## France
## 2
## Gabon
## 4
## United Kingdom of Great Britain and Northern Ireland
## 2
## Georgia
## 3
## Ghana
## 1
## Guinea
## 4
## Gambia
## 1
## Guinea-Bissau
## 4
## Equatorial Guinea
## 4
## Greece
## 2
## Guatemala
## 3
## Guyana
## 3
## Honduras
## 3
## Croatia
## 2
## Haiti
## 4
## Hungary
## 3
## Indonesia
## 3
## India
## 3
## Ireland
## 2
## Iran (Islamic Republic of)
## 3
## Iraq
## 3
## Iceland
## 2
## Israel
## 2
## Italy
## 2
## Jamaica
## 3
## Jordan
## 3
## Japan
## 2
## Kazakhstan
## 3
## Kenya
## 1
## Kyrgyzstan
## 3
## Cambodia
## 3
## Republic of Korea
## 2
## Kuwait
## 3
## Lao People's Democratic Republic
## 4
## Lebanon
## 3
## Liberia
## 4
## Libya
## 3
## Sri Lanka
## 3
## Lesotho
## 1
## Lithuania
## 2
## Luxembourg
## 2
## Latvia
## 2
## Morocco
## 3
## Republic of Moldova
## 3
## Madagascar
## 4
## Maldives
## 3
## Mexico
## 3
## North Macedonia
## 3
## Mali
## 4
## Malta
## 2
## Myanmar
## 3
## Mongolia
## 3
## Mozambique
## 1
## Mauritania
## 4
## Mauritius
## 3
## Malawi
## 1
## Malaysia
## 3
## Namibia
## 1
## Niger
## 4
## Nigeria
## 4
## Netherlands (Kingdom of the)
## 2
## Norway
## 2
## Nepal
## 3
## New Zealand
## 2
## Oman
## 3
## Pakistan
## 4
## Panama
## 3
## Peru
## 3
## Philippines
## 3
## Papua New Guinea
## 4
## Poland
## 2
## Portugal
## 2
## Paraguay
## 3
## Qatar
## 3
## Romania
## 3
## Russian Federation
## 3
## Rwanda
## 1
## Saudi Arabia
## 3
## Sudan
## 4
## Senegal
## 1
## Singapore
## 2
## Solomon Islands
## 1
## Sierra Leone
## 1
## El Salvador
## 3
## Slovakia
## 2
## Slovenia
## 2
## Sweden
## 2
## Eswatini
## 1
## Syrian Arab Republic
## 4
## Chad
## 4
## Togo
## 4
## Thailand
## 3
## Timor-Leste
## 1
## Trinidad and Tobago
## 3
## Tunisia
## 3
## Türkiye
## 3
## United Republic of Tanzania
## 1
## Uganda
## 1
## Ukraine
## 3
## Uruguay
## 2
## United States of America
## 2
## Uzbekistan
## 3
## Viet Nam
## 3
## South Africa
## 3
## Zambia
## 1
##
## Within cluster sum of squares by cluster:
## [1] 164.7602 110.1711 501.1577 294.2321
## (between_SS / total_SS = 49.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
| cluster | gdpPerCapitaPPP | inflationConsumerPrices | corruptionIndex | CHEPercentGDP | OOPEPercentCHE | agricultureShare | industryShare | diptheriaImmCoverage | measlesImmCoverage | ageDependencyRatio | underFiveMortality_bothSexes | adultMortality_bothSexes | hypertension_bothSexes | alcoholConsumers_bothSexes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 8.284293 | 0.0405395 | 0.5035238 | 0.0621667 | 0.2004857 | 0.4226972 | 0.1324796 | 0.9147619 | 0.8804762 | 0.7618858 | 0.0531286 | 0.2738714 | 0.3595238 | 0.2837048 |
| 2 | 10.880459 | 0.0165037 | 0.0823158 | 0.0895237 | 0.1985289 | 0.0363023 | 0.2201562 | 0.9523684 | 0.9447368 | 0.5297798 | 0.0038921 | 0.0700421 | 0.3367105 | 0.7502816 |
| 3 | 9.785470 | 0.0433013 | 0.5646970 | 0.0578470 | 0.3714303 | 0.1916479 | 0.2423479 | 0.9143939 | 0.9216667 | 0.4910456 | 0.0161939 | 0.1265697 | 0.3882879 | 0.3649152 |
| 4 | 8.308822 | 0.0756026 | 0.7841111 | 0.0441852 | 0.5131852 | 0.4787396 | 0.1298505 | 0.6844444 | 0.6470370 | 0.8105030 | 0.0775481 | 0.2355444 | 0.3721852 | 0.2838963 |
## [1] 21 38 66 27
fviz_cluster(km.res, data = df,
palette = c("yellow3", "deeppink4", "orangered3", "springgreen4"),
ellipse.type = "euclid", # Elipse de concentración
star.plot = TRUE, # Agregar segmentos desde centroides a los elementos
repel = TRUE, # Evitar el exceso de etiqueta (lenta)
ggtheme = theme_minimal())La verdadera capacidad de un modelo estadístico no reside únicamente en su precisión matemática, sino en su habilidad para revelar las dinámicas invisibles que gobiernan el desarrollo de las naciones. Tras la consolidación de una serie histórica de 2998 registros globales, el presente capítulo trasciende la descripción estadística para implementar un enfoque predictivo robusto.
El objetivo no es solo predecir la clasificación de los países según el PNUD, sino diagnosticar con rigor probabilístico cómo las variables institucionales y sanitarias actúan como factores determinantes en la movilidad —o estancamiento— de las economías internacionales. A continuación, se presenta la validación del rendimiento global del algoritmo y el diagnóstico estructural específico aplicado a Colombia, contrastando las predicciones del modelo con la trayectoria histórica y la realidad institucional contemporánea.
Aqui cargamos los datos de nuestra base de Datos
Tras un proceso de iteración técnica, revisión bibliográfica y pruebas de sensibilidad, hemos definido un conjunto robusto de variables para la construcción de nuestro modelo. Esta selección no responde únicamente a la disponibilidad de datos, sino a un criterio de coherencia teórica y capacidad discriminante.
El objetivo es capturar la multidimensionalidad del desarrollo humano a través de tres dimensiones críticas:
Dimensión Económica: Incluimos indicadores de PIB per cápita (en paridad de poder adquisitivo) y la composición sectorial de la matriz productiva (agricultura e industria). Para este indicador, aplicamos una transformación logarítmica (\(\log(\text{PIB}_{pc} + 1)\)) con el fin de normalizar su distribución, mitigar la asimetría propia de las brechas de riqueza global y mejorar la estabilidad del modelo frente a valores atípicos. Esto nos permite observar si la riqueza nacional se traduce en progreso o si el país depende de una economía primaria extractiva.
Dimensión de Bienestar y Salud: Integramos métricas de mortalidad (infantil y adulta) y coberturas de inmunización. Estas variables actúan como “sensores” de la eficacia real de la infraestructura sanitaria, más allá del gasto nominal.
Dimensión Institucional y Social: Incorporamos el índice de corrupción, la presión inflacionaria y variables demográficas. La inclusión de estos factores es lo que otorga a nuestro modelo la capacidad de detectar esas “barreras invisibles” —como la fragilidad institucional— que los indicadores macroeconómicos tradicionales suelen pasar por alto.
Este conjunto de variables constituye nuestro espacio de características (feature space), el cual ha sido depurado para eliminar problemas de data leakage (excluyendo el IDH del entrenamiento) y optimizado para maximizar la capacidad predictiva del modelo frente a la heterogeneidad de los estados globales y los niveles de desarrollo categorizados por la ONU.
vars_lda_robusto <- c(
"gdpPerCapitaPPP", "inflationConsumerPrices", "corruptionIndex",
"CHEPercentGDP", "OOPEPercentCHE", "agricultureShare", "industryShare",
"diptheriaImmCoverage", "measlesImmCoverage", "ageDependencyRatio",
"underFiveMortality_bothSexes", "adultMortality_bothSexes",
"hypertension_bothSexes", "alcoholConsumers_bothSexes"
)
datos_AD <- datos %>%
# Seleccionamos las 15 variables + el HDI que necesitamos para categorizar
dplyr::select(all_of(vars_lda_robusto), Human_Development_Index) %>%
# Limpiamos filas con datos faltantes
na.omit() %>%
# Creamos la categorización del PNUD
mutate(
Clase_Desarrollo = case_when(
Human_Development_Index < 0.55 ~ "1_Bajo",
Human_Development_Index >= 0.55 & Human_Development_Index < 0.70 ~ "2_Medio",
Human_Development_Index >= 0.70 & Human_Development_Index < 0.80 ~ "3_Alto",
Human_Development_Index >= 0.80 ~ "4_MuyAlto"
),
Clase_Desarrollo = factor(Clase_Desarrollo, levels = c("1_Bajo", "2_Medio", "3_Alto", "4_MuyAlto")),
gdpPerCapitaPPP = log(gdpPerCapitaPPP + 1),
)
table(datos_AD$Clase_Desarrollo)##
## 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 738 670 671 919
# Crear dataset reducido
datos_eda <- datos %>% dplyr::select(all_of(vars_lda_robusto))
# 3. Calcular métricas descriptivas clave
resumen_estadistico <- datos_eda %>%
pivot_longer(cols = everything(), names_to = "variable", values_to = "valor") %>%
group_by(variable) %>%
summarise(
Media = mean(valor, na.rm = TRUE),
Mediana = median(valor, na.rm = TRUE),
Desv_Estandar = sd(valor, na.rm = TRUE),
CV = Desv_Estandar / Media, # Coeficiente de Variación
Sesgo = skewness(valor, na.rm = TRUE), # Asimetría
Minimo = min(valor, na.rm = TRUE),
Maximo = max(valor, na.rm = TRUE)
) %>%
arrange(variable)
# Ver la tabla de resultados
print(resumen_estadistico)## # A tibble: 14 × 8
## variable Media Mediana Desv_Estandar CV Sesgo Minimo Maximo
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 CHEPercentGDP 6.00e-2 5.60e-2 0.0255 0.425 0.783 1.22e-2 2.21e-1
## 2 OOPEPercentCHE 3.59e-1 3.40e-1 0.194 0.540 0.428 2.17e-2 8.79e-1
## 3 adultMortality_… 1.88e-1 1.57e-1 0.119 0.636 1.59 4.28e-2 7.51e-1
## 4 ageDependencyRa… 6.22e-1 5.57e-1 0.191 0.307 0.568 1.73e-1 1.11e+0
## 5 agricultureShare 2.81e-1 2.27e-1 0.229 0.813 0.601 1.08e-3 9.19e-1
## 6 alcoholConsumer… 4.21e-1 4.24e-1 0.251 0.596 -0.0311 8.3 e-3 8.46e-1
## 7 corruptionIndex 5.20e-1 5.73e-1 0.308 0.593 -0.344 2 e-3 9.68e-1
## 8 diptheriaImmCov… 8.61e-1 9.2 e-1 0.152 0.176 -1.72 1.9 e-1 9.9 e-1
## 9 gdpPerCapitaPPP 2.14e+4 1.27e+4 23255. 1.09 1.87 7.03e+2 1.46e+5
## 10 hypertension_bo… 3.76e-1 3.78e-1 0.0633 0.168 -0.118 1.98e-1 5.66e-1
## 11 industryShare 1.99e-1 2.00e-1 0.0832 0.418 0.259 1.68e-2 5.96e-1
## 12 inflationConsum… 6.75e-2 3.55e-2 0.206 3.05 16.8 -1.69e-1 5.57e+0
## 13 measlesImmCover… 8.53e-1 9.2 e-1 0.152 0.178 -1.49 1.6 e-1 9.9 e-1
## 14 underFiveMortal… 4.16e-2 2.28e-2 0.0446 1.07 1.73 2.3 e-3 4.79e-1
# 4. (Opcional) Visualización rápida de las distribuciones
ggplot(datos_eda %>% pivot_longer(cols = everything(), names_to = "var", values_to = "val"),
aes(x = val)) +
geom_histogram(bins = 30, fill = "#2c3e50", color = "white") +
facet_wrap(~var, scales = "free") +
theme_minimal() +
labs(title = "Distribución de Variables Clave del Sistema Internacional", x = "", y = "Frecuencia")El análisis descriptivo e histogramas evidencian una alta heterogeneidad en las variables del sistema internacional, reflejando las profundas diferencias estructurales entre países. Variables como gdpPerCapitaPPP, inflationConsumerPrices, underFiveMortality_bothSexes y adultMortality_bothSexes presentan fuertes asimetrías positivas y alta dispersión, indicando la existencia de países con condiciones extremadamente distintas respecto a riqueza, estabilidad económica y salud pública. En contraste, indicadores como hypertension_bothSexes e industryShare muestran distribuciones más concentradas y estables. Asimismo, las coberturas de inmunización (diphtheriaImmCoverage y measlesImmCoverage) presentan asimetrías negativas, lo que indica que la mayoría de países alcanzan niveles altos de vacunación, aunque persisten casos rezagados.
Las métricas descriptivas confirman estos patrones: la inflación posee el mayor coeficiente de variación (CV=3.05) y el mayor sesgo (16.8), evidenciando una distribución extremadamente desigual y sensible a valores atípicos. Por su parte, el PIB per cápita muestra también una elevada variabilidad (CV=1.09), justificando la aplicación de transformaciones logarítmicas para estabilizar su comportamiento. En conjunto, los resultados validan que el conjunto de variables seleccionado captura adecuadamente la multidimensionalidad del desarrollo humano, integrando diferencias económicas, sanitarias e institucionales dentro de un espacio de características robusto y altamente discriminante. ## Visualización de las Variables
# Configuramos para ver 2 gráficos por ventana
par(mfrow = c(1, 2))
variables <- names(datos_AD)[!(names(datos_AD) %in% c("Clase_Desarrollo", "Human_Development_Index"))]
for(var in variables) {
boxplot(datos_AD[[var]] ~ datos_AD$Clase_Desarrollo,
data = datos_AD,
main = var,
xlab = "Grupo",
ylab = "Valor",
names = c("Bajo", "Medio", "Alto", "Muy Alto"),
col = c("#AED6F1", "#F5B7B1", "#ABEBC6", "#FAD7A1"),
las = 1,
cex.main = 1)
}Los análisis muestran que las variables seleccionadas tienen una alta capacidad para diferenciar los niveles de desarrollo entre países, evidenciando patrones claros y coherentes entre los cuatro grupos analizados (Bajo, Medio, Alto y MuyAlto).
Los resultados más importantes pueden resumirse en cuatro hallazgos principales:
El PIB per cápita separa claramente los niveles de desarrollo: La variable gdpPerCapitaPPP presenta un incremento progresivo y muy marcado entre grupos, confirmando que el crecimiento económico sigue siendo un componente fundamental del desarrollo. Además, la transformación logarítmica permitió reducir la dispersión y hacer más estable la comparación entre países.
La estructura económica cambia con el desarrollo: Los países menos desarrollados dependen significativamente más de la agricultura (agricultureShare), mientras que los grupos altos muestran mayor participación industrial (industryShare). Esto evidencia una transición desde economías primarias hacia modelos productivos más diversificados e industrializados.
La salud pública es uno de los indicadores más discriminantes: Las tasas de mortalidad infantil y adulta disminuyen drásticamente conforme aumenta el nivel de desarrollo, mientras que las coberturas de vacunación alcanzan valores cercanos a la universalidad en los grupos altos. Esto demuestra que el acceso efectivo a salud y prevención está fuertemente ligado al desarrollo humano.
La calidad institucional influye directamente en el desarrollo: El índice de corrupción y la inflación muestran mayor inestabilidad y peores valores en los países de menor desarrollo. Esto respalda la hipótesis de que las barreras institucionales y la fragilidad económica afectan directamente la capacidad de progreso de un país.
En conjunto, los boxplots validan que el espacio de características construido logra representar de manera efectiva la multidimensionalidad del desarrollo humano, integrando factores económicos, sanitarios e institucionales con una fuerte capacidad discriminante entre grupos.
## $multivariate_normality
## Test Statistic p.value Method MVN
## 1 Mardia Skewness 227001.186 <0.001 asymptotic ✗ Not normal
## 2 Mardia Kurtosis 817.765 <0.001 asymptotic ✗ Not normal
##
## $univariate_normality
## Test Variable Statistic p.value Normality
## 1 Anderson-Darling gdpPerCapitaPPP 20.640 <0.001 ✗ Not normal
## 2 Anderson-Darling inflationConsumerPrices 531.733 <0.001 ✗ Not normal
## 3 Anderson-Darling corruptionIndex 81.771 <0.001 ✗ Not normal
## 4 Anderson-Darling CHEPercentGDP 23.578 <0.001 ✗ Not normal
## 5 Anderson-Darling OOPEPercentCHE 30.400 <0.001 ✗ Not normal
## 6 Anderson-Darling agricultureShare 87.140 <0.001 ✗ Not normal
## 7 Anderson-Darling industryShare 5.546 <0.001 ✗ Not normal
## 8 Anderson-Darling diptheriaImmCoverage 222.104 <0.001 ✗ Not normal
## 9 Anderson-Darling measlesImmCoverage 185.773 <0.001 ✗ Not normal
## 10 Anderson-Darling ageDependencyRatio 86.104 <0.001 ✗ Not normal
## 11 Anderson-Darling underFiveMortality_bothSexes 185.646 <0.001 ✗ Not normal
## 12 Anderson-Darling adultMortality_bothSexes 95.788 <0.001 ✗ Not normal
## 13 Anderson-Darling hypertension_bothSexes 0.950 0.016 ✗ Not normal
## 14 Anderson-Darling alcoholConsumers_bothSexes 45.996 <0.001 ✗ Not normal
##
## $descriptives
## Variable n Mean Std.Dev Median Min Max 25th
## 1 gdpPerCapitaPPP 2998 9.386 1.187 9.478 6.681 11.889 8.400
## 2 inflationConsumerPrices 2998 0.062 0.160 0.036 -0.169 5.139 0.017
## 3 corruptionIndex 2998 0.498 0.310 0.552 0.002 0.966 0.179
## 4 CHEPercentGDP 2998 0.059 0.025 0.055 0.012 0.219 0.040
## 5 OOPEPercentCHE 2998 0.356 0.193 0.338 0.022 0.859 0.189
## 6 agricultureShare 2998 0.278 0.231 0.213 0.001 0.919 0.064
## 7 industryShare 2998 0.202 0.084 0.203 0.023 0.596 0.143
## 8 diptheriaImmCoverage 2998 0.868 0.148 0.930 0.190 0.990 0.820
## 9 measlesImmCoverage 2998 0.858 0.147 0.920 0.160 0.990 0.800
## 10 ageDependencyRatio 2998 0.617 0.190 0.552 0.173 1.112 0.480
## 11 underFiveMortality_bothSexes 2998 0.040 0.043 0.023 0.002 0.479 0.008
## 12 adultMortality_bothSexes 2998 0.186 0.119 0.154 0.043 0.751 0.094
## 13 hypertension_bothSexes 2998 0.376 0.064 0.378 0.198 0.566 0.333
## 14 alcoholConsumers_bothSexes 2998 0.435 0.251 0.434 0.009 0.846 0.248
## 75th Skew Kurtosis
## 1 10.394 -0.176 2.082
## 2 0.072 19.279 499.709
## 3 0.779 -0.249 1.647
## 4 0.077 0.744 3.947
## 5 0.497 0.415 2.251
## 6 0.448 0.631 2.272
## 7 0.254 0.292 3.431
## 8 0.970 -1.837 6.195
## 9 0.960 -1.549 5.035
## 10 0.771 0.593 2.434
## 11 0.062 1.651 7.580
## 12 0.248 1.581 6.125
## 13 0.419 -0.076 2.924
## 14 0.688 -0.086 1.771
##
## $data
## # A tibble: 2,998 × 14
## gdpPerCapitaPPP inflationConsumerPrices corruptionIndex CHEPercentGDP
## <dbl> <dbl> <dbl> <dbl>
## 1 7.55 0.127 0.942 0.0995
## 2 7.57 0.0678 0.954 0.106
## 3 7.68 0.0868 0.957 0.099
## 4 7.69 0.264 0.957 0.103
## 5 7.85 -0.0681 0.957 0.0982
## 6 7.95 0.0218 0.959 0.0857
## 7 7.92 0.118 0.959 0.0856
## 8 8.00 0.0644 0.962 0.079
## 9 8.02 0.0739 0.94 0.0881
## 10 8.01 0.0467 0.925 0.0953
## # ℹ 2,988 more rows
## # ℹ 10 more variables: OOPEPercentCHE <dbl>, agricultureShare <dbl>,
## # industryShare <dbl>, diptheriaImmCoverage <dbl>, measlesImmCoverage <dbl>,
## # ageDependencyRatio <dbl>, underFiveMortality_bothSexes <dbl>,
## # adultMortality_bothSexes <dbl>, hypertension_bothSexes <dbl>,
## # alcoholConsumers_bothSexes <dbl>
##
## $subset
## NULL
##
## $outlierMethod
## [1] "none"
##
## attr(,"class")
## [1] "mvn"
El análisis de normalidad mostró que los datos no siguen una distribución normal ni a nivel univariado ni multivariado. Las pruebas de Mardia y Anderson-Darling presentaron valores significativos (p<0.001) en prácticamente todas las variables, evidenciando asimetrías, curtosis elevadas y presencia de valores extremos, especialmente en inflación, mortalidad y coberturas de inmunización. No obstante, debido al tamaño de la muestra (n=2998), es posible asumir un comportamiento aproximadamente normal desde el enfoque inferencial gracias al Teorema Central del Límite, lo que otorga robustez estadística al modelo y permite aplicar técnicas multivariadas sin que la falta estricta de normalidad represente una limitación crítica.
A nivel descriptivo, los resultados reflejan una fuerte heterogeneidad entre países y validan la capacidad discriminante de las variables seleccionadas. El PIB per cápita transformado logarítmicamente mostró una distribución más estable, mientras que variables como mortalidad, corrupción e inflación evidenciaron grandes diferencias estructurales entre niveles de desarrollo. Asimismo, las coberturas de vacunación y los indicadores de salud presentaron patrones coherentes con el desarrollo humano, confirmando que el espacio de características construido logra representar de manera efectiva la multidimensionalidad económica, sanitaria e institucional de los países.
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: datos_AD_numericos
## Chi-Sq (approx.) = 18768, df = 315, p-value < 2.2e-16
Tras realizar la prueba de Box’s M, los resultados revelaron una violación significativa del supuesto de homocedasticidad (\(\chi^2 \approx 18768, p < 2.2 \times 10^{-16}\)), lo que indica que las matrices de covarianza entre los niveles de desarrollo no son homogéneas. Ante esta evidencia, descartamos el uso del Análisis Discriminante Lineal (LDA) —que asume varianzas iguales— en favor del Análisis Discriminante Cuadrático (QDA). Esta elección metodológica es crucial para nuestra investigación, ya que el QDA permite modelar estructuras de covarianza flexibles para cada grupo, capturando con mayor precisión las distintas dinámicas de dispersión y heterogeneidad presentes en la calidad de vida de las naciones del sistema internacional.
set.seed(123)
indices_entrenamiento <- createDataPartition(datos_para_modelo$Clase_Desarrollo, p = 0.70, list = FALSE)
entrenamiento <- datos_para_modelo[indices_entrenamiento, ]
prueba <- datos_para_modelo[-indices_entrenamiento, ]
modelo_qda <- qda(Clase_Desarrollo ~ ., data = entrenamiento)
modelo_qda ## Call:
## qda(Clase_Desarrollo ~ ., data = entrenamiento)
##
## Prior probabilities of groups:
## 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 0.2461905 0.2233333 0.2238095 0.3066667
##
## Group means:
## gdpPerCapitaPPP inflationConsumerPrices corruptionIndex CHEPercentGDP
## 1_Bajo 7.857758 0.08058705 0.7107099 0.04823501
## 2_Medio 8.959076 0.06597010 0.6467484 0.04909744
## 3_Alto 9.671391 0.06541459 0.5621277 0.05711553
## 4_MuyAlto 10.713176 0.02621321 0.1571335 0.07591304
## OOPEPercentCHE agricultureShare industryShare diptheriaImmCoverage
## 1_Bajo 0.4526087 0.55017859 0.1228520 0.7278917
## 2_Medio 0.4090832 0.34324539 0.1879994 0.8573561
## 3_Alto 0.3723219 0.21075386 0.2325221 0.9234043
## 4_MuyAlto 0.2243576 0.05909498 0.2554582 0.9531988
## measlesImmCoverage ageDependencyRatio underFiveMortality_bothSexes
## 1_Bajo 0.7096518 0.8717399 0.100916441
## 2_Medio 0.8488913 0.6532348 0.043468230
## 3_Alto 0.9287021 0.4930223 0.018374255
## 4_MuyAlto 0.9401398 0.4720017 0.005874689
## adultMortality_bothSexes hypertension_bothSexes
## 1_Bajo 0.31158182 0.3688356
## 2_Medio 0.21877676 0.3633881
## 3_Alto 0.14407298 0.3966660
## 4_MuyAlto 0.09194829 0.3745714
## alcoholConsumers_bothSexes
## 1_Bajo 0.2588435
## 2_Medio 0.3219772
## 3_Alto 0.3949283
## 4_MuyAlto 0.6720516
Para asegurar la robustez y capacidad de generalización de nuestro modelo, implementamos una estrategia de validación cruzada mediante la partición del conjunto de datos. Aplicamos una división aleatoria con una semilla fija (seed = 123) para garantizar la reproducibilidad de los resultados, asignando el 70% de los registros al conjunto de entrenamiento y el 30% restante al conjunto de prueba. Esta fragmentación permite que el modelo sea calibrado con un volumen significativo de datos, mientras que el set de prueba actúa como un entorno controlado para evaluar su desempeño ante observaciones inéditas, evitando así el sobreajuste (overfitting) y validando la verdadera potencia predictiva del clasificador QDA frente a la diversidad del sistema internacional.
Al observar los centros de gravedad de cada nivel de desarrollo, el modelo QDA no solo clasifica; nos cuenta la historia de cómo las naciones se transforman. Los resultados revelan perfiles estructurales claramente diferenciados:
El desafío de la base (1_Bajo): Este grupo se caracteriza por una alta dependencia agrícola (55%) y una vulnerabilidad crítica, evidenciada por tasas de mortalidad infantil del 10%. Es un estrato donde el Estado aún lucha por garantizar coberturas básicas de inmunización, las cuales apenas rozan el 70%.
La transición (2_Medio y 3_Alto): Aquí observamos el proceso de industrialización. A medida que las naciones transitan hacia el nivel Alto, la dependencia agrícola cae drásticamente (del 34% al 21%) y las coberturas de vacunación se estabilizan por encima del 90%. Estos niveles actúan como un “puente” donde la riqueza comienza a diversificarse.
El estándar de élite (4_MuyAlto): Este grupo se distancia radicalmente del resto. No solo por un PIB per cápita superior (logaritmo de 10.7), sino por una estructura institucional y social distinta: una corrupción significativamente menor (0.15), una inversión en salud pública más robusta (7.5% del PIB) y un consumo de alcohol notablemente más alto (67%).
Lo más revelador es la invariabilidad de la hipertensión a través de todos los grupos; este indicador, al mantenerse constante cerca del 36-39%, nos sugiere que los problemas de salud metabólica son un desafío global que trasciende la riqueza, convirtiéndose en el único “igualador” negativo en el sistema internacional.
Esta diferenciación de perfiles es precisamente lo que permite a nuestro modelo QDA identificar con alta precisión en qué “estadio” se encuentra cada nación, confirmando que el desarrollo es el resultado de una configuración específica y compleja de variables institucionales y sociales.
## , , 1_Bajo
##
## 1 2 3 4
## gdpPerCapitaPPP 1.892816 -0.1603062 0.1333859 -0.4768219
## inflationConsumerPrices 0.000000 6.0516685 0.3806033 -0.3986397
## corruptionIndex 0.000000 0.0000000 -5.4635098 -0.5993905
## CHEPercentGDP 0.000000 0.0000000 0.0000000 -48.2330948
## OOPEPercentCHE 0.000000 0.0000000 0.0000000 0.0000000
## agricultureShare 0.000000 0.0000000 0.0000000 0.0000000
## industryShare 0.000000 0.0000000 0.0000000 0.0000000
## diptheriaImmCoverage 0.000000 0.0000000 0.0000000 0.0000000
## measlesImmCoverage 0.000000 0.0000000 0.0000000 0.0000000
## ageDependencyRatio 0.000000 0.0000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.000000 0.0000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.000000 0.0000000 0.0000000 0.0000000
## hypertension_bothSexes 0.000000 0.0000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.000000 0.0000000 0.0000000 0.0000000
## 5 6 7 8
## gdpPerCapitaPPP 0.3253255 1.6921900 0.3087751 -0.02587108
## inflationConsumerPrices -0.7734847 -0.2798680 0.5113401 0.29237834
## corruptionIndex 3.5510599 -0.4756757 1.0704455 2.10504737
## CHEPercentGDP -9.6037114 4.6595668 -11.1761766 -12.36774865
## OOPEPercentCHE -6.0172122 -0.7992538 -2.0750338 0.85304085
## agricultureShare 0.0000000 7.6382450 6.1275947 0.69084297
## industryShare 0.0000000 0.0000000 23.0579402 -1.81195646
## diptheriaImmCoverage 0.0000000 0.0000000 0.0000000 6.71055791
## measlesImmCoverage 0.0000000 0.0000000 0.0000000 0.00000000
## ageDependencyRatio 0.0000000 0.0000000 0.0000000 0.00000000
## underFiveMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## adultMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## hypertension_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## alcoholConsumers_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## 9 10 11 12
## gdpPerCapitaPPP -0.3738430 -0.21098350 -0.2744888 -0.001516449
## inflationConsumerPrices -0.5371638 0.04475575 0.6319982 -0.005332434
## corruptionIndex -0.1042091 -0.83492521 -0.2542216 -0.520707940
## CHEPercentGDP -3.0878152 8.79533424 0.9144085 12.933524183
## OOPEPercentCHE 1.9657633 0.19851587 1.0525866 -2.457681338
## agricultureShare -0.4725384 2.13177183 0.2643944 1.407614078
## industryShare -1.0504252 -3.10661012 0.3246582 7.435889487
## diptheriaImmCoverage -14.7020590 -1.49607603 -4.7004300 -1.282507278
## measlesImmCoverage 17.8420961 -0.47540284 2.0254156 1.421308996
## ageDependencyRatio 0.0000000 -10.61866927 3.0434157 -1.207942329
## underFiveMortality_bothSexes 0.0000000 0.00000000 -33.3188273 17.177414360
## adultMortality_bothSexes 0.0000000 0.00000000 0.0000000 -10.746059182
## hypertension_bothSexes 0.0000000 0.00000000 0.0000000 0.000000000
## alcoholConsumers_bothSexes 0.0000000 0.00000000 0.0000000 0.000000000
## 13 14
## gdpPerCapitaPPP -0.32958520 0.1423102
## inflationConsumerPrices -0.05041039 0.6047023
## corruptionIndex -0.81671726 1.2160099
## CHEPercentGDP -5.41848045 -4.7415347
## OOPEPercentCHE -1.06006031 -0.9603751
## agricultureShare 1.57422518 0.8960055
## industryShare -0.86610671 -3.2273690
## diptheriaImmCoverage -0.86452523 -0.3092413
## measlesImmCoverage -0.78516963 0.5456441
## ageDependencyRatio -3.25942519 -1.4580078
## underFiveMortality_bothSexes -5.51541227 3.7688847
## adultMortality_bothSexes -2.37877043 3.7165342
## hypertension_bothSexes 24.99679948 -6.4401532
## alcoholConsumers_bothSexes 0.00000000 -8.6191862
##
## , , 2_Medio
##
## 1 2 3 4
## gdpPerCapitaPPP -1.830932 -0.06438507 -0.2854539 0.1330003
## inflationConsumerPrices 0.000000 -11.93622613 0.1352461 0.7370816
## corruptionIndex 0.000000 0.00000000 -4.3401412 1.3290220
## CHEPercentGDP 0.000000 0.00000000 0.0000000 52.1459872
## OOPEPercentCHE 0.000000 0.00000000 0.0000000 0.0000000
## agricultureShare 0.000000 0.00000000 0.0000000 0.0000000
## industryShare 0.000000 0.00000000 0.0000000 0.0000000
## diptheriaImmCoverage 0.000000 0.00000000 0.0000000 0.0000000
## measlesImmCoverage 0.000000 0.00000000 0.0000000 0.0000000
## ageDependencyRatio 0.000000 0.00000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.000000 0.00000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.000000 0.00000000 0.0000000 0.0000000
## hypertension_bothSexes 0.000000 0.00000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.000000 0.00000000 0.0000000 0.0000000
## 5 6 7 8
## gdpPerCapitaPPP 0.05030350 -1.0398028 0.4400101 -0.3775624
## inflationConsumerPrices -0.09234192 -1.6176508 0.2208587 -0.9649929
## corruptionIndex 4.21717748 -0.7498464 0.1611811 -1.7360992
## CHEPercentGDP -6.99209865 -28.5024067 9.4222614 19.8177582
## OOPEPercentCHE -7.16603459 0.5330656 -2.6845276 0.6595833
## agricultureShare 0.00000000 -8.2881453 8.6558982 1.9194321
## industryShare 0.00000000 0.0000000 25.7568975 9.5653023
## diptheriaImmCoverage 0.00000000 0.0000000 0.0000000 -9.1106397
## measlesImmCoverage 0.00000000 0.0000000 0.0000000 0.0000000
## ageDependencyRatio 0.00000000 0.0000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.00000000 0.0000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.00000000 0.0000000 0.0000000 0.0000000
## hypertension_bothSexes 0.00000000 0.0000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.00000000 0.0000000 0.0000000 0.0000000
## 9 10 11 12
## gdpPerCapitaPPP 0.004707226 0.5444301 0.61812902 0.1164691
## inflationConsumerPrices -2.219031229 -0.7545140 -0.01227911 -0.1415465
## corruptionIndex -0.241735899 -1.6698935 -1.16100360 -0.9578007
## CHEPercentGDP -7.636772446 -9.8571667 5.50487640 -2.1508226
## OOPEPercentCHE -0.450779217 0.9595256 0.17887153 3.5217911
## agricultureShare -0.519507646 1.1981272 4.61174408 3.4720062
## industryShare -3.134394486 6.0282834 3.09152824 0.5133263
## diptheriaImmCoverage -16.722090595 1.0997013 -0.83764087 -2.9242711
## measlesImmCoverage 18.962276714 2.2654023 -5.68576648 0.8645471
## ageDependencyRatio 0.000000000 10.2867687 3.99541605 0.1483966
## underFiveMortality_bothSexes 0.000000000 0.0000000 -76.96864578 -59.5009698
## adultMortality_bothSexes 0.000000000 0.0000000 0.00000000 14.9686175
## hypertension_bothSexes 0.000000000 0.0000000 0.00000000 0.0000000
## alcoholConsumers_bothSexes 0.000000000 0.0000000 0.00000000 0.0000000
## 13 14
## gdpPerCapitaPPP -0.2220211 -0.59378780
## inflationConsumerPrices -2.0738352 0.04367095
## corruptionIndex 0.4076421 0.42975356
## CHEPercentGDP 1.5032486 1.52827491
## OOPEPercentCHE -1.1235955 -0.01511941
## agricultureShare 3.1583328 -1.80069630
## industryShare 3.1254482 0.73284239
## diptheriaImmCoverage -2.1020613 2.08935059
## measlesImmCoverage 1.4489451 -1.39028859
## ageDependencyRatio -0.3250516 -0.22227966
## underFiveMortality_bothSexes -11.7414065 -4.22062351
## adultMortality_bothSexes -2.1965112 -1.93781250
## hypertension_bothSexes 18.3617679 5.71774713
## alcoholConsumers_bothSexes 0.0000000 6.43375904
##
## , , 3_Alto
##
## 1 2 3 4 5
## gdpPerCapitaPPP 2.367303 0.2794614 -0.442562 0.9628945 -1.0319362
## inflationConsumerPrices 0.000000 9.8208980 -0.400287 0.3021004 -0.4030603
## corruptionIndex 0.000000 0.0000000 -4.413838 0.8656888 0.8703644
## CHEPercentGDP 0.000000 0.0000000 0.000000 56.1386831 -1.4634206
## OOPEPercentCHE 0.000000 0.0000000 0.000000 0.0000000 -7.3198853
## agricultureShare 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## industryShare 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## diptheriaImmCoverage 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## measlesImmCoverage 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## ageDependencyRatio 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## hypertension_bothSexes 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.000000 0.0000000 0.000000 0.0000000 0.0000000
## 6 7 8 9
## gdpPerCapitaPPP -1.4666936 -0.3434411 -0.2548154 -0.24915603
## inflationConsumerPrices -0.5561146 2.0641983 -1.1051818 -0.85691309
## corruptionIndex 0.6133648 0.1916982 -0.9254240 0.02665473
## CHEPercentGDP -8.0421376 -6.5421032 -10.8441778 -3.48981953
## OOPEPercentCHE 1.6795873 0.5609019 -0.6744855 -0.45172837
## agricultureShare -9.6527374 -5.9370855 1.2552037 -1.40012764
## industryShare 0.0000000 -18.0327000 3.6932616 -2.34912290
## diptheriaImmCoverage 0.0000000 0.0000000 -11.2782667 -15.03586535
## measlesImmCoverage 0.0000000 0.0000000 0.0000000 22.08045354
## ageDependencyRatio 0.0000000 0.0000000 0.0000000 0.00000000
## underFiveMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## adultMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## hypertension_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## alcoholConsumers_bothSexes 0.0000000 0.0000000 0.0000000 0.00000000
## 10 11 12 13
## gdpPerCapitaPPP 0.99473489 -0.4182524 -0.001163449 0.4041472
## inflationConsumerPrices 0.55299840 0.6428136 -2.272531982 0.6673368
## corruptionIndex -0.05692471 0.8316865 0.247291720 0.6776079
## CHEPercentGDP 11.80497308 -17.8699902 5.071293409 17.5992172
## OOPEPercentCHE 0.50382391 0.6686521 1.575510075 1.4525469
## agricultureShare 3.68097952 -0.7261604 -1.751936950 -2.1196428
## industryShare 6.11608806 -4.3264363 -0.110764623 -2.3546105
## diptheriaImmCoverage -1.63995617 2.0698147 2.485200902 2.8983260
## measlesImmCoverage 2.90903139 -4.8553070 -1.690585067 -3.8117725
## ageDependencyRatio 15.35656404 3.0709869 2.418168803 -1.0676450
## underFiveMortality_bothSexes 0.00000000 -155.3998096 -54.822474117 -31.1091202
## adultMortality_bothSexes 0.00000000 0.0000000 21.347100784 12.8411289
## hypertension_bothSexes 0.00000000 0.0000000 0.000000000 -17.2844812
## alcoholConsumers_bothSexes 0.00000000 0.0000000 0.000000000 0.0000000
## 14
## gdpPerCapitaPPP -0.10278272
## inflationConsumerPrices 0.64122444
## corruptionIndex 1.56407499
## CHEPercentGDP -21.59674840
## OOPEPercentCHE 0.03070733
## agricultureShare -4.05219690
## industryShare -2.66329608
## diptheriaImmCoverage 1.55955753
## measlesImmCoverage 1.06994533
## ageDependencyRatio -0.55405335
## underFiveMortality_bothSexes 30.21535683
## adultMortality_bothSexes -9.77607113
## hypertension_bothSexes 0.61067982
## alcoholConsumers_bothSexes 5.75053465
##
## , , 4_MuyAlto
##
## 1 2 3 4 5
## gdpPerCapitaPPP 2.3074 0.458122 -0.7547799 0.3091706 1.2751611
## inflationConsumerPrices 0.0000 26.022188 5.0517269 1.4705326 0.6768210
## corruptionIndex 0.0000 0.000000 -5.9913698 3.5256319 0.5486198
## CHEPercentGDP 0.0000 0.000000 0.0000000 47.9436442 13.6949361
## OOPEPercentCHE 0.0000 0.000000 0.0000000 0.0000000 10.5917390
## agricultureShare 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## industryShare 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## diptheriaImmCoverage 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## measlesImmCoverage 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## ageDependencyRatio 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## hypertension_bothSexes 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.0000 0.000000 0.0000000 0.0000000 0.0000000
## 6 7 8 9
## gdpPerCapitaPPP -1.7495430 -0.9590383 -0.0045063 -0.1867191
## inflationConsumerPrices 0.5175193 0.6196294 -1.3988242 1.1056606
## corruptionIndex 0.9266859 1.8914741 0.2615912 0.3749290
## CHEPercentGDP -0.7343157 -22.3382740 -6.5673336 -9.0765282
## OOPEPercentCHE 1.5715878 -3.9199824 0.1298336 -1.6463099
## agricultureShare -22.1585192 -6.0397570 -2.0276564 1.0769084
## industryShare 0.0000000 -17.9887549 0.5808037 -0.1209090
## diptheriaImmCoverage 0.0000000 0.0000000 -27.8412004 18.9043766
## measlesImmCoverage 0.0000000 0.0000000 0.0000000 -27.0273786
## ageDependencyRatio 0.0000000 0.0000000 0.0000000 0.0000000
## underFiveMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.0000000
## adultMortality_bothSexes 0.0000000 0.0000000 0.0000000 0.0000000
## hypertension_bothSexes 0.0000000 0.0000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.0000000 0.0000000 0.0000000 0.0000000
## 10 11 12
## gdpPerCapitaPPP 1.814067354 0.9818576 0.8188605
## inflationConsumerPrices 0.782735676 -1.4042333 -7.2642986
## corruptionIndex 0.009045684 -2.4431338 0.6628610
## CHEPercentGDP -26.871345428 1.8242883 4.1267054
## OOPEPercentCHE 3.265401867 1.1162828 -1.7223541
## agricultureShare 2.941249071 -2.1076705 -1.9019169
## industryShare 9.917103914 2.3490289 -7.1677514
## diptheriaImmCoverage 1.979348872 8.1193833 -1.6262475
## measlesImmCoverage 0.032592257 -1.2216601 -2.8885432
## ageDependencyRatio 19.114632857 6.2571834 -3.7079774
## underFiveMortality_bothSexes 0.000000000 445.9958962 -137.6600816
## adultMortality_bothSexes 0.000000000 0.0000000 37.4330079
## hypertension_bothSexes 0.000000000 0.0000000 0.0000000
## alcoholConsumers_bothSexes 0.000000000 0.0000000 0.0000000
## 13 14
## gdpPerCapitaPPP -0.03661719 0.4426296
## inflationConsumerPrices 0.30032622 1.6153912
## corruptionIndex 0.23522473 -3.4317689
## CHEPercentGDP -17.90695473 17.0855120
## OOPEPercentCHE -2.02301837 3.0280140
## agricultureShare 6.12739694 1.7311342
## industryShare 6.36669137 4.5419927
## diptheriaImmCoverage 1.49409453 -2.7524634
## measlesImmCoverage -2.07058480 -4.3394633
## ageDependencyRatio 0.71690977 6.3642117
## underFiveMortality_bothSexes -86.35185201 -245.6934753
## adultMortality_bothSexes 25.60854094 16.5561045
## hypertension_bothSexes -26.96900808 -1.9223136
## alcoholConsumers_bothSexes 0.00000000 -9.3595646
El análisis de los coeficientes de escalamiento (scaling) del modelo QDA permite identificar las fuerzas motoras detrás de cada clasificación. La consistencia en el peso de las variables de salud —específicamente la mortalidad infantil y el gasto público en salud— confirma que el sistema de salud no es un sector aislado, sino la columna vertebral sobre la cual se erige el estatus de desarrollo de una nación. Asimismo, la presencia recurrente de indicadores como la participación industrial y la prevalencia de hipertensión subraya que, aunque las naciones se encuentren en estadios de bienestar muy distintos, todas enfrentan presiones estructurales comunes en su transición hacia la modernidad.
pred_entrenamiento <- predict(modelo_qda, entrenamiento)
tabla_conf_entrenamiento <- table(Predicho = pred_entrenamiento$class,
Real = entrenamiento$Clase_Desarrollo)
tabla_conf_entrenamiento## Real
## Predicho 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 1_Bajo 476 36 1 0
## 2_Medio 41 373 38 0
## 3_Alto 0 60 383 45
## 4_MuyAlto 0 0 48 599
pred_prueba <- predict(modelo_qda , prueba)
tabla_conf_prueba <- table(Predicho = pred_prueba$class,
Real = prueba$Clase_Desarrollo)
tabla_conf_prueba## Real
## Predicho 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 1_Bajo 202 17 0 0
## 2_Medio 19 158 14 1
## 3_Alto 0 26 165 20
## 4_MuyAlto 0 0 22 254
precision_entrenamiento <- sum(diag(tabla_conf_entrenamiento)) / sum(tabla_conf_entrenamiento)
precision_prueba <- sum(diag(tabla_conf_prueba)) / sum(tabla_conf_prueba)
precision_prueba## [1] 0.8674833
Al evaluar el rendimiento del clasificador QDA, obtuvimos una precisión global del 86.75% en el conjunto de prueba, un resultado que confirma la capacidad del modelo para generalizar las dinámicas de desarrollo global. Un análisis detallado de la matriz de confusión revela que el modelo no solo acierta en la mayoría de los casos, sino que sus errores son ‘inteligentes’: ocurren exclusivamente en los límites de transición entre categorías adyacentes. Esto no debe interpretarse como una falla, sino como una evidencia estadística de la dificultad inherente de clasificar naciones que, debido a su resiliencia o coyuntura económica, operan en las fronteras de los niveles de desarrollo humano.
## Confusion Matrix and Statistics
##
## Real
## Predicho 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 1_Bajo 202 17 0 0
## 2_Medio 19 158 14 1
## 3_Alto 0 26 165 20
## 4_MuyAlto 0 0 22 254
##
## Overall Statistics
##
## Accuracy : 0.8675
## 95% CI : (0.8435, 0.889)
## No Information Rate : 0.3062
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8222
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: 1_Bajo Class: 2_Medio Class: 3_Alto
## Sensitivity 0.9140 0.7861 0.8209
## Specificity 0.9749 0.9512 0.9340
## Pos Pred Value 0.9224 0.8229 0.7820
## Neg Pred Value 0.9720 0.9391 0.9476
## Prevalence 0.2461 0.2238 0.2238
## Detection Rate 0.2249 0.1759 0.1837
## Detection Prevalence 0.2439 0.2138 0.2350
## Balanced Accuracy 0.9445 0.8686 0.8774
## Class: 4_MuyAlto
## Sensitivity 0.9236
## Specificity 0.9647
## Pos Pred Value 0.9203
## Neg Pred Value 0.9662
## Prevalence 0.3062
## Detection Rate 0.2829
## Detection Prevalence 0.3073
## Balanced Accuracy 0.9442
Tras someter el clasificador QDA a un entorno de prueba con datos inéditos, obtuvimos una precisión global del 86.75%. Más allá del porcentaje, la métrica de Kappa (0.822) confirma una concordancia casi perfecta entre las predicciones del modelo y la realidad histórica, descartando el azar como factor determinante.
La matriz de confusión revela que nuestro modelo no solo clasifica con eficacia, sino que comete “errores inteligentes”: las discrepancias se concentran exclusivamente en los límites de transición entre categorías adyacentes (ej. de Medio a Alto), lo cual es una evidencia estadística de la dificultad inherente para segmentar naciones que operan en las zonas grises del desarrollo humano.
Al analizar el rendimiento por clase, destaca la Sensibilidad (Sensitivity) superior al 91% en los extremos (Bajo y Muy Alto), lo que confirma que el modelo identifica con contundencia los perfiles de los polos del desarrollo. Por su parte, la ligera variación en la sensibilidad de los niveles intermedios actúa como un termómetro de la volatilidad real: es precisamente en estos estratos donde la resiliencia institucional y la coyuntura económica crean configuraciones híbridas que desafían cualquier intento de categorización rígida.
Este 86.75% de acierto no representa el límite de nuestra investigación, sino el punto de partida para entender que el desarrollo humano, más que una etiqueta, es un proceso dinámico donde los errores del modelo nos señalan, precisamente, dónde se libra la batalla por la movilidad social y económica de las naciones.
# 1. Preparamos un set que incluya metadatos (País y Año)
# Usamos el modelo que ya entrenamos (modelo_optimizado o modelo_qda)
datos_evaluacion <- datos %>%
# Seleccionamos predictores + metadatos + target
dplyr::select(Country, Year, all_of(vars_lda_robusto), Human_Development_Index) %>%
na.omit() %>%
mutate(
# Aplicamos la misma categorización del PNUD
Real = case_when(
Human_Development_Index < 0.55 ~ "1_Bajo",
Human_Development_Index >= 0.55 & Human_Development_Index < 0.70 ~ "2_Medio",
Human_Development_Index >= 0.70 & Human_Development_Index < 0.80 ~ "3_Alto",
Human_Development_Index >= 0.80 ~ "4_MuyAlto"
),
Real = factor(Real, levels = c("1_Bajo", "2_Medio", "3_Alto", "4_MuyAlto")),
# IMPORTANTE: Aplicar los mismos logs que al entrenamiento
gdpPerCapitaPPP = log(gdpPerCapitaPPP + 1),
)
# 2. Filtramos para el año 2020 y tomamos los primeros 10
set_2020 <- datos_evaluacion %>%
filter(Year == 2019) %>%
head(50)
# 3. Realizamos la predicción sobre este set específico
# Usamos el modelo RDA optimizado que creamos en el paso anterior
pred_2020 <- predict(modelo_qda, newdata = set_2020)
# 4. Construimos la tabla comparativa
# Como ahora tenemos 4 grupos, mostraremos la probabilidad de la clase predicha
# Construimos la tabla comparativa de forma limpia
ejemplo_2020 <- data.frame(
Pais = set_2020$Country,
Real = set_2020$Real,
# 1. Extraemos EXCLUSIVAMENTE la etiqueta de la clase predicha
Predicho = pred_2020$class,
# 2. Extraemos EXCLUSIVAMENTE la matriz de probabilidades y sacamos el máximo
Probabilidad_Asignada = round(apply(pred_2020$posterior, 1, max), 3)
)
print(ejemplo_2020)## Pais Real Predicho
## 1 Afghanistan 1_Bajo 1_Bajo
## 2 Angola 2_Medio 2_Medio
## 3 Albania 4_MuyAlto 3_Alto
## 4 United Arab Emirates 4_MuyAlto 4_MuyAlto
## 5 Argentina 4_MuyAlto 3_Alto
## 6 Armenia 3_Alto 3_Alto
## 7 Australia 4_MuyAlto 4_MuyAlto
## 8 Austria 4_MuyAlto 4_MuyAlto
## 9 Azerbaijan 3_Alto 3_Alto
## 10 Burundi 1_Bajo 1_Bajo
## 11 Belgium 4_MuyAlto 4_MuyAlto
## 12 Benin 1_Bajo 1_Bajo
## 13 Burkina Faso 1_Bajo 1_Bajo
## 14 Bangladesh 2_Medio 2_Medio
## 15 Bulgaria 4_MuyAlto 4_MuyAlto
## 16 Bahrain 4_MuyAlto 4_MuyAlto
## 17 Bosnia and Herzegovina 3_Alto 3_Alto
## 18 Belarus 4_MuyAlto 4_MuyAlto
## 19 Bolivia (Plurinational State of) 3_Alto 3_Alto
## 20 Brazil 3_Alto 3_Alto
## 21 Bhutan 2_Medio 2_Medio
## 22 Botswana 3_Alto 2_Medio
## 23 Central African Republic 1_Bajo 1_Bajo
## 24 Canada 4_MuyAlto 4_MuyAlto
## 25 Switzerland 4_MuyAlto 4_MuyAlto
## 26 Chile 4_MuyAlto 4_MuyAlto
## 27 China 3_Alto 3_Alto
## 28 Cote d'Ivoire 2_Medio 2_Medio
## 29 Cameroon 2_Medio 2_Medio
## 30 Congo 2_Medio 2_Medio
## 31 Colombia 3_Alto 3_Alto
## 32 Comoros 2_Medio 2_Medio
## 33 Costa Rica 4_MuyAlto 4_MuyAlto
## 34 Cyprus 4_MuyAlto 4_MuyAlto
## 35 Czechia 4_MuyAlto 4_MuyAlto
## 36 Germany 4_MuyAlto 4_MuyAlto
## 37 Djibouti 1_Bajo 1_Bajo
## 38 Denmark 4_MuyAlto 4_MuyAlto
## 39 Dominican Republic 3_Alto 3_Alto
## 40 Algeria 3_Alto 3_Alto
## 41 Ecuador 3_Alto 3_Alto
## 42 Egypt 3_Alto 2_Medio
## 43 Spain 4_MuyAlto 4_MuyAlto
## 44 Estonia 4_MuyAlto 4_MuyAlto
## 45 Ethiopia 1_Bajo 1_Bajo
## 46 Finland 4_MuyAlto 4_MuyAlto
## 47 Fiji 3_Alto 2_Medio
## 48 France 4_MuyAlto 4_MuyAlto
## 49 Gabon 3_Alto 2_Medio
## 50 United Kingdom of Great Britain and Northern Ireland 4_MuyAlto 4_MuyAlto
## Probabilidad_Asignada
## 1 1.000
## 2 0.999
## 3 0.997
## 4 1.000
## 5 1.000
## 6 1.000
## 7 1.000
## 8 1.000
## 9 0.968
## 10 1.000
## 11 1.000
## 12 0.990
## 13 0.999
## 14 0.692
## 15 0.993
## 16 1.000
## 17 1.000
## 18 0.999
## 19 0.927
## 20 1.000
## 21 0.998
## 22 1.000
## 23 1.000
## 24 1.000
## 25 1.000
## 26 1.000
## 27 0.997
## 28 0.710
## 29 0.869
## 30 0.999
## 31 0.965
## 32 0.646
## 33 0.982
## 34 1.000
## 35 1.000
## 36 1.000
## 37 1.000
## 38 1.000
## 39 0.998
## 40 0.964
## 41 0.988
## 42 0.545
## 43 1.000
## 44 1.000
## 45 0.965
## 46 1.000
## 47 0.611
## 48 1.000
## 49 0.997
## 50 1.000
Al poner a prueba el clasificador QDA sobre la radiografía global del año 2019, el modelo deja de ser un mero validador matemático para convertirse en una auditoría estructural de las categorizaciones tradicionales de la ONU. Un análisis detallado de esta simulación transversal revela que las discrepancias entre la clasificación oficial del PNUD (Real) y la asignada por el algoritmo (Predicho) no constituyen fallos de cómputo, sino retratos de contradicciones estructurales profundas. Casos emblemáticos como los de Argentina o Albania —catalogados formalmente en el grupo de desarrollo Muy Alto— son reubicados de forma unánime por el modelo en el segmento Alto con probabilidades que rozan la certeza absoluta (\(P \ge 0.99\)). Esto evidencia que, a pesar de que estas naciones alcancen el umbral aritmético del IDH tradicional debido a su inercia histórica, sus fundamentales macroeconómicos, niveles de corrupción y vulnerabilidades sanitarias reales corresponden, en la práctica, al perfil de economías en desarrollo, desnudando la fragilidad oculta detrás de sus etiquetas diplomáticas.
En contraparte, la simulación demuestra una consistencia blindada al trazar las fronteras de los extremos del sistema internacional (con certezas del 100% para casos como Burundi en el nivel Bajo, o Suiza y los Emiratos Árabes en el nivel Muy Alto) e identificar con notable lucidez la posición de economías emergentes clave. Es en este escenario donde Colombia asume un rol protagónico: el modelo la ratifica con un contundente 96.5% de probabilidad en el nivel de desarrollo Alto. Este resultado no solo valida que las variables de nuestro feature space (mortalidad, infraestructura de salud y estructura productiva) describen con precisión la realidad material del país, sino que además nos ofrece el preámbulo perfecto para el clímax de nuestra investigación. Al demostrar que el modelo es inmune a los sesgos burocráticos y sensible a la verdadera composición orgánica de los estados, estamos listos para adentrarnos en el diagnóstico histórico de Colombia, descifrando si su posición actual es el resultado de un progres
# 1. Extraemos las probabilidades de tu variable de predicción
# (Asumiendo que guardaste el predict en 'predicciones')
probabilidades <- pred_prueba$posterior
# 2. Configuramos la ventana gráfica para 4 histogramas (2 filas, 2 columnas)
par(mfrow = c(2, 2))
# 3. Histograma de confianza para los países de Desarrollo Bajo
hist(probabilidades[prueba$Clase_Desarrollo == "1_Bajo", "1_Bajo"],
main = "Confianza - 1_Bajo",
xlab = "P(Ser clasificado como Bajo)", col = "lightcoral", xlim = c(0, 1),
breaks = 10) # Breaks ayuda a que las barras se vean mejor distribuidas
# 4. Histograma de confianza para Desarrollo Medio
hist(probabilidades[prueba$Clase_Desarrollo == "2_Medio", "2_Medio"],
main = "Confianza - 2_Medio",
xlab = "P(Ser clasificado como Medio)", col = "lightgoldenrod", xlim = c(0, 1),
breaks = 10)
# 5. Histograma de confianza para Desarrollo Alto
hist(probabilidades[prueba$Clase_Desarrollo == "3_Alto", "3_Alto"],
main = "Confianza - 3_Alto",
xlab = "P(Ser clasificado como Alto)", col = "lightblue", xlim = c(0, 1),
breaks = 10)
# 6. Histograma de confianza para Desarrollo Muy Alto
hist(probabilidades[prueba$Clase_Desarrollo == "4_MuyAlto", "4_MuyAlto"],
main = "Confianza - 4_MuyAlto",
xlab = "P(Ser clasificado como Muy Alto)", col = "lightgreen", xlim = c(0, 1),
breaks = 10)Los histogramas de confianza revelan con qué grado de certeza el modelo asigna a cada país en su categoría real, confirmando visualmente la asimetría en la estabilidad de las fronteras globales. En los extremos del sistema internacional (1_Bajo y 4_MuyAlto), la distribución muestra un sesgo masivo hacia la derecha (valores cercanos a 1.0), lo que demuestra que para el modelo estos perfiles estructurales son nítidos, inequívocos y predecibles. Por el contrario, los grupos de transición (2_Medio y 3_Alto) exhiben barras más dispersas a lo largo del eje de probabilidad, confirmando empíricamente la existencia de “zonas grises” en los niveles intermedios; en estos estratos, las economías híbridas y las dinámicas de movilidad reducen la contundencia de las funciones cuadráticas del QDA, reflejando estadísticamente la volatilidad y el solapamiento real que caracteriza a las naciones en vías de desarrollo.
# 1. Creamos el perfil de Colombia agregando el dato "fantasma" para engañar a R
colombia_datos <- data.frame(
gdpPerCapitaPPP = 15519.2,
inflationConsumerPrices = 0.025,
corruptionIndex = 0.41,
CHEPercentGDP = 0.088,
OOPEPercentCHE = 0.1575,
agricultureShare = 0.184,
industryShare = 0.197,
diptheriaImmCoverage = 0.92,
measlesImmCoverage = 0.905,
ageDependencyRatio = 0.506,
underFiveMortality_bothSexes = 0.0175,
adultMortality_bothSexes = 0.1138,
hypertension_bothSexes = 0.342,
alcoholConsumers_bothSexes = 0.423
)
# 2. Aplicamos la misma transformación matemática que al set de entrenamiento
colombia_datos$gdpPerCapitaPPP <- log(colombia_datos$gdpPerCapitaPPP + 1)
# 3. Hacemos la predicción con el modelo QDA
prediccion_colombia <- predict(modelo_qda, newdata = colombia_datos)
prediccion_colombia## $class
## [1] 3_Alto
## Levels: 1_Bajo 2_Medio 3_Alto 4_MuyAlto
##
## $posterior
## 1_Bajo 2_Medio 3_Alto 4_MuyAlto
## 1 4.276324e-10 0.0180618 0.9803165 0.001621729
# 4. Imprimimos el diagnóstico de forma presentable
resultado_colombia <- data.frame(
Pais = "Colombia",
Clase_Predicha = prediccion_colombia$class,
Prob_Bajo = round(prediccion_colombia$posterior[1, "1_Bajo"], 3),
Prob_Medio = round(prediccion_colombia$posterior[1, "2_Medio"], 3),
Prob_Alto = round(prediccion_colombia$posterior[1, "3_Alto"], 3),
Prob_MuyAlto = round(prediccion_colombia$posterior[1, "4_MuyAlto"], 3)
)
print(resultado_colombia)## Pais Clase_Predicha Prob_Bajo Prob_Medio Prob_Alto Prob_MuyAlto
## 1 Colombia 3_Alto 0 0.018 0.98 0.002
Al evaluar el perfil macroeconómico, institucional y sanitario de Colombia en el 2020, el clasificador QDA ubica al país en la categoría de desarrollo 3_Alto con una contundente probabilidad asignada del 98%. Este resultado ratifica que los fundamentales materiales del Estado colombiano se alinean casi con total certeza con los estándares de las economías emergentes consolidadas; el modelo descarta casi por completo un posible retroceso al nivel Medio (1.8% de probabilidad) y evidencia una probabilidad marginal de transitar al estrato Muy Alto (apenas 0.2%). Esta asignación tan marcada se explica por la solidez de ciertos “sensores” clave del entorno nacional, tales como un gasto en salud pública del 8.8% con respecto al PIB y coberturas de inmunización que superan el umbral crítico del 90%, métricas que actúan como un blindaje estructural frente a los indicadores más rezagados del sistema internacional.
Sin embargo, este diagnóstico probabilístico funciona también como un crudo reflejo de los límites de nuestra propia estructura. Al contrastar el 98% de certeza en el nivel Alto con la nula probabilidad de dar el salto al nivel Muy Alto, el modelo desnuda estadísticamente la existencia de un techo de cristal institucional y productivo. A pesar de contar con indicadores de salud competitivos, factores restrictivos como un índice de corrupción estancado en 0.41, una inflación de control y una matriz donde la producción primaria y los servicios tradicionales detienen la diversificación compleja, configuran una inercia estructural difícil de romper. Así, el veredicto del algoritmo confirma que Colombia ha logrado consolidar un piso mínimo de bienestar que la aleja definitivamente de la vulnerabilidad de la base global, pero permanece atrapada en una frontera estadística que exige reformas profundas en su aparato institucional y productivo si aspira a transitar hacia el verdadero estatus de desarrollo avanzado.
# 1. Extraemos toda la historia de Colombia
colombia_historico <- datos_evaluacion %>%
filter(Country == "Colombia") %>%
# Quitamos el HDI para que la predicción sea ciega (sin data leakage)
dplyr::select(-Human_Development_Index)
# 2. Realizamos la predicción histórica
pred_colombia_hist <- predict(modelo_qda, newdata = colombia_historico)
# 3. Construimos la tabla de diagnóstico año a año
diagnostico_colombia <- data.frame(
Año = colombia_historico$Year,
Real = colombia_historico$Real,
Predicho = pred_colombia_hist$class,
Probabilidad = round(apply(pred_colombia_hist$posterior, 1, max), 3)
)
# 1. Realizar la predicción
pred_colombia_hist <- predict(modelo_qda, newdata = colombia_historico)
# 2. Construir la tabla uniendo los datos básicos con las probabilidades (posterior)
# Usamos round para que sea legible en el reporte
diagnostico_colombia_completo <- data.frame(
Año = colombia_historico$Year,
Real = colombia_historico$Real,
Predicho = pred_colombia_hist$class,
round(pred_colombia_hist$posterior, 3) # Agrega las 4 columnas de probabilidad
)
# 3. Ver los resultados
print(diagnostico_colombia_completo)## Año Real Predicho X1_Bajo X2_Medio X3_Alto X4_MuyAlto
## 1 2000 2_Medio 2_Medio 0 0.560 0.440 0.000
## 2 2001 2_Medio 2_Medio 0 0.582 0.418 0.000
## 3 2002 2_Medio 2_Medio 0 0.526 0.474 0.000
## 4 2003 2_Medio 3_Alto 0 0.236 0.764 0.000
## 5 2004 2_Medio 3_Alto 0 0.187 0.813 0.000
## 6 2005 3_Alto 3_Alto 0 0.113 0.887 0.000
## 7 2006 3_Alto 3_Alto 0 0.082 0.918 0.000
## 8 2007 3_Alto 3_Alto 0 0.053 0.947 0.000
## 9 2008 3_Alto 3_Alto 0 0.040 0.960 0.000
## 10 2009 3_Alto 3_Alto 0 0.045 0.955 0.000
## 11 2010 3_Alto 3_Alto 0 0.034 0.966 0.000
## 12 2011 3_Alto 3_Alto 0 0.030 0.970 0.000
## 13 2012 3_Alto 3_Alto 0 0.027 0.973 0.000
## 14 2013 3_Alto 3_Alto 0 0.020 0.979 0.001
## 15 2014 3_Alto 3_Alto 0 0.017 0.981 0.001
## 16 2015 3_Alto 3_Alto 0 0.018 0.979 0.003
## 17 2016 3_Alto 3_Alto 0 0.017 0.979 0.004
## 18 2017 3_Alto 3_Alto 0 0.016 0.977 0.007
## 19 2018 3_Alto 3_Alto 0 0.018 0.969 0.013
## 20 2019 3_Alto 3_Alto 0 0.017 0.965 0.018
# 5. Calcular cuántas veces el modelo acertó
aciertos <- sum(diagnostico_colombia$Real == diagnostico_colombia$Predicho)
total <- nrow(diagnostico_colombia)
cat("\nPrecisión histórica en Colombia:", round((aciertos/total)*100, 2), "%\n")##
## Precisión histórica en Colombia: 90 %
Al evaluar las dos décadas de la serie histórica nacional, el clasificador QDA registra una precisión histórica del 90% en la trayectoria de Colombia. El modelo detecta con precisión el punto de partida en el año 2000 bajo el estatus de desarrollo 2_Medio, registrando una disputa interna donde la probabilidad se dividía de forma estrecha entre permanecer en dicho segmento (56%) o migrar al inmediato superior (44%). El verdadero hallazgo ocurre en el periodo de inflexión entre 2003 y 2004: el modelo se anticipa dos años a la clasificación oficial de la ONU —que mantenía al país indexado en el nivel Medio— y reubica prematuramente a Colombia en el estrato 3_Alto con una certeza que escala rápidamente al 81.3%. Esta discrepancia temporal revela que el país ya había consolidado las bases materiales de una economía de desarrollo alto antes de que el IDH tradicional lo indexara formalmente en el año 2005.
A partir del año 2006, la trayectoria nacional entra en una fase de profunda inercia y estabilización estructural. La probabilidad asignada al nivel 3_Alto se blinda de manera asintótica, alcanzando su punto máximo en 2014 con un contundente 98.1% de certeza, mientras que el riesgo de un retroceso hacia el nivel Medio se disipa hasta quedar reducido a un marginal 1.7% en 2019. Al contrastar este comportamiento histórico con la simulación que realizamos previamente para el año 2020, validamos de manera empírica la solidez de nuestra predicción: el modelo no arroja un resultado aislado o fortuito, sino que responde a una inercia estructural madurada a lo largo de veinte años. Esta consistencia matemática confirma que Colombia padece de un confinamiento estructural; el país ha logrado petrificar un piso mínimo de bienestar que lo aleja de la vulnerabilidad, pero sus fundamentales permanecen atrapados en una zona de confort estadístico que frena cualquier vector de convergencia real hacia el estándar de las naciones avanzadas (4_MuyAlto).
# 2. Transformamos el dataframe a formato largo (long format) para ggplot
datos_plot <- diagnostico_colombia_completo %>%
select(Año, X2_Medio, X3_Alto, X4_MuyAlto) %>%
pivot_longer(
cols = c(X2_Medio, X3_Alto, X4_MuyAlto),
names_to = "Nivel",
values_to = "Probabilidad"
)
# 3. Creamos el gráfico
ggplot(datos_plot, aes(x = Año, y = Probabilidad, color = Nivel, group = Nivel)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
# Personalizamos los nombres de la leyenda
scale_color_manual(values = c("X2_Medio" = "#E69F00",
"X3_Alto" = "#56B4E9",
"X4_MuyAlto" = "#009E73"),
labels = c("Medio", "Alto", "Muy Alto")) +
# Temática limpia y profesional para póster
theme_minimal() +
labs(title = "Trayectoria Probabilística del Desarrollo: Colombia",
subtitle = "Evolución histórica (2000-2019) según el Modelo QDA",
x = "Año",
y = "Probabilidad Asignada",
color = "Nivel de Desarrollo") +
theme(plot.title = element_text(face = "bold", size = 14),
legend.position = "bottom")Aquí pegamos el texto que redactamos anteriormente.
Banco Interamericano de Desarrollo (BID). (2019). Calidad de vida: más allá de los hechos. Washington, D.C.: Publicaciones del BID. Recuperado de https://publications.iadb.org
Garzón-González, L. (2025). La relación entre el crecimiento del PIB y la mejora del índice de Desarrollo Humano en América Latina 2000-2022. Polos del Conocimiento.
Global Burden of Disease Study. (2019). Global and regional impact of health determinants on life expectancy and health-adjusted life expectancy, 2000-2018. PubMed Central (PMC).
International Monetary Fund (IMF). (2019). Multiple Dimensions of Human Development Index and Public Spending. Washington, D.C.: IMF eLibrary.
Martínez-García, M., et al. (2021). Life expectancy and mortality in 363 cities of Latin America. BMC Public Health, 21(1).
Torres-Torres, S., et al. (2020). Impacto de variables socioeconómicas en el índice de desarrollo humano de las economías latinoamericanas. Revista Virtual de Calidad y Estadísticas. SciELO.