Grupo 10
Jhon Escobar
Juan David Ortiz
Paola García
Michael Villalobos
La salud de una población refleja no solo su bienestar individual, sino también el nivel de desarrollo social, económico y político de un país. Organismos como la OMS y el Banco Mundial han mostrado cómo factores estructurales —educación, pobreza, inversión pública, infraestructura sanitaria y características demográficas— generan brechas marcadas entre naciones.
Estas desigualdades se evidencian en indicadores como la esperanza de vida, la mortalidad infantil, el acceso a servicios de salud, el gasto sanitario y el crecimiento poblacional. Por esta razón, resulta pertinente analizar cómo se agrupan los países según sus condiciones de salud y desarrollo, buscando patrones que permitan identificar similitudes, contrastes y posibles casos atípicos.
El aprendizaje no supervisado permite explorar relaciones que no son visibles a simple vista, especialmente cuando se trabaja con indicadores heterogéneos. Este enfoque facilita identificar grupos de países con características comunes y reconocer qué variables influyen de manera más fuerte en sus condiciones de salud y bienestar.
Para el análisis se aplicó un modelo de aprendizaje no supervisado compuesto por dos etapas:
un Análisis de Componentes Principales (ACP) para reducir la dimensionalidad del conjunto de variables, y
una clusterización jerárquica mediante el método de Ward para agrupar países con perfiles similares.
El ACP resume la información de múltiples indicadores en pocas dimensiones que concentran la mayor parte de la variabilidad. Posteriormente, la clusterización sobre estas dimensiones permite formar grupos homogéneos de países, minimizando la varianza interna y facilitando la interpretación de patrones globales.
Este estudio tiene como objetivos:
Agrupar los países según sus condiciones de salud y desarrollo mediante técnicas de aprendizaje no supervisado.
Identificar patrones comunes y diferencias significativas entre los grupos formados.
Analizar la influencia de las variables en las condiciones generales de salud poblacional.
Detectar países con mayor vulnerabilidad sanitaria y casos atípicos que requieren atención especial.
En conjunto, este enfoque permite ofrecer una visión estadística clara y objetiva de las desigualdades globales en salud, facilitando la comparación entre países y la interpretación de grandes volúmenes de información.
Los datos utilizados provienen del conjunto Health, Nutrition and Population Statistics del Banco Mundial para el año 2020. Esta base ofrece información para 191 países y más de 400 indicadores relacionados con salud, población y condiciones socioeconómicas. Se escogió el año 2020 porque representa un momento crítico para los sistemas sanitarios debido a la pandemia de COVID-19, lo que permite observar cómo las diferencias estructurales entre países influyeron en sus resultados.
El proceso comenzó priorizando la inclusión de países por encima de variables, con el objetivo de mantener un análisis global y comparativo. Por esta razón, se eliminaron todas las variables con valores faltantes (NA), ya que conservarlas habría reducido significativamente la cantidad de países disponibles.
Tras esta depuración inicial, el conjunto quedó con aproximadamente 200 variables completas. A partir de ellas se eliminaron:
variables específicas por género (male/female)
indicadores basados en edades o rangos etarios muy específicos
variables que repetían información de forma redundante
Esto permitió seleccionar 21 variables finales, escogidas por su relevancia para describir las condiciones de salud, la estructura demográfica y la inversión sanitaria de cada país. Tras definir las variables finales, se renombraron para facilitar su lectura en gráficos posteriores y hacer más clara su interpretación en el análisis.Las variables utilizadas se puedes observar en la Tabla 1
library(dplyr)
library(tidyr)
library(tibble)
library(readxl)
library(scales)
library(DT)
library(knitr)
library(kableExtra)
library(ggplot2)
library(plotly)
library(viridis)
library(FactoMineR)
library(factoextra)
library(ade4)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
library(leaflet)
library(corrplot)
library(stringr)
variables=read_excel("P_Data_Extract_From_Health_Nutrition_and_Population_Statistics.xlsx")
variables[variables == ".."]=NA
variables[variables == ""]=NA
variables=variables%>%select(-1,-2,-3)
variables=variables[-c(192, 193, 194, 195, 196), ]
variables=variables[, colSums(is.na(variables)) == 0]
variables=variables%>%select(-contains("male"),-contains("female"),-contains("ages"))
variables=variables%>%select(1,2,3,4,5,9,8,37,14,15,31,18,21,24,25,27,38,19,20,39,41,34)
variables=variables%>%rename(pais=`Country Code`,
Dep_pobl=`Age dependency ratio (% of working-age population) [SP.POP.DPND]`,
Dep_ancianos=`Age dependency ratio, old [SP.POP.DPND.OL]`,
Dep_jovenes=`Age dependency ratio, young [SP.POP.DPND.YG]`,
Tasa_natal=`Birth rate, crude (per 1,000 people) [SP.DYN.CBRT.IN]`,
Tasa_mortal=`Death rate, crude (per 1,000 people) [SP.DYN.CDRT.IN]`,
Gasto_PPP=`Current health expenditure per capita, PPP (current international $) [SH.XPD.CHEX.PP.CD]`,
Creci_Pobl=`Population growth (annual %) [SP.POP.GROW]`,
Gasto_Gob_capital=`Domestic general government health expenditure per capita, PPP (current international $) [SH.XPD.GHED.PP.CD]`,
Gasto_priv_salud=`Domestic private health expenditure (% of current health expenditure) [SH.XPD.PVTD.CH.ZS]`,
Muertes_neon=`Number of neonatal deaths [SH.DTH.NMRT]`,
Tasa_fertil=`Fertility rate, total (births per woman) [SP.DYN.TFRT.IN]`,
Esperanza_Vida=`Life expectancy at birth, total (years) [SP.DYN.LE00.IN]`,
Mortal_materna=`Maternal mortality ratio (modeled estimate, per 100,000 live births) [SH.STA.MMRT]`,
Mortal_Infantil=`Mortality rate, infant (per 1,000 live births) [SP.DYN.IMRT.IN]`,
Mortal_menores5=`Mortality rate, under-5 (per 1,000) [SH.DYN.MORT]`,
Poblacion=`Population, total [SP.POP.TOTL]`,
Vacunacion_polio=`Immunization, Pol3 (% of one-year-old children) [SH.IMM.POL3]`,
Tuberculosis=`Incidence of tuberculosis (per 100,000 people) [SH.TBS.INCD]`,
Pobl_Rural=`Rural population [SP.RUR.TOTL]`,
Tasa_muertosNac=`Stillbirth rate (per 1,000 total births) [SH.DYN.STLB]`,
Gasto_bolsillo=`Out-of-pocket expenditure (% of current health expenditure) [SH.XPD.OOPC.CH.ZS]`)
datatable(variables,caption = "Tabla 1. Variables utilizadas",options = list(pageLength = 10,scrollX = TRUE,initComplete = JS("function(settings,json) {$(this.api().table().header()).css({'background-color': '#7B1E1E','color': 'white','font-weight': 'bold'});}")))Las variables seleccionadas se agrupan en cuadro categorias principales las cuales se mencionan en la tabla 2.La selección de estas variables se basó en criterios de disponibilidad global, comparabilidad internacional y relevancia conceptual, con el propósito de construir una visión integral del bienestar poblacional y de las desigualdades estructurales entre países.
tabla_detallada <- tribble(
~Categoría, ~Variable, ~Descripción, ~Interpretación, ~Importancia,
# Bloque 1: Demográficos
"Indicadores demográficos", "Tasa de natalidad",
"Número de nacimientos por cada 1.000 habitantes en un año.",
"Mide el crecimiento poblacional natural.",
"Permiten analizar la dinámica poblacional y su impacto social",
"Indicadores demográficos", "Tasa de mortalidad",
"Número de muertes por cada 1.000 habitantes en un año.",
"Evalúa las condiciones de salud y calidad de vida.",
"Permiten analizar la dinámica poblacional y su impacto social",
"Indicadores demográficos", "Crecimiento poblacional",
"Porcentaje de aumento de la población total en un año.",
"Determina el ritmo de expansión demográfica.",
"Permiten analizar la dinámica poblacional y su impacto social",
"Indicadores demográficos","Tasa de fertilidad",
"Promedio de hijos por mujer",
"Permite analizar las tendencias reproductivas del país.",
"Permiten analizar la dinámica poblacional y su impacto social",
# Bloque 2: Salud
"Indicadores de salud", "Esperanza de vida",
"Promedio de años que se espera viva una persona al nacer.",
"Refleja el nivel de bienestar y atención médica.",
"Muestran la situación sanitaria general de un país",
"Indicadores de salud", "Mortalidad infantil",
"Número de muertes de menores de un año por cada 1.000 nacidos vivos.",
"Evalúa la efectividad de los servicios de salud materno-infantil.",
"Muestran la situación sanitaria general de un país",
"Indicadores de salud", "Mortalidad materna",
"Número de muertes maternas por cada 100.000 nacidos vivos.",
"Indica la cobertura del sistema de salud preventiva.",
"Muestran la situación sanitaria general de un país",
"Indicadores de salud","Muertes Neonatales",
"Número de muertes de recién nacidos (menores de 28 días) en un año.",
"Indica la calidad de la atención en salud materna e infantil.",
"Muestran la situación sanitaria general de un país",
"Indicadores de salud","Vacunación contra la polio",
"Porcentaje de niños de un año vacunados contra la poliomielitis.",
"Refleja la cobertura de los programas de inmunización.",
"Muestran la situación sanitaria general de un país",
"Indicadores de salud","Tasa de mortinatos",
"Número de mortinatos por cada 1.000 nacimientos totales.",
"Mide la calidad de la atención prenatal y materna.",
"Muestran la situación sanitaria general de un país",
# Bloque 3: Económicos
"Indicadores económicos", "Gasto en salud (% PIB)",
"Proporción del producto interno bruto destinada a la salud.",
"Indica el compromiso económico del país con el bienestar social.",
"Evalúan la sostenibilidad financiera del sistema de salud",
"Indicadores económicos", "Gasto privado",
"Monto promedio de gasto en salud por persona.",
"Mide la inversión directa en la atención médica individual.",
"Evalúan la sostenibilidad financiera del sistema de salud",
"Indicadores económicos", "Gasto de bolsillo",
"Porcentaje del gasto en salud que asumen los hogares.",
"Refleja la accesibilidad económica a los servicios de salud.",
"Evalúan la sostenibilidad financiera del sistema de salud",
"Indicadores económicos","Gasto total",
"Gasto en salud por persona ajustado por paridad del poder adquisitivo (PPP).",
"Permite comparar el gasto sanitario real entre países.",
"Evalúan la sostenibilidad financiera del sistema de salud",
# Bloque 4: Epidemiológicos y poblaciones complementarias
"Indicadores epidemiológicos y poblaciones complementarios","Incidencia de tuberculosis",
"Casos nuevos de tuberculosis por cada 100.000 habitantes.",
"Indica la prevalencia de enfermedades infecciosas.",
"Importante para monitoreo de salud pública y generación de políticas",
"Indicadores epidemiológicos y poblaciones complementarios","Población total",
"Total de habitantes de cada país",
"Sirve como referencia para el tamaño poblacional.",
"Importante para monitoreo de salud pública y generación de políticas",
"Indicadores epidemiológicos y poblaciones complementarios","Población rural",
"Número de personas que viven en zonas rurales",
"Permite analizar la distribución territorial de la población.",
"Importante para monitoreo de salud pública y generación de políticas",
"Indicadores epidemiológicos y poblaciones complementarios","Dependencia poblacional",
"Relación entre la población dependiente (jóvenes y ancianos) y la población en edad de trabajar.",
"Mide la carga económica sobre la población activa.",
"Importante para monitoreo de salud pública y generación de políticas",
"Indicadores epidemiológicos y poblaciones complementarios","Dependencia poblacional (ancianos)",
"Porcentaje de personas mayores (65+) respecto a la población en edad laboral.",
"Indica el grado de envejecimiento de la población.",
"Importante para monitoreo de salud pública y generación de políticas",
"Indicadores epidemiológicos y poblaciones complementarios","Dependencia poblacional (jóvenes)",
"Porcentaje de personas menores de 15 años respecto a la población económicamente activa.",
"Refleja la presión demográfica de los jóvenes.",
"Importante para monitoreo de salud pública y generación de políticas"
)
tabla_detallada <- tabla_detallada %>%
mutate(Categoría = str_trim(str_to_title(Categoría)))
kable(tabla_detallada, caption = "Tabla 2. Categorías, variables y su interpretación") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, font_size = 12) %>%
row_spec(0, bold = TRUE, color = "white", background = "#7B1E1E") %>%
column_spec(1, bold = TRUE, width = "5cm") %>%
column_spec(2, width = "4cm") %>%
column_spec(3, width = "5.5cm") %>%
column_spec(4, width = "5.5cm") %>%
column_spec(5, width = "5.5cm") %>%
collapse_rows(columns = c(1, 5), valign = "middle")| Categoría | Variable | Descripción | Interpretación | Importancia |
|---|---|---|---|---|
| Indicadores Demográficos | Tasa de natalidad | Número de nacimientos por cada 1.000 habitantes en un año. | Mide el crecimiento poblacional natural. | Permiten analizar la dinámica poblacional y su impacto social |
| Tasa de mortalidad | Número de muertes por cada 1.000 habitantes en un año. | Evalúa las condiciones de salud y calidad de vida. | ||
| Crecimiento poblacional | Porcentaje de aumento de la población total en un año. | Determina el ritmo de expansión demográfica. | ||
| Tasa de fertilidad | Promedio de hijos por mujer | Permite analizar las tendencias reproductivas del país. | ||
| Indicadores De Salud | Esperanza de vida | Promedio de años que se espera viva una persona al nacer. | Refleja el nivel de bienestar y atención médica. | Muestran la situación sanitaria general de un país |
| Mortalidad infantil | Número de muertes de menores de un año por cada 1.000 nacidos vivos. | Evalúa la efectividad de los servicios de salud materno-infantil. | ||
| Mortalidad materna | Número de muertes maternas por cada 100.000 nacidos vivos. | Indica la cobertura del sistema de salud preventiva. | ||
| Muertes Neonatales | Número de muertes de recién nacidos (menores de 28 días) en un año. | Indica la calidad de la atención en salud materna e infantil. | ||
| Vacunación contra la polio | Porcentaje de niños de un año vacunados contra la poliomielitis. | Refleja la cobertura de los programas de inmunización. | ||
| Tasa de mortinatos | Número de mortinatos por cada 1.000 nacimientos totales. | Mide la calidad de la atención prenatal y materna. | ||
| Indicadores Económicos | Gasto en salud (% PIB) | Proporción del producto interno bruto destinada a la salud. | Indica el compromiso económico del país con el bienestar social. | Evalúan la sostenibilidad financiera del sistema de salud |
| Gasto privado | Monto promedio de gasto en salud por persona. | Mide la inversión directa en la atención médica individual. | ||
| Gasto de bolsillo | Porcentaje del gasto en salud que asumen los hogares. | Refleja la accesibilidad económica a los servicios de salud. | ||
| Gasto total | Gasto en salud por persona ajustado por paridad del poder adquisitivo (PPP). | Permite comparar el gasto sanitario real entre países. | ||
| Indicadores Epidemiológicos Y Poblaciones Complementarios | Incidencia de tuberculosis | Casos nuevos de tuberculosis por cada 100.000 habitantes. | Indica la prevalencia de enfermedades infecciosas. | Importante para monitoreo de salud pública y generación de políticas |
| Población total | Total de habitantes de cada país | Sirve como referencia para el tamaño poblacional. | ||
| Población rural | Número de personas que viven en zonas rurales | Permite analizar la distribución territorial de la población. | ||
| Dependencia poblacional | Relación entre la población dependiente (jóvenes y ancianos) y la población en edad de trabajar. | Mide la carga económica sobre la población activa. | ||
| Dependencia poblacional (ancianos) | Porcentaje de personas mayores (65+) respecto a la población en edad laboral. | Indica el grado de envejecimiento de la población. | ||
| Dependencia poblacional (jóvenes) | Porcentaje de personas menores de 15 años respecto a la población económicamente activa. | Refleja la presión demográfica de los jóvenes. |
Todas las variables numéricas fueron transformadas con scale(), asegurando media cero y desviación estándar uno. Esto era necesario porque los indicadores se encuentran en unidades distintas (por ejemplo, dólares PPP, tasas por mil habitantes, número de personas, porcentajes), y el ACP requiere escalas homogéneas para que ninguna variable domine a las demás solo por su magnitud.
El estudio se desarrolla mediante dos técnicas principales:
Se aplicó ACP para reducir la dimensionalidad del conjunto de datos y sintetizar la información en un número menor de componentes no correlacionados. A partir de la varianza explicada, se seleccionaron cuatro componentes principales, que concentran la mayor parte de la variabilidad del conjunto.
Con las coordenadas del ACP, se realizó una clusterización mediante el método jerárquico de Ward, que agrupa países según su similitud multivariada minimizando la varianza interna de los clusters.
Antes de aplicar el PCA y los métodos de agrupamiento, se realizó un análisis descriptivo de las variables para identificar patrones generales, valores extremos y diferencias relevantes entre países. Este análisis permitió anticipar qué indicadores muestran mayor desigualdad global y cuáles podían condicionar las componentes principales.
La Tabla 3 — Estadísticos descriptivos resume media, mediana, desviación estándar, mínimos, máximos y cuartiles para cada variable. La tabla confirma lo que muestran los boxplots: muchas variables están fuertemente sesgadas por outliers (especialmente las relacionadas con mortalidad y gasto), por lo que la mediana resulta más representativa que la media en esos casos. En particular:
Variables de mortalidad (mortalidad materna, infantil, menores de 5 años, muertes neonatales) presentan medias muy superiores a sus medianas, indicando la influencia de pocos países extremos.
Gasto PPP y gasto público per cápita muestran alta dispersión y máximos extremos (p. ej. Estados Unidos).
Indicadores como vacunación contra polio y esperanza de vida aparecen más estables (medianas cercanas a sus cuartiles).
datos_num=variables %>% select(-pais)
tabla_tendencia=datos_num %>%
summarise(across(everything(),list(
Media = ~mean(.x, na.rm = TRUE),
Mediana = ~median(.x, na.rm = TRUE),
SD = ~sd(.x, na.rm = TRUE),
Min = ~min(.x, na.rm = TRUE),
Q1 = ~quantile(.x, 0.25, na.rm = TRUE),
Q3 = ~quantile(.x, 0.75, na.rm = TRUE),
Max = ~max(.x, na.rm = TRUE)))) %>%t() %>%
as.data.frame() %>%
tibble::rownames_to_column("Variable") %>%
separate(Variable, into = c("Variable", "Medida"), sep = "_(?=[^_]+$)") %>%
pivot_wider(names_from = Medida, values_from = V1) %>%
select(Variable, Media, Mediana, SD, Min, Q1, Q3, Max)
tabla_tendencia_sinexponencial=tabla_tendencia %>%
mutate(across(where(is.numeric), ~comma(.x)))
datatable(tabla_tendencia_sinexponencial,caption = "Tabla 3. medidas de tendencia central",options = list(pageLength = 10,scrollX = TRUE,initComplete = JS("function(settings,json) {$(this.api().table().header()).css({'background-color': '#7B1E1E','color': 'white','font-weight': 'bold'});}")))La Figura 1 — Matriz de correlaciones evidencia relaciones fuertes y esperadas entre indicadores: natalidad, fertilidad y dependencia juvenil están altamente correlacionadas entre sí (coeficientes ≈ 0.97), mientras que la esperanza de vida presenta correlaciones negativas con las tasas de mortalidad. Además, el envejecimiento poblacional se correlaciona positivamente con variables de gasto en salud (≈ 0.72).
Esta matriz justifica el uso del ACP: variables fuertemente correlacionadas se combinan bien en componentes que resumen dimensiones demográficas y sanitarias, y además ayuda a decidir qué variables aportan información redundante.
numeros = variables[, sapply(variables, is.numeric)]
colnames(numeros) = abbreviate(colnames(numeros), minlength = 10)
cor_matriz = cor(numeros, use = "complete.obs")
corrplot(cor_matriz, method = "color", type = "upper", order = "hclust",
tl.cex = 0.6, title = "Correlograma de variables", mar = c(0,0,1,0))Los boxplots seleccionados confirman y ejemplifican lo indicado en la Tabla 3 y la matriz de correlaciones:
gasto1=c("Gasto_PPP", "Gasto_Gob_capital", "Gasto_bolsillo", "Gasto_priv_salud")
mort1=c("Mortal_Infantil", "Mortal_menores5", "Mortal_materna", "Muertes_neon","Tasa_mortal","Tasa_muertosNac")
pobl1=c("Dep_pobl", "Dep_jovenes", "Dep_ancianos", "Creci_Pobl","Poblacion","Pobl_Rural")
cob1=c("Esperanza_Vida", "Vacunacion_polio", "Tuberculosis", "Tasa_natal","Tasa_fertil")
pbxp=function(vars, titulo){variables %>%select(pais, all_of(vars)) %>%
pivot_longer(cols = -pais, names_to = "Variable", values_to = "Valor") %>%
ggplot(aes(x = Variable, y = Valor)) +
geom_boxplot(fill = "#69b3a2", alpha = 0.7) +
facet_wrap(~ Variable, scales = "free_y", ncol = 2) +
scale_y_continuous(labels = scales::comma) +
theme_minimal() +
theme(axis.text.x = element_blank(),strip.text = element_text(face = "bold"),
plot.title = element_text(face = "bold", hjust = 0.5)) +
labs(title = titulo, x = "", y = "Valor")}
p_gasto1=pbxp(gasto1,"Inversión en Salud")
p_mort1=pbxp(mort1,"Estadísticas de Mortalidad")
p_pobl1=pbxp(pobl1,"Estructura Poblacional")
p_cob1=pbxp(cob1,"Cobertura Nacimientos")Gasto en salud
El gasto de bolsillo es relativamente homogéneo, indicando que la inversión directa de las personas es consistente entre países.
El gasto público y el gasto ajustado por PPP presentan alta dispersión y numerosos outliers, reflejando desigualdad significativa entre países en términos de inversión estatal y capacidad económica.
El gasto privado muestra variabilidad moderada, sugiriendo consistencia relativa en la financiación privada de la salud.
Indicadores de mortalidad:
La mortalidad infantil, materna, menores de 5 años y muertes neonatales muestran fuertes asimetrías y outliers, evidenciando desigualdades en acceso y calidad de atención sanitaria.
La mediana es más representativa que la media debido a la influencia de valores extremos.
Los contextos con mortalidades excepcionalmente altas destacan la necesidad de políticas sanitarias focalizadas en los países más vulnerables.
Estructura poblacional:
El crecimiento poblacional es positivo en la mayoría de los países, aunque existen casos de crecimiento negativo o muy elevado, reflejando dinámicas demográficas heterogéneas.
La dependencia de jóvenes y ancianos muestra que algunas sociedades enfrentan cargas demográficas importantes, mientras que la mayoría mantiene proporciones moderadas.
La población rural y la población total están fuertemente sesgadas por unos pocos países, indicando desigualdades en urbanización y tamaño poblacional.
Estructura de nacimientos y salud reproductiva:
La esperanza de vida es relativamente homogénea, reflejando estándares de salud consistentes en la mayoría de países.
La tasa de natalidad y fertilidad muestran variabilidad significativa, con outliers que representan contextos de alta fecundidad o políticas reproductivas especiales.
La cobertura de vacunación es alta y consistente, mientras que la incidencia de tuberculosis evidencia desigualdades en control de enfermedades infecciosas.
Conclusión general: Los boxplots muestran que la mayoría de las variables presentan distribuciones sesgadas y presencia de outliers, lo que indica fuertes desigualdades estructurales entre países. La mediana y el rango intercuartílico son más representativos que la media para describir estas condiciones. Este análisis evidencia la heterogeneidad global en salud, financiamiento y estructura poblacional, y justifica el uso del aprendizaje no supervisado para identificar patrones y clusters de países con perfiles similares.
Las gráficas de barras identifican a los países en los extremos:
variables %>%
arrange(desc(Gasto_PPP)) %>%
slice(1:10) %>%
ggplot(aes(x = reorder(pais, Gasto_PPP), y = Gasto_PPP, fill = Gasto_PPP)) +
geom_col() +
coord_flip() +
scale_fill_viridis_c() +
labs(title = "Top 10 países por gasto en salud (PPP)",
x = "", y = "Gasto per cápita (PPP)") +
theme_minimal()variables %>%
arrange(desc(Mortal_Infantil)) %>%
slice(1:10) %>%
ggplot(aes(x = reorder(pais, Mortal_Infantil), y = Mortal_Infantil, fill = Mortal_Infantil)) +
geom_col() +
coord_flip() +
scale_fill_viridis_c() +
labs(title = "Top 10 países por tasa de mortalidad infantil (Mortal_Infantil)",
x = "", y = "Tasa de mortalidad infantil (Por cada 1000 nacidos)") +
theme_minimal()variables %>%
arrange(desc(Dep_ancianos)) %>%
slice(1:10) %>%
ggplot(aes(x = reorder(pais, Dep_ancianos), y = Dep_ancianos, fill = Dep_ancianos)) +
geom_col() +
coord_flip() +
scale_fill_viridis_c() +
labs(title = "Top 10 países por índice de dependencia por edad (ancianos)",
x = "", y = "Índice de dependencia (Dep_ancianos)") +
theme_minimal()variables %>%
arrange(desc(Muertes_neon)) %>%
slice(1:10) %>%
ggplot(aes(x = reorder(pais, Muertes_neon), y = Muertes_neon, fill = Muertes_neon)) +
geom_col() +
coord_flip() +
scale_fill_viridis_c() +
labs(title = "Top 10 países por Mortalidad Neonatal (Muertes_neon)",
x = "", y = "Numero de Muertes Neonatales") +
theme_minimal()Gasto en salud:
Estados Unidos lidera el gasto per cápita en salud, muy por encima de otros países desarrollados como Suiza, Noruega y Luxemburgo, que presentan niveles similares.
La misma tendencia se observa en el gasto gubernamental en salud, indicando que los países con mayores recursos destinan mayores presupuestos a la atención sanitaria.
El gasto privado destaca en algunos países menos prosperos de Asia y África, mostrando que, aunque la inversión pública sea baja, existen sectores de la población que financian su propia atención médica.
Indicadores de mortalidad y esperanza de vida:
La mortalidad infantil, materna y de menores de 5 años se concentra principalmente en países africanos, reflejando graves problemas de acceso a servicios sanitarios y desigualdades estructurales.
India encabeza la lista de muertes neonatales, seguida por países asiáticos y africanos con economías más débiles.
La esperanza de vida más alta se observa en países europeos y asiáticos desarrollados (Mónaco, Noruega, Japón, Singapur, Corea del Sur), mostrando que los sistemas de salud efectivos y las condiciones socioeconómicas elevadas se reflejan en mejores resultados de longevidad.
Estructura poblacional:
Los países con mayor dependencia de jóvenes son mayoritariamente africanos, indicando una alta proporción de población joven y una carga económica importante sobre la población activa.
La dependencia de ancianos predomina en países europeos, como Mónaco, lo que plantea desafíos para sistemas de salud y pensiones.
China e India lideran en población total y población rural, evidenciando que una parte significativa de la población mundial aún vive fuera de áreas urbanas, lo que impacta en el acceso a servicios básicos.
Tasas de natalidad y crecimiento poblacional:
Los países con mayores tasas de natalidad y fertilidad son africanos, lo que coincide con los altos niveles de mortalidad infantil y resalta necesidades en salud sexual y reproductiva.
El crecimiento poblacional más elevado se observa en países árabes y algunos africanos, reforzando la relación con poblaciones jóvenes y dependientes.
Enfermedades y salud pública:
Conclusión general: Los gráficos de barra muestran que existen grandes desigualdades globales en gasto sanitario, mortalidad, estructura poblacional y control de enfermedades. Los países desarrollados presentan altos niveles de inversión y mejores resultados en salud, mientras que muchas naciones africanas y asiáticas enfrentan desafíos significativos en acceso a servicios médicos, mortalidad infantil y enfermedades infecciosas. Además, los datos demuestran cómo la densidad poblacional y la distribución rural influyen en la planificación y provisión de servicios de salud.
Una vez depurada la base de datos y seleccionadas las variables que resumen las condiciones sanitarias, demográficas y económicas de los países, se procedió a aplicar el Análisis de Componentes Principales (ACP) como primer paso del modelo. El ACP se realizó sobre las 21 variables estandarizadas y permitió reducir la dimensionalidad del sistema para identificar las estructuras latentes que diferencian a los países.
A partir del ACP se obtuvieron los componentes principales, cuya varianza explicada se presenta en los scree plots. Estos resultados constituyen la base del análisis posterior: visualización de países y variables, interpretación de dimensiones y construcción de clusters jerárquicos mediante el método de Ward.
datos_completos=variables %>% mutate(across(-pais, scale))
idx_test_completo=c(35,135,76,64,57)
train_completo=datos_completos[-idx_test_completo, ]
test_completo=datos_completos[idx_test_completo, ]
pca_completo=dudi.pca(train_completo %>% select(-pais),
center=TRUE, scale=TRUE, scannf=FALSE, nf=3)Después de estandarizar las variables y aplicar el ACP, se obtuvieron los componentes que resumen la estructura multivariada del conjunto de datos. El objetivo era identificar cuáles dimensiones capturan la mayor parte de la variabilidad entre países y qué tipo de patrones sanitarios y demográficos representan.
m = fviz_eig(pca_completo, addlabels = TRUE, barfill = "#0073C2FF") + ggtitle("Figura 2.Varianza explicada por cada componente")
ggplotly(m)La Figura 2 muestra que las primeras cuatro componentes explican cerca del 79 % de la varianza total, lo que confirma que el sistema puede resumirse adecuadamente con estos cuatro ejes.
PC1 (≈ 50 % de la varianza): resume la dimensión sanitaria general. Países con valores altos presentan mayor esperanza de vida, mayor gasto en salud y mejores resultados epidemiológicos, mientras que valores bajos se asocian con mortalidad infantil/materna elevada, baja inversión en salud y mayores tasas de natalidad. → Representa “nivel sanitario y bienestar general”.
PC2 (≈ 11 %): está impulsado por la estructura poblacional: dependencia juvenil, crecimiento poblacional y fertilidad frente a envejecimiento. → Representa “dinámica demográfica y estructura por edades”.
PC3: refinan diferencias específicas entre gasto público/privado, mortalidad total y envejecimiento. Esta dimención permite observar fuertes comparaciones entre la financiación de la salud y la mortalidad en general → Profundizan en “financiamiento sanitario y transición demográfica”.
Esta interpretación se alinea con lo observado en los análisis descriptivos: los países se diferencian principalmente por niveles de mortalidad vs. inversión sanitaria y por estructura de edad poblacional.
Las proyecciones en el plano factorial permiten ver de forma simultánea la distribución de países y variables dentro de los primeros componentes del ACP.
fviz_pca_var(pca_completo,
col.var = "contrib",
select.var = list(contrib = 15),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)fviz_pca_var(pca_completo,
axes = c(1,3),
col.var = "contrib",
select.var = list(contrib = 15),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)La Figura 3 — Países en el plano PC1–PC2 muestra varios patrones claros:
Países con sistemas de salud robustos y baja mortalidad se agrupan hacia la derecha.
Países con alta fertilidad y mortalidad infantil se ubican hacia la izquierda.
Los outliers (como India o Estados Unidos, según la variable) se separan del resto.
La Figura 4 — Variables en el plano PC1–PC2 confirma las asociaciones señaladas por la matriz de correlaciones: natalidad, fertilidad y dependencia juvenil apuntan en la misma dirección; mortalidad infantil y materna se ubican en oposición a esperanza de vida y gasto en salud.
Al analizar la Dimensión 1 junto con la Dimensión 3, se observa que cada componente captura aspectos distintos pero complementarios del estado sanitario de los países. La Dimensión 1 refleja principalmente la transición demográfica y epidemiológica, ya que está fuertemente influenciada por la mortalidad infantil, materna y neonatal, la fecundidad, la natalidad y el crecimiento poblacional. Por eso diferencia países con alta mortalidad y poblaciones jóvenes de aquellos con baja mortalidad, mayor esperanza de vida y transición avanzada.
La Dimensión 3, en cambio, resume diferencias relacionadas con la inversión sanitaria y el desempeño neonatal, influida por el gasto en salud (público y privado), la mortalidad neonatal y la dependencia poblacional total. Esto permite distinguir países que, aun teniendo niveles similares de mortalidad o transición demográfica, difieren en su nivel de financiamiento y en sus resultados en las etapas iniciales de vida.
En conjunto, este plano muestra que el estado sanitario de un país no depende solo de su nivel de mortalidad o fertilidad, sino también de cuánto invierte en salud y cómo se comportan sus resultados perinatales, lo que explica las diferencias verticales entre países con perfiles demográficos aparentemente similares.
var_contrib=get_pca_var(pca_completo)$contrib
var_contrib_df=as.data.frame(var_contrib)
var_contrib_df$Variable=rownames(var_contrib_df)
var_contrib_long=var_contrib_df %>%pivot_longer(cols = -Variable,names_to = "Componente",
values_to = "Contribucion")
ggplot(var_contrib_long, aes(x = reorder(Variable, Contribucion), y = Contribucion, fill = Componente)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
labs(title = "Fig 8.Contribución de variables por componente",
x = "Variable",
y = "% Contribución") +
theme_minimal()Variables que lo caracterizan:
Esperanza de vida alta: ≥ 78 años (OMS considera ≥ 78 como “alta” en países desarrollados)
Gasto sanitario per cápita elevado: > 3,000 USD PPP
Gasto gubernamental alto: > 1,200 USD PPP
Mortalidad infantil muy baja: < 10 por 1,000 (OMS clasifica < 10 como baja)
Mortalidad materna muy baja: < 30 por 100,000 (OMS umbral “bajo”)
Fertilidad baja: < 2.0 hijos por mujer
Coberturas de vacunación altas: > 90%
Dependencia de ancianos alta: > 20%
Este grupo reúne a los países con los sistemas de salud más desarrollados del mundo: Europa Occidental, Japón, Corea del Sur, Australia, Nueva Zelanda y Canadá. Sus indicadores caen consistentemente en los rangos superiores de la base de datos: esperanza de vida más allá de los 78–82 años, mortalidad infantil por debajo de 5–10, inversión sanitaria muy por encima de 3,000 USD PPP y coberturas de vacunación cercanas o superiores al 95%.
En el PCA, su posición es clara: se ubican hacia los valores positivos en Dimensión 1, el eje que sintetiza el nivel de desarrollo sanitario. Forman un bloque compacto porque todos comparten niveles similares de longevidad, baja mortalidad y alto gasto, reflejando sistemas de salud maduros, eficientes y universalizados. Incluso retirando China e India, la distribución del cluster prácticamente no cambia.
Variables que lo caracterizan:
Esperanza de vida media: 70–76 años (entre Q1 ~69 y Q3 ~78)
Gasto sanitario intermedio: entre 400 y 2,000 USD PPP
Mortalidad infantil moderada: 10–25 por 1,000 (OMS la define como “moderada”)
Mortalidad materna moderada: 70–200 por 100,000
Fertilidad en disminución: 2.0–3.0
Gasto de bolsillo alto: > 30–40% del gasto total
Cobertura vacunal buena pero variable: 70–90%
Este cluster agrupa países que han logrado avances sólidos en salud, pero cuyos sistemas aún muestran desigualdades y barreras de acceso. Es típico en: América Latina, Oriente Medio, Norte de África, Asia Central y partes del Sudeste Asiático.
En el PCA, ocupan una zona intermedia entre los países muy desarrollados y los de bajo desarrollo. Sus indicadores suelen estar entre los percentiles 25 y 75: la esperanza de vida oscila alrededor de 72–75 años, la mortalidad infantil entre 12 y 25, y el gasto sanitario aún depende significativamente del bolsillo de las familias.
Este grupo es estable: incluso retirando a China e India, la forma del cluster prácticamente no se altera, reflejando perfiles consistentes de transición demográfica avanzada, mortalidad reducida pero no baja y gasto sanitario moderado.
Variables que lo caracterizan:
Mortalidad infantil alta: > 40 por 1,000 (OMS: > 40 = muy alta)
Mortalidad materna muy alta: > 300 por 100,000
Gasto sanitario extremadamente bajo: < 200 USD PPP
Vacunación irregular: < 70%
Fertilidad alta: > 3.5–4.0
Crecimiento poblacional elevado: > 2% anual
Alta dependencia juvenil: > 75%
Este cluster incluye a los países con mayores retos estructurales en salud pública, concentrados en África Subsahariana y partes de Asia Meridional. Sus indicadores están sistemáticamente por debajo del percentil 25 de la base de datos: gasto per cápita menor a 200 USD, mortalidad infantil superior a 40 por 1,000, mortalidad materna que puede superar los 300–500, vacunación irregular y alta dependencia demográfica.
En el PCA, estos países se ubican hacia los valores más extremos de mortalidad y bajo gasto. La dispersión del cluster muestra variaciones internas, pero todos se mantienen lejos de los niveles medios o altos. La eliminación de China e India no afecta al grupo: el cluster 1 mantiene su forma y composición intactas.
A partir de las coordenadas del ACP se aplicó un agrupamiento jerárquico mediante el método de Ward. El dendrograma permite identificar el punto donde la fusión de grupos deja de ser coherente, y en este caso el número óptimo fue cuatro clusters.
res.pca2=PCA(train_completo %>% select(-pais), scale.unit = TRUE, graph = FALSE)
res.hcpc2=HCPC(res.pca2, nb.clust = 3, graph = FALSE)
fviz_dend(res.hcpc2,cex = 0.7, palette = "jco",rect = TRUE, rect_fill = TRUE, rect_border = "jco",main = "Fig 9.Dendrograma de agrupamiento jerárquico") +
theme_minimal() + theme(plot.title = element_text(hjust = 0.5))La presencia de China e India permite formar grupos relativamente equilibrados, donde cada cluster agrupa un número de países comparable. Gracias a sus características demográficas y sus valores en variables clave como población y muertes neonatales, los clusters reflejan de manera clara y coherente las diferencias entre países, haciendo que la partición sea informativa y visualmente consistente para todo el conjunto de datos.
Se aplicó el procedimiento de asignación por distancia a los centroides para ubicar los países que se dejaron fuera de la fase de entrenamiento.
Los resultados aparecen en la siguiente tabla:
clus_completo =hclust(dist(pca_completo$li), method = "ward.D2")
predecir_cluster=function(pca_obj, train_df, test_df, grupos_train) {
coord_train=pca_obj$li[, 1:3]
coord_test=suprow(pca_obj, test_df %>% select(-pais))$lis[, 1:3]
centroides=aggregate(coord_train, by = list(grupos_train), FUN = mean)
rownames(centroides)=paste0("Cluster_", centroides$Group.1)
dist_mat=as.matrix(dist(rbind(centroides[,-1], coord_test)))
dist_test=dist_mat[1:nrow(centroides),
(nrow(centroides)+1):nrow(dist_mat)]
asign=apply(dist_test, 2, which.min)
nombres_clusters= c(
"Cluster_1" = "Bajo desarrollo sanitario",
"Cluster_2" = "Transición sanitaria",
"Cluster_3" = "Alto desarrollo sanitario")
data.frame(
fila = rownames(test_df),
pais = test_df$pais,
cluster = nombres_clusters[rownames(dist_test)[asign]])}Tabla 4
grupo_completo=cutree(clus_completo, k = 3)
pred_completo=predecir_cluster(pca_completo, train_completo, test_completo, grupo_completo)
pred_completoEn ambos casos, los países fueron asignados al cluster más cercano en el espacio de los componentes principales, manteniendo la coherencia interna del modelo.
La Figura 10 muestra la distribución de países según los tres clusters identificados por el modelo. Se observa que los clusters contienen tamaños relativamente equilibrados, lo que indica que la segmentación agrupa a los países en categorías comparables en cuanto a desarrollo sanitario, mortalidad, gasto en salud y estructura demográfica.
nombres_clusters = c(
"1" = "Bajo desarrollo sanitario",
"2" = "Transición sanitaria",
"3" = "Alto desarrollo sanitario")
df_total1 = data.frame(
pais = train_completo$pais,
Cluster = factor(nombres_clusters[as.character(grupo_completo)],
levels = nombres_clusters))
ggplot(df_total1, aes(x = Cluster, fill = Cluster)) +
geom_bar() +
theme_minimal() +
labs(
title = " Fig 10.Distribución de países por cluster",
y = "Cantidad de países",
x = "Cluster") +
scale_fill_brewer(palette = "Set2")Finalmente, los mapas permiten visualizar de manera clara la distribución geográfica de los clusters, facilitando la identificación de patrones espaciales que podrían pasar desapercibidos en tablas o gráficos estadísticos. Esto confirma que la segmentación no solo refleja diferencias en variables sanitarias, sino también tendencias regionales y niveles de desarrollo económico, proporcionando una perspectiva integral que combina datos cuantitativos con contexto geográfico
nombres_clusters = c(
"1" = "Bajo desarrollo sanitario",
"2" = "Transición sanitaria",
"3" = "Alto desarrollo sanitario")
df_train_map = data.frame(
pais = train_completo$pais,
Cluster = factor(nombres_clusters[as.character(grupo_completo)],
levels = nombres_clusters))
df_test_map = data.frame(
pais = pred_completo$pais,
Cluster = factor(pred_completo$cluster, levels = nombres_clusters))
df_total_map = bind_rows(df_train_map, df_test_map)
df_total_map$pais = toupper(df_total_map$pais)
world = ne_countries(scale = "medium", returnclass = "sf") %>%
mutate(iso3 = toupper(iso_a3))
world_join = world %>% left_join(df_total_map, by = c("iso3" = "pais"))
pal = colorFactor("Set2", domain = df_total_map$Cluster)
leaflet(world_join) %>%
addTiles() %>%
addPolygons(
fillColor = ~pal(Cluster),
color = "gray40",
weight = 0.8,
fillOpacity = 0.85,
popup = ~paste0("<b>", name, "</b><br>Cluster: ", Cluster)
) %>%
addLegend(
"bottomright",
pal = pal,
values = ~Cluster,
title = "Clusters")El análisis permitió sintetizar, a partir de un conjunto amplio de indicadores de salud y estructura demográfica, distintos perfiles de países en términos de su nivel de desarrollo y desempeño sanitario. Mediante el ACP se redujo la dimensionalidad del problema a tres componentes principales que resumen gran parte de la variabilidad, y a partir de ellos se construyeron tres clusters de países con características relativamente homogéneas.
En términos del objetivo del estudio, se logró identificar patrones de desarrollo asociados a condiciones de salud de manera satisfactoria: se pasó de una tabla de muchos indicadores aislados a una tipología de países que integra simultáneamente mortalidad, natalidad, gasto en salud, composición etaria, cobertura de vacunación y tamaño de la población, entre otros.
Respecto al modelo, los tres componentes principales capturan dimensiones latentes de desarrollo sanitario y demográfico:
Componente 1: vincula mejores resultados en salud (mayor esperanza de vida, menor mortalidad infantil y materna, menores muertes neonatales) con mayores niveles de gasto en salud per cápita.
Componente 2: refleja diferencias en la estructura demográfica, especialmente la dependencia de jóvenes y adultos mayores, así como la dinámica de crecimiento poblacional.
Componente 3: muestra variaciones en la carga de enfermedad y financiamiento sanitario, incluyendo indicadores como tuberculosis y gasto privado en salud.
La clusterización permitió agrupar los países en segmentos claramente diferenciados:
Cluster 3 (Alto desarrollo sanitario, color morado): Predomina en Norteamérica, Europa Occidental, Oceanía y partes de Asia Oriental. Estos países presentan altos niveles de gasto en salud, esperanza de vida elevada y baja mortalidad infantil y materna, reflejando sistemas sanitarios consolidados y eficientes.
Cluster 2 (Transición sanitaria, color naranja): Se concentra en América Latina, África del Norte, Medio Oriente y parte de Asia Central. Estos países muestran indicadores intermedios, con avances en salud pero aún con desigualdades en mortalidad y gasto sanitario.
Cluster 1 (Bajo desarrollo sanitario, color verde): Principalmente en África Subsahariana y algunas regiones del sur de Asia. Presentan alta mortalidad infantil y materna, gasto sanitario reducido y alta dependencia de población joven, reflejando contextos de vulnerabilidad y menor desarrollo sanitario.
La presencia de China e India permitió formar clusters relativamente equilibrados, reflejando de manera clara la heterogeneidad global sin generar distorsiones extremas. Esto muestra que los patrones de segmentación se mantienen robustos y coherentes con la información subyacente.
En conjunto, el ejercicio permitió identificar patrones de desarrollo entre países: los clusters reflejan no solo niveles diferenciados de resultados en salud, sino también diferencias en estructura demográfica, transición epidemiológica y esfuerzo de gasto. Al visualizar los clusters sobre el mapa, se observan concentraciones regionales, reforzando la existencia de bloques geográficos con trayectorias de desarrollo relativamente similares.
Desde la perspectiva de economía y políticas públicas, este análisis tiene varias aplicaciones:
Apoyar la segmentación de países para el diseño de programas de cooperación internacional o asignación de recursos, priorizando grupos con mayores carencias en salud.
Identificar perfiles de éxito (clusters con buenos resultados sanitarios) y estudiar qué combinaciones de políticas de gasto, prevención y protección social podrían replicarse.
Servir como insumo para el monitoreo de la Agenda 2030 y los ODS, observando si los países evolucionan de clusters de alta vulnerabilidad hacia clusters con mejores resultados a lo largo del tiempo.
Analizar eficiencia y equidad, comparando qué países logran mejores resultados de salud con niveles similares de gasto y estructura demográfica.
Finalmente, se reconocen algunas limitaciones: el análisis se realizó para un solo año y con un subconjunto de variables disponibles en el Banco Mundial, siendo descriptivo y no causal. Sin embargo, como ejercicio exploratorio, el ACP y la clusterización demostraron ser herramientas útiles para resumir información compleja y generar hipótesis sobre las diferencias en desarrollo y desempeño sanitario entre países. En trabajos futuros, el enfoque puede ampliarse incorporando series de tiempo, más indicadores (por ejemplo, de pobreza, educación o gobernanza) y técnicas adicionales para profundizar en las brechas y trayectorias de desarrollo global.