library(dplyr)
library(factoextra)
library(ggplot2)
library(readxl)
library(tidyverse)
library(biotools)
library(caret)
library(e1071) 
library(klaR)
library(MASS)
library(MVN)
library(cluster)
library(gridExtra)
library(kableExtra)
library(knitr)
library(psych)
library(scales)
datos <- read_excel("archivo_combinado.xlsx")

1 Introducción

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.

1.1 Pregunta de Investigación

Pregunta Principal:

  • ¿En qué medida las estructuras macroeconómicas, los sistemas políticos y los indicadores de salud pública logran explicar y predecir la varianza en el Índice de Calidad de Vida (Proxy IDH) de 169 Estados y territorios durante el periodo 2000-2019?

1.2 Objetivos

El objetivo principal del proyecto es:

  • Determinar el impacto de las variables macroeconómicas, la estructura del Estado y los factores de salud pública sobre el Índice de Desarrollo Humano (IDH) en 169 Estados y territorios durante el periodo 2000-2019.

Para alcanzar este propósito, el estudio se despliega a través de los siguientes objetivos específicos:

  • 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 IDH determinan la magnitud y dirección de dicha brecha.

  • Sintetizar los factores macroeconómicos y sanitarios para construir una variable compuesta, evaluando su viabilidad y estabilidad temporal como un indicador alternativo al IDH tradicional.

  • Evaluar 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

1.3 Revisión Biblografica

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.

1.4 Metodología

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

  • Desde una perspectiva estadística, la investigación emplea un muestreo no probabilístico de tipo censal. El estudio abarca el universo completo de los 169 Estados miembros de las Naciones Unidas, donde el dataset consolidado cuenta con un total de 2998 registros (filas), correspondientes a la serie histórica 2000-2019 con 52 variables.

2 Análisis de Brechas de Género en Salud y Régimen Político — América Latina (2000–2019)

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.

2.1 Etapa Premodelo

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 masculina
  • brecha_mort_adulta = Mortalidad adulta masculina − Mortalidad adulta femenina
  • brecha_mort_inf = Mortalidad infantil masculina − Mortalidad infantil femenina
  • gdpPerCapitaPPP (log)
  • corruptionIndex
  • CHEPercentGDP
  • Human_Development_Index = Índice de Desarrollo Humano (bienestar, educación e ingreso per cápita)

2.2 Preprocesamiento y Construcción de Variables

# 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
cat("Países cubiertos:", n_distinct(datos_g$Country), "\n")
## Países cubiertos: 22
cat("\nEstadísticas de la brecha en esperanza de vida (años):\n")
## 
## Estadísticas de la brecha en esperanza de vida (años):
summary(datos_g$brecha_vida) %>% round(2) %>% print()
##    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.

2.3 Análisis Descriptivo de las Brechas

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")
Tabla 1: Brechas de género en salud promedio por régimen político — América Latina (2000–2019)
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.

2.4 Análisis Factorial

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:
print(round(modelo_fa$Vaccounted, 3))
##                         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
cat("\nCargas factoriales:\n")
## 
## Cargas factoriales:
print(round(modelo_fa$loadings[], 3))
##                            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")
Tabla 2: Cargas factoriales (rotación Varimax)
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
cat("Primeras filas:\n")
## Primeras filas:
print(head(scores_fa) %>% round(3))
##   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.

2.5 Determinación del Número Óptimo de Clústeres

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.

Figura 4: Criterios para la selección del número óptimo de clústeres sobre scores factoriales.

2.6 Ajuste del Modelo K-means 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:
print(table(datos_g$Cluster))
## 
##   1   2   3   4 
## 179  69 150  64
cat("\nVarianza explicada:",
    round(modelo_km$betweenss / modelo_km$totss * 100, 1), "%\n")
## 
## 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")
Tabla 3: Perfil estructural de cada clúster — América Latina (K-means sobre factores)
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.

2.7 Visualización de los Clústeres

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"
  )

2.8 Clústeres vs. Régimen Político

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)")
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 <- chisq.test(tabla_cont)
cat("\nPrueba Chi-cuadrado de independencia:\n")
## 
## Prueba Chi-cuadrado de independencia:
cat("  χ² =", round(prueba$statistic, 2), "\n")
##   χ² = 229.68
cat("  gl =", prueba$parameter, "\n")
##   gl = 9
cat("  p-valor =", format(prueba$p.value, scientific = TRUE), "\n")
##   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..

2.9 Colombia: Trayectoria Histórica

colombia <- datos_g %>%
  filter(Country == "Colombia") %>%
  arrange(Year)

cat("Perfil histórico de Colombia:\n")
## Perfil histórico de Colombia:
print(table(colombia$Perfil))
## 
## 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")
Tabla 5: Trayectoria histórica de Colombia — Brechas de género en salud (2000–2019)
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")
  )

2.10 Conclusiones del Análisis

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

3 Replicabilidad Material del IDH a través de Componentes Principales

El diseño y la evaluación del bienestar global han dependido históricamente de índices compuestos construidos bajo criterios burocráticos y ponderaciones fijas, como el IDH de las Naciones Unidas. No obstante, desde la perspectiva de la ciencia de datos, surge un interrogante fundamental: ¿es posible que la estructura orgánica de las naciones revele por sí misma un indicador sintético capaz de replicar o cuestionar estas mediciones oficiales?

La presente sección aborda este desafío mediante la implementación del Análisis de Componentes Principales (PCA). El objetivo es extraer una variable que sirva como un indicador del desarrollo. A continuación, se expone el planteamiento matemático del modelo, la descomposición de las cargas factoriales que dan identidad a las componentes y su estabilidad temporal frente al IDH, demostrando la potencia del aprendizaje no supervisado para hallar patrones de calidad de vida.

3.1 Planteamiento del PCA

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)")
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.

3.2 Análisis de Cargas Factoriales

pca_2019$rotation[, 1:4]
##                                      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")
Variables dominantes en el PC1 (Umbral Mínimo: 0.20)
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
generar_tabla_pc("PC2")
Variables dominantes en el PC2 (Umbral Mínimo: 0.20)
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
generar_tabla_pc("PC3")
Variables dominantes en el PC3 (Umbral Mínimo: 0.20)
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
generar_tabla_pc("PC4")
Variables dominantes en el PC4 (Umbral Mínimo: 0.20)
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%): 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\)).

3.3 Espacio Geométrico Continuo PCA vs. IDH

# 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)"
)
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

El valor de la primera componente principal está dado por:

\[\begin{aligned} \text{PC1} = & + 0.3576 \cdot Z_{\log(\text{gdpPerCapitaPPP}+1)} \\ & - 0.0747 \cdot Z_{\text{inflationConsumerPrices}} \\ & - 0.2942 \cdot Z_{\text{corruptionIndex}} \\ & + 0.1670 \cdot Z_{\text{CHEPercentGDP}} \\ & - 0.1979 \cdot Z_{\text{OOPEPercentCHE}} \\ & - 0.3394 \cdot Z_{\text{agricultureShare}} \\ & + 0.2361 \cdot Z_{\text{industryShare}} \\ & + 0.2908 \cdot Z_{\text{diptheriaImmCoverage}} \\ & + 0.3072 \cdot Z_{\text{measlesImmCoverage}} \\ & - 0.3165 \cdot Z_{\text{ageDependencyRatio}} \\ & - 0.3483 \cdot Z_{\text{underFiveMortality\_bothSexes}} \\ & - 0.3021 \cdot Z_{\text{adultMortality\_bothSexes}} \\ & - 0.0347 \cdot Z_{\text{hypertension\_bothSexes}} \\ & + 0.2216 \cdot Z_{\text{alcoholConsumers\_bothSexes}} \end{aligned}\]

Donde cada variable está normalizada.

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.

4 Evaluación de la Capacidad Predictiva y Diagnóstico Estructural del Desarrollo Humano

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.

4.1 Etapa Premodelo

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

4.2 Analisis de las Variables elegidas

# 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.

4.3 Validación de Supuestos

resultado_mardia <- mvn(data = datos_AD_numericos, mvn_test = "mardia")
resultado_mardia
## $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.

boxM_test <- boxM(datos_AD_numericos, grupo)
boxM_test
## 
##  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.

4.4 Planteamiento del Modelo

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.

coeficientes <- modelo_qda$scaling
print(coeficientes)
## , , 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.

confusionMatrix(tabla_conf_prueba)
## 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.

4.5 Validaciones de los Resultados

# 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.

4.6 Prueba Colombia 2020

# 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 %>%
  dplyr::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")

5 Conclusiones y Discusión

La validación empírica del modelo QDA registró una precisión global del 86.75%, confirmando que las variables macroeconómicas, institucionales y de salud pública discriminan con robustez estadística los niveles de desarrollo global. Para el caso de Colombia, el clasificador asignó de manera sistemática a lo largo de las dos décadas una probabilidad del 98% de pertenencia al clúster de desarrollo (Categoría 3), frente a una probabilidad residual de apenas 0.002% para el clúster (Categoría 4).

Al analizar la matriz de confusión y los errores de clasificación exógenos, como el caso de Montenegro (2016), se evidencia que el QDA es altamente sensible a las distorsiones provocadas por la combinación de rigidez productiva y deterioro institucional, variables que el IDH tradicional, debido a su naturaleza puramente promediada, tiende a invisibilizar.

El análisis factorial combinado con K-means sobre brechas de género en salud en América Latina permite caracterizar las desigualdades estructurales de la región a través de dimensiones latentes claras. El modelo identificó una primera dimensión de desarrollo institucional y humano integral (donde el IDH carga junto al PIB y el gasto en salud), y una secundaria asociada a la mortalidad diferencial por violencia. A partir de estas componentes, se consolidaron cuatro perfiles de desigualdad que demuestran que la brecha en esperanza de vida no es uniforme, transitando desde escenarios de brecha invertida en entornos autocráticos hasta brechas extremas condicionadas por el nivel de desarrollo. En este panorama, Colombia registra una reducción histórica de la brecha coincidente con la desescalada del conflicto armado; aunque el país se mantiene en el perfil de brecha amplia, la persistencia de una diferencia de 5 a 6 años en la longevidad por sexo refleja las desigualdades estructurales de género que aún caracterizan a las democracias electorales de renta media.

Al contrastar la pregunta principal de esta investigación mediante el uso integrado de estas herramientas de estadística multivariada, los resultados demuestran de manera contundente que las estructuras macroeconómicas, los sistemas políticos y los indicadores de salud pública explican y predicen conjuntamente la calidad de vida global. Por un lado, la implementación del Análisis de Componentes Principales (PCA) probó la existencia de una variable latente estructural (PC1) que replica con una fidelidad del 94.84% al IDH oficial, desnudando a su vez dimensiones ocultas de desprotección financiera e inestabilidad inflacionaria que las mediciones promediadas de las Naciones Unidas suelen invisibilizar. Por otro lado, el Análisis Discriminante Cuadrático (QDA) validó que el desarrollo responde a configuraciones orgánicas predecibles (86.75% de precisión), revelando que el diagnóstico del 98% de probabilidad para Colombia en el nivel Alto no es una métrica de éxito, sino un techo de cristal multidimensional.

En conclusión, la interacción de los modelos predictivos y de interdependencia permite resolver la pregunta central evidenciando que el bienestar humano va más allá de un incremento marginal en el PIB per cápita o el control de la salud básica, donde Colombia ya posee un suelo estable. Mientras las naciones avanzadas exhiben un índice de corrupción promedio de 0.15 y una participación agrícola inferior al 6%, la realidad colombiana permanece atrapada por una dependencia agrícola del 18.4%, rigideces institucionales y brechas de género persistentes. Por tanto, la transición definitiva hacia un desarrollo superior exige una transformación radical en la sofisticación de su matriz productiva, la eficiencia del gasto público y el desmantelamiento de las barreras estructurales de desigualdad de género que limitan la movilidad social en el sistema internacional.

A futuro, este modelo puede funcionar como una herramienta de simulación para anticipar el impacto de reformas institucionales y shocks macroeconómicos sobre el tejido social y la equidad de las naciones.

6 Referencias Bibliográficas

  1. 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

  2. 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.

  3. 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).

  4. International Monetary Fund (IMF). (2019). Multiple Dimensions of Human Development Index and Public Spending. Washington, D.C.: IMF eLibrary.

  5. Martínez-García, M., et al. (2021). Life expectancy and mortality in 363 cities of Latin America. BMC Public Health, 21(1).

  6. 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.