Introducción

Durante buena parte del siglo XX el desarrollo de un país se midió casi exclusivamente con su producción por habitante. Sin embargo, el producto interno bruto no refleja si la población vive más años, si tiene acceso a servicios básicos o si el crecimiento se logra a costa del medio ambiente. Por esta razón, organismos como el Banco Mundial y las Naciones Unidas promueven una visión multidimensional, en la que el desarrollo se evalúa al mismo tiempo en sus dimensiones económica, social y ambiental. Esta visión quedó consignada en la Agenda 2030 y sus 17 Objetivos de Desarrollo Sostenible, adoptados por los Estados miembros de la ONU en 2015 (Naciones Unidas, 2015).

La dificultad de este enfoque es que exige comparar a los países con muchos indicadores a la vez, y las brechas entre ellos son muy amplias. En 2021 el PIB per cápita de Luxemburgo fue de 136.772 dólares internacionales, frente a 1.032 en Burundi, y la esperanza de vida osciló entre 53,1 años en Chad y 84,4 años en Japón. Además, los indicadores no siempre avanzan en la misma dirección: un país puede tener un ingreso alto y, al mismo tiempo, las mayores emisiones de dióxido de carbono por habitante del mundo, como ocurre con Catar (47,3 toneladas por persona), mientras que otro de bajo ingreso emite muy poco porque casi no dispone de industria ni de acceso a la energía.

Revisar uno a uno 18 indicadores para 160 países no permite identificar con claridad qué países se parecen entre sí. Para resolver este problema se recurre al analisis de un conjunto de técnicas que buscan patrones en los datos sin una variable respuesta definida de antemano. El presente trabajo combina dos de ellas: el análisis de componentes principales (ACP), que resume un conjunto amplio de variables correlacionadas en unos pocos componentes, y la clusterización jerárquica con el método de Ward, que agrupa a los países más parecidos a partir de esos componentes.

Desde la ingeniería industrial, el ejercicio corresponde a un problema de segmentación semejante al que se aplica a clientes o proveedores: agrupar elementos heterogéneos en conjuntos homogéneos para tomar mejores decisiones. En el caso de los países, una segmentación de este tipo permite que los gobiernos se comparen con economías de condiciones similares, que los organismos de cooperación prioricen sus recursos y que se identifiquen los grupos que requieren políticas de transición energética o de cierre de brechas sociales. También permite ubicar a Colombia frente a los países con los que realmente comparte características.

Pregunta de investigación. ¿Qué grupos de países se forman cuando se analizan de manera conjunta sus condiciones económicas, sociales, de infraestructura y ambientales, y en qué medida un mayor nivel de desarrollo coincide con un mejor desempeño ambiental?

Objetivo general. Identificar y caracterizar segmentos de países a partir de 18 indicadores del Banco Mundial para el año 2021, mediante el análisis de componentes principales y la clusterización jerárquica con el método de Ward.

Objetivos específicos. Describir el comportamiento de los indicadores económicos, sociales, de infraestructura y ambientales de los países; reducir la dimensionalidad de la información e interpretar los componentes que concentran la mayor variabilidad; y conformar, caracterizar y comparar los grupos de países resultantes, con especial atención a la posición de Colombia.

Metodología

La investigación siguió un enfoque en el que no existe una variable por predecir y el propósito es descubrir la estructura interna de los datos. El procedimiento se desarrolló en seis etapas: selección de la fuente, del año y de las variables; depuración de la base; análisis descriptivo; reducción de dimensionalidad mediante el ACP; clusterización con el método de Ward sobre los componentes estimados; e interpretación de los grupos obtenidos. El análisis se realizó en R con los paquetes dplyr, tidyr y readr para la manipulación de los datos, ggplot2 y plotly para las gráficas interactivas, DT para las tablas interactivas y cluster para el índice de silueta.

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, fig.align = "center")

library(dplyr)
library(tidyr)
library(readr)
library(knitr)
library(ggplot2)
library(plotly)
library(DT)
library(cluster)

fmt  <- function(x, d = 2) formatC(x, format = "f", digits = d, big.mark = ".", decimal.mark = ",")
fmt0 <- function(x) fmt(x, 0)
pct  <- function(x, d = 1) paste0(fmt(100 * x, d), " %")
fpct <- function(x, d = 1) paste0(fmt(x, d), " %")

azul <- "#1F4E78"; azul_claro <- "#9DB9D5"; gris <- "#BFBFBF"; rojo <- "#C00000"
col_region <- c("África" = "#C55A11", "América" = "#1F4E78", "Asia" = "#7F7F7F", "Europa" = "#5B9BD5")
niv_ingreso <- c("Ingreso bajo", "Ingreso medio bajo", "Ingreso medio alto", "Ingreso alto")
col_ingreso <- setNames(c("#C00000", "#F4B183", "#9DB9D5", "#1F4E78"), niv_ingreso)

tema <- theme_minimal(base_size = 12, base_family = "Times New Roman") +
  theme(text = element_text(color = "black"), panel.grid.minor = element_blank(),
        legend.position = "bottom", strip.text = element_text(face = "bold"))
interactivo <- function(g, alto = 430) {
  ggplotly(g, tooltip = "text", height = alto) |>
    layout(font = list(family = "Times New Roman", color = "#000000", size = 14),
           separators = ",.", legend = list(orientation = "h", x = 0, y = -0.18)) |>
    config(displaylogo = FALSE, locale = "es")
}
mapa <- function(d, z, texto, escala, titulo, ...) {
  plot_geo(d, locations = ~codigo_iso3, height = 480) |>
    add_trace(type = "choropleth", z = z, text = texto, hoverinfo = "text", colorscale = escala,
              marker = list(line = list(color = "white", width = 0.4)),
              colorbar = list(title = titulo, len = 0.6), ...) |>
    layout(geo = list(showframe = FALSE, showcoastlines = FALSE, projection = list(type = "natural earth"),
                      showcountries = TRUE, countrycolor = "white", landcolor = "#F2F2F2", showland = TRUE),
           font = list(family = "Times New Roman", color = "#000000", size = 13),
           margin = list(l = 0, r = 0, t = 10, b = 0)) |>
    config(displaylogo = FALSE, locale = "es")
}

variables <- c(pib_pc_ppa = "PIB per cápita PPA", agricultura_pib = "Agricultura (% del PIB)",
               industria_pib = "Industria (% del PIB)", desempleo = "Desempleo",
               participacion_laboral_fem = "Participación laboral femenina",
               esperanza_vida = "Esperanza de vida", mortalidad_infantil = "Mortalidad infantil",
               fecundidad = "Fecundidad", poblacion_65 = "Población de 65 años o más",
               crecimiento_poblacion = "Crecimiento de la población", gasto_salud_pib = "Gasto en salud (% del PIB)",
               usuarios_internet = "Usuarios de internet", acceso_electricidad = "Acceso a electricidad",
               poblacion_urbana = "Población urbana", energia_renovable = "Energía renovable",
               co2_pc = "CO2 per cápita", area_forestal = "Área forestal", pm25 = "Contaminación PM2.5")
dimension <- c(rep("Economía", 5), rep("Salud y demografía", 6), rep("Infraestructura y conectividad", 3),
               rep("Ambiente y energía", 4))
names(dimension) <- names(variables)
fuente <- "Fuente: Banco Mundial, World Development Indicators (2026)."

Fuente de datos

Se utilizaron los Indicadores del Desarrollo Mundial (World Development Indicators, WDI), la principal base de datos del Banco Mundial sobre desarrollo. Esta base reúne cerca de 1.500 indicadores anuales compilados a partir de fuentes oficiales, como los institutos nacionales de estadística, la Organización Mundial de la Salud, la Organización Internacional del Trabajo y la Agencia Internacional de Energía. Las series se obtuvieron de la réplica completa del WDI que mantiene el proyecto Open Numbers de Gapminder, la cual reproduce sin modificaciones los valores publicados por el Banco Mundial y permite su descarga automática.

Tabla 1

Ficha de la fuente de datos

Elemento Descripción
Base de datos World Development Indicators (WDI)
Entidad que la publica Banco Mundial
Enlace https://databank.worldbank.org/source/world-development-indicators
Réplica utilizada Open Numbers – Gapminder (actualización del 18 de octubre de 2026)
Año analizado 2021
Unidad de análisis País (Estado miembro u observador de la ONU)
Número de variables 18 cuantitativas y 4 de identificación
Países en la base final 160
Licencia Creative Commons Attribution 4.0 (CC BY 4.0)

Fuente: Banco Mundial, World Development Indicators (2026).

Selección del año y de las variables

El taller exige trabajar con un solo año y únicamente con países. Se escogió el año 2021 porque es el más reciente en el que el WDI ofrece una cobertura casi completa de los indicadores de energía y ambiente. El caso más claro es el consumo de energía renovable, variable central para analizar la sostenibilidad, cuya cobertura cae de forma abrupta a partir de 2022 (Tabla 2). Trabajar con un año posterior habría obligado a eliminar esta variable o a perder la mayoría de los países.

Tabla 2

Número de economías con dato de consumo de energía renovable según el año

Año 2019 2020 2021 2022 2023
Economías con dato 210 210 210 69 0

Fuente: Banco Mundial, World Development Indicators (2026).

Las variables se escogieron con tres criterios. El primero es que representen las tres dimensiones del desarrollo sostenible (económica, social y ambiental), a las que se agregó la infraestructura y la conectividad por su relación directa con la calidad de vida. El segundo es que tengan buena cobertura entre países en 2021, para no perder una parte importante de la muestra. El tercero es que sean indicadores relativos (porcentajes, tasas o valores por habitante), de manera que países de distinto tamaño puedan compararse entre sí. Por este último criterio se descartaron variables como el PIB total o la población, y por falta de datos se descartaron otras de interés, como la pobreza, el índice de Gini, la matrícula escolar y la apertura comercial.

Definición de variables

Tabla 3

Variables del estudio

Variable Código WDI Descripción Unidad Dimensión
pib_pc_ppa NY.GDP.PCAP.PP.KD PIB per cápita en paridad de poder adquisitivo US$ internacionales de 2021 Economía
agricultura_pib NV.AGR.TOTL.ZS Valor agregado de agricultura, silvicultura y pesca % del PIB Economía
industria_pib NV.IND.TOTL.ZS Valor agregado de la industria, incluida la construcción % del PIB Economía
desempleo SL.UEM.TOTL.ZS Tasa de desempleo (estimación de la OIT) % de la fuerza laboral Economía
participacion_laboral_fem SL.TLF.CACT.FE.ZS Participación de las mujeres en la fuerza laboral % de mujeres de 15 años o más Economía
esperanza_vida SP.DYN.LE00.IN Esperanza de vida al nacer Años Salud y demografía
mortalidad_infantil SP.DYN.IMRT.IN Muertes de menores de un año Por 1.000 nacidos vivos Salud y demografía
fecundidad SP.DYN.TFRT.IN Tasa global de fecundidad Hijos por mujer Salud y demografía
poblacion_65 SP.POP.65UP.TO.ZS Población de 65 años o más % de la población Salud y demografía
crecimiento_poblacion SP.POP.GROW Crecimiento anual de la población % anual Salud y demografía
gasto_salud_pib SH.XPD.CHEX.GD.ZS Gasto corriente en salud % del PIB Salud y demografía
usuarios_internet IT.NET.USER.ZS Personas que usan internet % de la población Infraestructura
acceso_electricidad EG.ELC.ACCS.ZS Población con acceso a electricidad % de la población Infraestructura
poblacion_urbana SP.URB.TOTL.IN.ZS Población que vive en zonas urbanas % de la población Infraestructura
energia_renovable EG.FEC.RNEW.ZS Consumo de energía renovable % del consumo final de energía Ambiente y energía
co2_pc EN.GHG.CO2.PC.CE.AR5 Emisiones de CO2 por habitante, sin uso de la tierra Toneladas por persona Ambiente y energía
area_forestal AG.LND.FRST.ZS Superficie cubierta por bosques % del territorio Ambiente y energía
pm25 EN.ATM.PM25.MC.M3 Exposición media anual a material particulado PM2.5 Microgramos por m³ Ambiente y energía

Fuente: Banco Mundial, World Development Indicators (2026).

Además de las 18 variables cuantitativas, la base incluye el nombre del país, su código ISO3, la región y el grupo de ingreso del Banco Mundial. Estas cuatro variables no intervienen en el ACP ni en la clusterización; se utilizan únicamente para interpretar los resultados.

La dimensión económica describe el nivel de ingreso y la estructura productiva de cada país. El PIB per cápita en paridad de poder adquisitivo permite comparar el ingreso real eliminando las diferencias de precios entre países. El peso de la agricultura y de la industria en el PIB indica si la economía depende de actividades primarias o si ya se ha industrializado, mientras que el desempleo y la participación laboral femenina reflejan qué tanto aprovecha el país su fuerza de trabajo.

La dimensión de salud y demografía recoge los resultados del desarrollo sobre la población. La esperanza de vida y la mortalidad infantil son los indicadores más directos de bienestar, mientras que la fecundidad, la población mayor de 65 años y el crecimiento poblacional describen la etapa de la transición demográfica en la que se encuentra cada país. El gasto en salud muestra cuántos recursos destina la economía a este sector.

La dimensión de infraestructura y conectividad mide el acceso a servicios que hoy se consideran básicos: la electricidad, el internet y la vida en zonas urbanas, donde se concentran los servicios públicos. Finalmente, la dimensión ambiental y energética evalúa la sostenibilidad a partir de la proporción de energía renovable, las emisiones de CO2 por habitante, la cobertura de bosques y la calidad del aire, medida por la exposición al material particulado fino (PM2.5), el contaminante con mayor efecto sobre la salud.

Depuración de los datos

La base de partida contiene las 215 economías que reportan al menos uno de los 18 indicadores en 2021, ya que el WDI no se limita a los países soberanos e incluye también territorios dependientes y regiones administrativas especiales. La depuración se realizó en tres pasos. Primero se verificó que no hubiera economías duplicadas. Después se conservaron solo los Estados miembros u observadores de las Naciones Unidas, lo que excluyó 21 territorios como Aruba, Groenlandia, Hong Kong o Kosovo, en cumplimiento de la condición de trabajar únicamente con países. Por último, se eliminaron los países sin dato en alguna de las 18 variables, sin imputar valores, de modo que el ACP y los grupos se construyeran solo con información observada.

wdi_2021 <- read_csv("wdi_2021_economias.csv", show_col_types = FALSE)

paso_1 <- wdi_2021 |> distinct(codigo_iso3, .keep_all = TRUE)
paso_2 <- paso_1 |> filter(estado_onu)
base <- paso_2 |> drop_na(all_of(names(variables)))
excluidos <- paso_2 |> filter(!codigo_iso3 %in% base$codigo_iso3)

n_base <- nrow(base)
extremo <- function(v, f) base$pais[f(base[[v]]) == base[[v]]][1]
col <- base |> filter(pais == "Colombia")

Tabla 4

Proceso de depuración de la base de datos

kable(data.frame(
  Paso = 1:4,
  `Descripción` = c("Economías con al menos un indicador en 2021",
                    "Eliminación de economías duplicadas",
                    "Selección de Estados miembros u observadores de la ONU",
                    "Eliminación de países con datos faltantes"),
  `Registros eliminados` = c("–", fmt0(nrow(wdi_2021) - nrow(paso_1)),
                             fmt0(nrow(paso_1) - nrow(paso_2)), fmt0(nrow(paso_2) - n_base)),
  `Registros resultantes` = fmt0(c(nrow(wdi_2021), nrow(paso_1), nrow(paso_2), n_base)),
  check.names = FALSE), align = c("c", "l", "r", "r"))
Paso Descripción Registros eliminados Registros resultantes
1 Economías con al menos un indicador en 2021 – 215
2 Eliminación de economías duplicadas 0 215
3 Selección de Estados miembros u observadores de la ONU 21 194
4 Eliminación de países con datos faltantes 34 160

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 1

Número de países sin dato en 2021 según la variable

d1 <- paso_2 |>
  summarise(across(all_of(names(variables)), ~ sum(is.na(.x)))) |>
  pivot_longer(everything(), names_to = "variable", values_to = "faltantes") |>
  mutate(nombre = variables[variable]) |>
  arrange(faltantes)
g1 <- ggplot(d1, aes(x = factor(nombre, levels = nombre), y = faltantes,
                     text = paste0(nombre, "<br>Países sin dato: ", faltantes))) +
  geom_col(fill = azul, width = 0.7) +
  coord_flip() +
  labs(x = NULL, y = "Número de países sin dato") + tema
interactivo(g1, 520)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 1 cuenta, para cada variable, los países sin dato entre los 194 Estados de la ONU que reportan al menos un indicador. Los datos faltantes se concentran en pocas variables: los usuarios de internet, el desempleo y la participación laboral femenina son los indicadores con más vacíos, porque dependen de encuestas que algunos países pequeños o en conflicto no realizan con regularidad. Las variables demográficas y ambientales, en cambio, están casi completas, ya que el Banco Mundial las estima para todos los países a partir de modelos internacionales.

Tabla 5

Países excluidos por falta de información

faltan <- excluidos |>
  pivot_longer(all_of(names(variables)), names_to = "variable", values_to = "valor") |>
  filter(is.na(valor)) |>
  group_by(pais, region) |>
  summarise(n = n(), detalle = paste(variables[variable], collapse = ", "), .groups = "drop") |>
  arrange(pais)
kable(faltan |> transmute(`País` = pais, `Región` = region, `Variables faltantes` = n,
                          `Variables sin dato` = detalle),
      align = c("l", "l", "c", "l"))
País Región Variables faltantes Variables sin dato
Andorra Europa 3 Desempleo, Participación laboral femenina, CO2 per cápita
Antigua y Barbuda América 2 Desempleo, Participación laboral femenina
Corea del Norte Asia 5 PIB per cápita PPA, Agricultura (% del PIB), Industria (% del PIB), Gasto en salud (% del PIB), Usuarios de internet
Cuba América 1 PIB per cápita PPA
Dominica América 2 Desempleo, Participación laboral femenina
Eritrea África 4 PIB per cápita PPA, Agricultura (% del PIB), Industria (% del PIB), Usuarios de internet
Granada América 2 Desempleo, Participación laboral femenina
Islas Marshall Asia 2 Desempleo, Participación laboral femenina
Kiribati Asia 2 Desempleo, Participación laboral femenina
Liechtenstein Europa 6 PIB per cápita PPA, Desempleo, Participación laboral femenina, Mortalidad infantil, CO2 per cápita, Contaminación PM2.5
Micronesia Asia 3 Desempleo, Participación laboral femenina, Usuarios de internet
Montenegro Europa 1 CO2 per cápita
Myanmar Asia 1 Usuarios de internet
Mónaco Europa 6 PIB per cápita PPA, Agricultura (% del PIB), Desempleo, Participación laboral femenina, Energía renovable, CO2 per cápita
Nauru Asia 4 Agricultura (% del PIB), Industria (% del PIB), Desempleo, Participación laboral femenina
Pakistán Asia 1 Usuarios de internet
Palaos Asia 3 Desempleo, Participación laboral femenina, Usuarios de internet
Palestina Asia 2 Usuarios de internet, CO2 per cápita
República Centroafricana África 1 Usuarios de internet
Samoa Asia 1 Usuarios de internet
San Cristóbal y Nieves América 2 Desempleo, Participación laboral femenina
San Marino Europa 4 Desempleo, Participación laboral femenina, Energía renovable, CO2 per cápita
Serbia Europa 1 CO2 per cápita
Seychelles África 2 Desempleo, Participación laboral femenina
Siria Asia 1 Usuarios de internet
Somalia África 2 Agricultura (% del PIB), Industria (% del PIB)
Sudán África 1 Usuarios de internet
Sudán del Sur África 5 PIB per cápita PPA, Agricultura (% del PIB), Industria (% del PIB), Usuarios de internet, CO2 per cápita
Surinam América 1 Usuarios de internet
Turkmenistán Asia 1 Usuarios de internet
Tuvalu Asia 5 Agricultura (% del PIB), Industria (% del PIB), Desempleo, Participación laboral femenina, Usuarios de internet
Vanuatu Asia 1 Usuarios de internet
Venezuela América 3 PIB per cápita PPA, Agricultura (% del PIB), Industria (% del PIB)
Yemen Asia 4 PIB per cápita PPA, Agricultura (% del PIB), Industria (% del PIB), Usuarios de internet

Fuente: Banco Mundial, World Development Indicators (2026).

Se excluyeron 34 países. La mayoría son pequeños Estados insulares del Caribe y del Pacífico, microestados europeos como Mónaco, San Marino y Liechtenstein, y países afectados por conflictos o con sistemas estadísticos limitados, como Siria, Yemen, Sudán del Sur o Venezuela. En consecuencia, los resultados representan a los países con sistemas estadísticos más consolidados, aspecto que debe considerarse al interpretar los grupos.

Figura 2

Países incluidos y excluidos del análisis

d2 <- paso_1 |>
  mutate(estado = case_when(codigo_iso3 %in% base$codigo_iso3 ~ "Incluido en el análisis",
                            estado_onu ~ "Excluido por datos faltantes",
                            TRUE ~ "Territorio no soberano"),
         z = match(estado, c("Incluido en el análisis", "Excluido por datos faltantes", "Territorio no soberano")))
mapa(d2, ~z, ~paste0(pais, "<br>", estado),
     list(c(0, azul), c(0.33, azul), c(0.34, rojo), c(0.66, rojo), c(0.67, gris), c(1, gris)), "",
     zmin = 1, zmax = 3) |>
  colorbar(tickvals = c(1.33, 2, 2.67), ticktext = c("Incluido", "Excluido por datos", "Territorio no soberano"))

Fuente: Banco Mundial, World Development Indicators (2026).

El mapa muestra que la base final cubre prácticamente toda América continental, Europa, Asia y África. Los vacíos se concentran en países afectados por conflictos o con sistemas estadísticos limitados, como Sudán, Somalia, Siria, Yemen, Pakistán, Myanmar y Corea del Norte; en Venezuela y Cuba dentro de América Latina; y en los pequeños Estados insulares, que casi no son visibles a esta escala. Los países en blanco no reportan ningún indicador o no tienen un código geográfico reconocido por el mapa.

Tabla 6

Distribución de los países de la base final por región y grupo de ingreso

tab_rg <- base |>
  mutate(region = factor(region, levels = c("África", "América", "Asia", "Europa")),
         grupo_ingreso = factor(grupo_ingreso, levels = niv_ingreso)) |>
  count(region, grupo_ingreso) |>
  pivot_wider(names_from = grupo_ingreso, values_from = n, values_fill = 0) |>
  mutate(Total = rowSums(across(where(is.numeric))))
tab_rg <- bind_rows(tab_rg |> mutate(region = as.character(region)),
                    tab_rg |> summarise(region = "Total", across(where(is.numeric), sum)))
kable(tab_rg |> rename(`Región` = region), align = c("l", rep("r", 5)))
Región Ingreso bajo Ingreso medio bajo Ingreso medio alto Ingreso alto Total
África 20 20 8 0 48
América 1 4 15 8 28
Asia 3 14 12 13 42
Europa 0 2 11 29 42
Total 24 40 46 50 160

Fuente: Banco Mundial, World Development Indicators (2026).

La base final quedó con 160 países: 48 de África, 42 de Asia, 42 de Europa y 28 de América, distribuidos en los cuatro grupos de ingreso de la clasificación del Banco Mundial. La Tabla 7 presenta la base completa, que puede consultarse, ordenarse y descargarse.

Tabla 7

Base de datos final (interactiva)

datatable(base |> select(-estado_onu) |>
            rename(`País` = pais, ISO3 = codigo_iso3, `Región` = region, `Grupo de ingreso` = grupo_ingreso) |>
            rename_with(~ variables[.x], .cols = all_of(names(variables))),
          rownames = FALSE, extensions = "Buttons",
          options = list(pageLength = 10, scrollX = TRUE, dom = "Blfrtip", buttons = c("csv", "excel"),
                         language = list(search = "Buscar:", thousands = ".", decimal = ",",
                                         lengthMenu = "Mostrar _MENU_ registros",
                                         info = "Registros _START_ a _END_ de _TOTAL_",
                                         paginate = list(`next` = "Siguiente", previous = "Anterior")))) |>
  formatRound(columns = unname(variables), digits = 2, mark = ".", dec.mark = ",")

Fuente: Banco Mundial, World Development Indicators (2026).

Métodos de análisis

El análisis de componentes principales transforma las p variables originales en un nuevo conjunto de variables no correlacionadas entre sí, denominadas componentes principales, que se ordenan según la cantidad de varianza que explican (Jolliffe y Cadima, 2016). Cada componente es una combinación lineal de las variables estandarizadas:

CPk = ak1Z1 + ak2Z2 + … + akpZp,    Var(CPk) = λk

Donde Zj es la variable j estandarizada, los coeficientes akj forman el vector propio del componente k y λk es su valor propio. La proporción de la varianza total explicada por el componente k es λk/p. Las variables se estandarizaron (media cero y desviación estándar uno) porque están medidas en escalas muy distintas, como dólares, años, porcentajes y toneladas; sin este paso, las variables de mayor magnitud dominarían el análisis únicamente por su escala. Estandarizar equivale a realizar el ACP sobre la matriz de correlaciones. El número de componentes se definió con dos criterios complementarios: el criterio de Kaiser, que conserva los componentes con valor propio mayor que 1 por explicar más varianza que una variable original, y la varianza acumulada, que debe ser suficientemente alta para no perder información relevante (Kaiser, 1960).

La clusterización se realizó con el método jerárquico aglomerativo de Ward sobre los puntajes de los países en los componentes conservados. El procedimiento parte de considerar a cada país como un grupo y, en cada paso, une los dos grupos cuya fusión produce el menor aumento de la suma de cuadrados dentro de los grupos (Ward, 1963):

Δ(A, B) = [nA nB / (nA + nB)] · ‖x̄A − x̄B‖2

Donde nA y nB son el número de países de cada grupo y x̄A y x̄B sus centroides en el espacio de los componentes. Este criterio produce grupos compactos y de tamaño equilibrado. Trabajar sobre los componentes, y no sobre las 18 variables originales, evita que la información repetida entre variables correlacionadas pese más de una vez en la distancia entre países. El número de clusters se determinó con el dendrograma, el método del codo y el índice de silueta, que compara la cercanía de cada país con su propio grupo frente al grupo más próximo (Rousseeuw, 1987).

Resultados descriptivos

Estadísticas descriptivas

Tabla 8

Estadísticas descriptivas de las variables cuantitativas

desc <- base |>
  pivot_longer(all_of(names(variables)), names_to = "variable", values_to = "valor") |>
  group_by(variable) |>
  summarise(Media = mean(valor), DE = sd(valor), CV = sd(valor) / mean(valor), `Mínimo` = min(valor),
            Mediana = median(valor), `Máximo` = max(valor),
            Asimetria = mean((valor - mean(valor))^3) / sd(valor)^3, .groups = "drop") |>
  mutate(Dimensión = dimension[variable], variable = factor(variable, levels = names(variables))) |>
  arrange(variable)
kable(desc |> transmute(Variable = variables[as.character(variable)], `Dimensión`,
                        Media = fmt(Media), `Desv. estándar` = fmt(DE), `Coef. variación` = fmt(CV),
                        `Mínimo`= fmt(`Mínimo`), Mediana = fmt(Mediana), `Máximo` = fmt(`Máximo`),
                        `Asimetría` = fmt(Asimetria)),
      align = c("l", "l", rep("r", 7)))
Variable Dimensión Media Desv. estándar Coef. variación Mínimo Mediana Máximo Asimetría
PIB per cápita PPA Economía 25.636,34 26.358,41 1,03 1.032,38 15.903,07 136.772,44 1,77
Agricultura (% del PIB) Economía 10,37 10,07 0,97 0,03 7,13 40,05 1,20
Industria (% del PIB) Economía 27,32 11,75 0,43 2,76 25,30 74,91 1,09
Desempleo Economía 7,83 6,07 0,78 0,14 5,58 34,15 1,75
Participación laboral femenina Economía 51,35 14,50 0,28 10,90 53,02 82,81 -0,63
Esperanza de vida Salud y demografía 71,36 7,51 0,11 53,14 71,66 84,45 -0,16
Mortalidad infantil Salud y demografía 19,23 17,76 0,92 1,80 12,25 69,90 1,08
Fecundidad Salud y demografía 2,51 1,24 0,49 0,81 1,99 6,25 1,06
Población de 65 años o más Salud y demografía 9,45 6,79 0,72 1,30 6,62 29,22 0,72
Crecimiento de la población Salud y demografía 0,90 1,59 1,76 -10,93 0,97 3,44 -2,76
Gasto en salud (% del PIB) Salud y demografía 7,05 3,01 0,43 2,15 6,73 21,51 1,02
Usuarios de internet Infraestructura y conectividad 66,81 26,43 0,40 6,78 74,94 100,00 -0,71
Acceso a electricidad Infraestructura y conectividad 85,85 24,48 0,29 10,20 100,00 100,00 -1,60
Población urbana Infraestructura y conectividad 61,00 21,79 0,36 14,44 62,92 100,00 -0,23
Energía renovable Ambiente y energía 32,70 27,34 0,84 0,00 24,20 96,30 0,71
CO2 per cápita Ambiente y energía 4,62 6,05 1,31 0,05 2,62 47,28 3,23
Área forestal Ambiente y energía 32,19 22,93 0,71 0,00 31,79 91,52 0,45
Contaminación PM2.5 Ambiente y energía 23,50 15,88 0,68 4,62 18,74 107,89 1,84

Fuente: Banco Mundial, World Development Indicators (2026).

La Tabla 8 muestra que, sin considerar el crecimiento de la población, cuyo promedio cercano a cero vuelve poco informativo el coeficiente de variación, las variables con mayor dispersión relativa son las emisiones de CO2 per cápita (coeficiente de variación de 1,31), el PIB per cápita (1,03) y el peso de la agricultura en el PIB (0,97), lo que confirma que las mayores brechas entre países son de ingreso y de huella ambiental. En el otro extremo, la esperanza de vida (0,11) y la participación laboral femenina (0,28) son las variables más homogéneas. Las emisiones de CO2 (asimetría de 3,23), la contaminación por PM2.5 y el PIB per cápita presentan una fuerte asimetría positiva, porque pocos países concentran valores muy altos, mientras que el acceso a electricidad y el crecimiento poblacional tienen asimetría negativa: la mayoría de los países tiene cobertura eléctrica casi universal y un crecimiento positivo, con pocas excepciones muy por debajo.

Distribución de las variables

histogramas <- function(vars, ncol = 3, alto = 520) {
  d <- bind_rows(lapply(vars, function(v) {
    h <- hist(base[[v]], breaks = 20, plot = FALSE)
    data.frame(xmin = head(h$breaks, -1), xmax = tail(h$breaks, -1), n = h$counts, Variable = variables[[v]])
  })) |> mutate(Variable = factor(Variable, levels = variables[vars]))
  medias <- data.frame(Variable = factor(variables[vars], levels = variables[vars]),
                       media = sapply(vars, function(v) mean(base[[v]])))
  g <- ggplot(d) +
    geom_rect(aes(xmin = xmin, xmax = xmax, ymin = 0, ymax = n,
                  text = paste0(Variable, "<br>Intervalo: ", fmt(xmin), " a ", fmt(xmax), "<br>Países: ", n)),
              fill = azul, color = "white", linewidth = 0.2) +
    geom_vline(data = medias, aes(xintercept = media, text = paste0("Media: ", fmt(media))),
               color = rojo, linetype = "dashed") +
    facet_wrap(~ Variable, scales = "free", ncol = ncol) +
    scale_x_continuous(labels = function(x) format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE, trim = TRUE)) +
    labs(x = NULL, y = NULL) + tema
  interactivo(g, alto)
}

Figura 3

Distribución de las variables de la dimensión económica

histogramas(names(variables)[dimension == "Economía"])

Fuente: Banco Mundial, World Development Indicators (2026).

En las Figuras 3 a 6 cada barra indica el número de países en el intervalo y la línea punteada roja marca la media de la variable. En la dimensión económica, el PIB per cápita tiene una distribución muy sesgada a la derecha: la mediana es de 15.903 dólares, pero un grupo reducido de países supera los 80.000, encabezado por Luxemburgo. El peso de la agricultura también se concentra en valores bajos, con una cola de países donde supera el 25 % del PIB, casi todos de África subsahariana. El desempleo se ubica en su mayoría por debajo del 10 %, con casos extremos como Esuatini (34,2 %), y la participación laboral femenina presenta una distribución amplia, desde 10,9 % en Irak hasta 82,8 % en Madagascar.

Figura 4

Distribución de las variables de la dimensión de salud y demografía

histogramas(names(variables)[dimension == "Salud y demografía"])

Fuente: Banco Mundial, World Development Indicators (2026).

En salud y demografía, la esperanza de vida se concentra entre 65 y 80 años, mientras que la mortalidad infantil y la fecundidad tienen colas largas hacia valores altos, que corresponden a los países con transición demográfica incipiente, como Chad, con 6,25 hijos por mujer. La población mayor de 65 años muestra dos grupos: países jóvenes con menos del 5 % de adultos mayores y países envejecidos, como Japón, donde esta proporción alcanza el 29,2 %. En el crecimiento poblacional se destaca Catar, con una caída de -10,9 % en 2021, asociada a la salida de trabajadores migrantes durante la pandemia.

Figura 5

Distribución de las variables de la dimensión de infraestructura y conectividad

histogramas(names(variables)[dimension == "Infraestructura y conectividad"], alto = 330)

Fuente: Banco Mundial, World Development Indicators (2026).

La infraestructura muestra el contraste más marcado entre países. El acceso a electricidad es universal o casi universal en la mayoría de ellos (la mediana es 100,0 %), pero existe un grupo de países africanos con coberturas inferiores al 50 %, con Burundi en el extremo (10,2 %). El uso de internet se distribuye de manera más amplia, desde 6,8 % en Burundi hasta la cobertura total en los países del Golfo, lo que lo convierte en uno de los indicadores que mejor distingue los niveles de desarrollo.

Figura 6

Distribución de las variables de la dimensión ambiental y energética

histogramas(names(variables)[dimension == "Ambiente y energía"], ncol = 2)

Fuente: Banco Mundial, World Development Indicators (2026).

En la dimensión ambiental, las emisiones de CO2 por habitante son la variable más asimétrica de la base: la mayoría de los países emite menos de 5 toneladas por persona, mientras que Catar supera las 47. La energía renovable se concentra en valores bajos, ya que el 42 % de los países se ubica por debajo del 20 %, pero un grupo de 26 países supera el 70 %, casi todos de ingreso bajo. La contaminación por PM2.5 se concentra entre 10 y 35 microgramos por metro cúbico, valores que superan ampliamente la guía de 5 microgramos de la Organización Mundial de la Salud en casi todos los países.

Diferencias entre regiones

Figura 7

Distribución de indicadores seleccionados según la región

sel7 <- c("pib_pc_ppa", "esperanza_vida", "mortalidad_infantil", "usuarios_internet", "energia_renovable", "co2_pc")
med_reg <- base |> group_by(region) |>
  summarise(across(all_of(sel7), median), .groups = "drop")
mr <- function(r, v) med_reg[[v]][med_reg$region == r]
d7 <- base |>
  select(pais, region, all_of(sel7)) |>
  pivot_longer(all_of(sel7), names_to = "variable", values_to = "valor") |>
  mutate(Variable = factor(variables[variable], levels = variables[sel7]))
g7 <- ggplot(d7, aes(x = region, y = valor, fill = region)) +
  geom_boxplot(alpha = 0.55, outlier.shape = NA) +
  geom_jitter(aes(text = paste0(pais, "<br>", Variable, ": ", fmt(valor)), color = region), width = 0.15, size = 1) +
  facet_wrap(~ Variable, scales = "free_y", ncol = 3) +
  scale_y_continuous(labels = function(x) format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE, trim = TRUE)) +
  scale_fill_manual(values = col_region, guide = "none") +
  scale_color_manual(values = col_region, guide = "none") +
  labs(x = NULL, y = NULL) + tema
interactivo(g7, 600) |> layout(showlegend = FALSE)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 7 evidencia una fuerte diferencia regional. Europa tiene la mediana más alta de PIB per cápita (44.250 dólares) y de esperanza de vida (78,7 años), mientras que África registra las condiciones más críticas, con una mediana de mortalidad infantil de 38,0 por cada 1.000 nacidos vivos y de uso de internet de 34,3 %. América y Asia ocupan posiciones intermedias, aunque con gran dispersión interna. En la dimensión ambiental el orden se invierte: África tiene la mayor proporción de energía renovable (mediana de 67,2 %) y las menores emisiones de CO2, mientras que en Asia aparecen los valores extremos de emisiones, que corresponden a los países petroleros del Golfo.

Relaciones entre variables

Figura 8

Relación entre el PIB per cápita y la esperanza de vida

r_pib_ev <- cor(log(base$pib_pc_ppa), base$esperanza_vida)
g8 <- ggplot(base, aes(x = pib_pc_ppa, y = esperanza_vida)) +
  geom_smooth(method = "loess", se = FALSE, color = "black", linewidth = 0.6, linetype = "dashed") +
  geom_point(aes(color = region, text = paste0(pais, "<br>PIB per cápita: ", fmt0(pib_pc_ppa),
                                               "<br>Esperanza de vida: ", fmt(esperanza_vida, 1))), size = 2.2, alpha = 0.85) +
  scale_x_log10(labels = function(x) fmt0(x)) +
  scale_color_manual(values = col_region, name = NULL) +
  labs(x = "PIB per cápita PPA (escala logarítmica)", y = "Esperanza de vida (años)") + tema
interactivo(g8, 470)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 8 reproduce la conocida curva de Preston (Preston, 1975): la esperanza de vida aumenta rápidamente con el ingreso en los países pobres y se estabiliza en los países ricos. La correlación entre el logaritmo del PIB per cápita y la esperanza de vida es de 0,84. Los países con PIB per cápita inferior a 5.000 dólares tienen en promedio una esperanza de vida de 62,4 años, frente a 80,8 años en los que superan los 40.000. La línea punteada representa la tendencia suavizada.

Figura 9

Relación entre el PIB per cápita y las emisiones de CO2 per cápita

r_pib_co2 <- cor(log(base$pib_pc_ppa), log(base$co2_pc))
g9 <- ggplot(base, aes(x = pib_pc_ppa, y = co2_pc)) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linewidth = 0.6, linetype = "dashed") +
  geom_point(aes(color = region, text = paste0(pais, "<br>PIB per cápita: ", fmt0(pib_pc_ppa),
                                               "<br>CO2 per cápita: ", fmt(co2_pc))), size = 2.2, alpha = 0.85) +
  scale_x_log10(labels = function(x) fmt0(x)) +
  scale_y_log10(labels = function(x) fmt(x, 1)) +
  scale_color_manual(values = col_region, name = NULL) +
  labs(x = "PIB per cápita PPA (escala logarítmica)", y = "CO2 per cápita, toneladas (escala logarítmica)") + tema
interactivo(g9, 470)

Fuente: Banco Mundial, World Development Indicators (2026).

La relación entre riqueza y emisiones es todavía más estrecha: la correlación entre los logaritmos del PIB per cápita y del CO2 per cápita es de 0,91. Este resultado muestra que, con el modelo energético actual, el crecimiento económico viene acompañado de mayores emisiones. Sin embargo, para un mismo nivel de ingreso hay diferencias importantes: economías basadas en hidrocarburos o carbón, como Libia, Trinidad y Tobago, Irán, Sudáfrica y Mongolia, se ubican muy por encima de la tendencia, mientras que varios países europeos, como Suecia, Suiza o Francia, emiten bastante menos de lo que correspondería a su ingreso, gracias a una matriz eléctrica basada en fuentes hidráulicas, nucleares o renovables.

Figura 10

Relación entre el PIB per cápita y el consumo de energía renovable

r_pib_ren <- cor(log(base$pib_pc_ppa), base$energia_renovable)
g10 <- ggplot(base, aes(x = pib_pc_ppa, y = energia_renovable)) +
  geom_point(aes(color = factor(grupo_ingreso, levels = niv_ingreso),
                 text = paste0(pais, "<br>PIB per cápita: ", fmt0(pib_pc_ppa),
                               "<br>Energía renovable: ", fpct(energia_renovable))), size = 2.2, alpha = 0.85) +
  scale_x_log10(labels = function(x) fmt0(x)) +
  scale_color_manual(values = col_ingreso, name = NULL) +
  labs(x = "PIB per cápita PPA (escala logarítmica)", y = "Energía renovable (% del consumo final)") + tema
interactivo(g10, 470)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 10 revela una relación negativa entre el ingreso y la proporción de energía renovable (correlación de -0,63 con el logaritmo del PIB per cápita). A primera vista, este resultado parecería indicar que los países pobres son más sostenibles; sin embargo, en los países de ingreso bajo la energía renovable proviene principalmente de la leña y otras formas de biomasa tradicional, asociadas a la falta de acceso a la electricidad y a efectos negativos sobre la salud y los bosques. Por esta razón, una proporción alta de energía renovable no puede interpretarse por sí sola como un indicador de transición energética.

Figura 11

Relación entre el uso de internet y la esperanza de vida

g11 <- ggplot(base, aes(x = usuarios_internet, y = esperanza_vida)) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linewidth = 0.6, linetype = "dashed") +
  geom_point(aes(color = factor(grupo_ingreso, levels = niv_ingreso),
                 text = paste0(pais, "<br>Internet: ", fpct(usuarios_internet),
                               "<br>Esperanza de vida: ", fmt(esperanza_vida, 1))), size = 2.2, alpha = 0.85) +
  scale_color_manual(values = col_ingreso, name = NULL) +
  labs(x = "Usuarios de internet (% de la población)", y = "Esperanza de vida (años)") + tema
interactivo(g11, 470)

Fuente: Banco Mundial, World Development Indicators (2026).

La conectividad también se asocia estrechamente con el bienestar: la correlación entre el uso de internet y la esperanza de vida es de 0,81. Los colores muestran que los grupos de ingreso se ordenan casi sin traslaparse a lo largo de la recta, lo que sugiere que el ingreso, la conectividad y la salud forman parte de un mismo proceso de desarrollo. Este patrón anticipa que el ACP agrupará estas variables en un mismo componente.

Diferencias según el nivel de ingreso

Tabla 9

Promedio de las variables según el grupo de ingreso

pi_ <- function(g, v) prom_ing[[v]][prom_ing$grupo_ingreso == g]
prom_ing <- base |>
  mutate(grupo_ingreso = factor(grupo_ingreso, levels = niv_ingreso)) |>
  group_by(grupo_ingreso) |>
  summarise(across(all_of(names(variables)), mean), n = n(), .groups = "drop")
t9 <- prom_ing |> select(-n) |>
  pivot_longer(-grupo_ingreso, names_to = "variable", values_to = "valor") |>
  pivot_wider(names_from = grupo_ingreso, values_from = valor) |>
  mutate(variable = variables[variable])
kable(t9 |> mutate(across(-variable, ~ fmt(.x))) |> rename(Variable = variable),
      align = c("l", rep("r", 4)))
Variable Ingreso bajo Ingreso medio bajo Ingreso medio alto Ingreso alto
PIB per cápita PPA 2.568,42 8.118,61 19.066,99 56.766,92
Agricultura (% del PIB) 27,61 14,49 7,01 1,90
Industria (% del PIB) 22,31 28,69 29,24 26,85
Desempleo 5,44 7,96 10,87 6,06
Participación laboral femenina 57,69 50,46 45,69 54,24
Esperanza de vida 62,27 66,64 71,38 79,47
Mortalidad infantil 45,95 27,38 14,23 4,48
Fecundidad 4,44 2,97 2,08 1,60
Población de 65 años o más 3,09 5,23 9,29 16,02
Crecimiento de la población 2,53 1,48 0,65 -0,10
Gasto en salud (% del PIB) 6,38 5,55 6,79 8,81
Usuarios de internet 22,97 53,68 75,02 90,82
Acceso a electricidad 43,36 82,00 96,08 99,91
Población urbana 35,96 49,91 64,04 79,09
Energía renovable 72,67 38,92 19,68 20,50
CO2 per cápita 0,27 1,54 3,96 9,77
Área forestal 26,21 32,50 36,34 31,01
Contaminación PM2.5 31,79 28,22 20,81 18,23

Fuente: Banco Mundial, World Development Indicators (2026).

La Tabla 9 muestra un gradiente claro entre los grupos de ingreso. Al pasar de ingreso bajo a ingreso alto, la esperanza de vida aumenta de 62,3 a 79,5 años, la mortalidad infantil se reduce de 46,0 a 4,5 por cada 1.000 nacidos vivos y el acceso a electricidad pasa de 43,4 % a una cobertura prácticamente total. En contraste, las emisiones de CO2 por habitante se multiplican por más de 30, desde 0,27 hasta 9,77 toneladas, y la energía renovable cae de 72,7 % a 20,5 %. El desempleo y la participación laboral femenina no siguen un patrón lineal, ya que alcanzan sus valores extremos en los grupos de ingreso medio.

Figura 12

Perfil de los grupos de ingreso según los promedios estandarizados de las variables

z_ing <- base |>
  mutate(across(all_of(names(variables)), ~ (.x - mean(.x)) / sd(.x)),
         grupo_ingreso = factor(grupo_ingreso, levels = niv_ingreso)) |>
  group_by(grupo_ingreso) |>
  summarise(across(all_of(names(variables)), mean), .groups = "drop") |>
  pivot_longer(-grupo_ingreso, names_to = "variable", values_to = "z") |>
  mutate(Variable = factor(variables[variable], levels = rev(variables)))
g12 <- ggplot(z_ing, aes(x = grupo_ingreso, y = Variable, fill = z,
                         text = paste0(grupo_ingreso, "<br>", Variable, "<br>Promedio estandarizado: ", fmt(z)))) +
  geom_tile(color = "white") +
  geom_text(aes(label = fmt(z)), size = 3.3, family = "Times New Roman") +
  scale_fill_gradient2(low = rojo, mid = "white", high = azul, midpoint = 0, limits = c(-2, 2), oob = scales::squish, name = "z") +
  scale_x_discrete(labels = function(x) sub("Ingreso ", "Ingreso<br>", x)) +
  labs(x = NULL, y = NULL) + tema
interactivo(g12, 600)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 12 resume la Tabla 9 en unidades estandarizadas: los valores azules indican promedios superiores al conjunto de países y los rojos, inferiores. Se observa que los países de ingreso bajo concentran valores muy por debajo del promedio en conectividad, electricidad, urbanización y esperanza de vida, y muy por encima en mortalidad infantil, fecundidad, peso de la agricultura y energía renovable. Los países de ingreso alto presentan el patrón opuesto, con población más envejecida y mayores emisiones de CO2.

Posición de Colombia

Figura 13

Percentil de Colombia en cada indicador frente a los 160 países

pc <- function(v) d13$percentil[d13$variable == v]
d13 <- tibble(variable = names(variables)) |>
  mutate(percentil = sapply(variable, function(v) 100 * mean(base[[v]] <= col[[v]])),
         valor = sapply(variable, function(v) col[[v]]),
         Variable = factor(variables[variable], levels = rev(variables)),
         Dimension = dimension[variable])
g13 <- ggplot(d13, aes(x = percentil, y = Variable)) +
  geom_vline(xintercept = 50, linetype = "dashed", color = gris) +
  geom_segment(aes(x = 0, xend = percentil, yend = Variable), color = azul_claro) +
  geom_point(aes(text = paste0(Variable, "<br>Valor de Colombia: ", fmt(valor), "<br>Percentil: ", fmt0(percentil))),
             color = azul, size = 3) +
  scale_x_continuous(limits = c(0, 100)) +
  labs(x = "Percentil de Colombia (0 = valor más bajo, 100 = valor más alto)", y = NULL) + tema
interactivo(g13, 560)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 13 ubica a Colombia frente al resto de países: un percentil de 80 significa que el valor de Colombia es mayor o igual al de 80 % de ellos, y la línea punteada marca la mediana. Colombia se encuentra cerca de la mitad de la distribución en PIB per cápita (percentil 52) y en esperanza de vida (percentil 56), tiene cobertura eléctrica universal y un alto nivel de urbanización (percentil 74). Sus principales ventajas ambientales son el área forestal, que cubre el 54,1 % del territorio (percentil 81), y unas emisiones de CO2 de 1,8 toneladas por habitante, por debajo de la mediana. Su mayor debilidad relativa es el mercado laboral: el desempleo de 13,9 % la ubica en el percentil 84, es decir, entre los países con mayor desempleo de la muestra.

En síntesis, el análisis descriptivo muestra que el ingreso, la salud, la conectividad y la estructura demográfica se mueven de forma conjunta, mientras que los indicadores ambientales siguen patrones distintos y en algunos casos opuestos al desarrollo económico. Esta estructura de correlaciones justifica la aplicación del ACP para resumir la información antes de agrupar a los países.

Resultados del modelo

El modelo se desarrolló en dos etapas. En la primera, el ACP resumió los 18 indicadores en un número reducido de componentes que conservan la mayor parte de la información. En la segunda, el método de Ward agrupó a los países a partir de sus puntajes en esos componentes, de modo que cada grupo reúne países con perfiles de desarrollo similares.

Análisis de componentes principales

Matriz de correlaciones

Figura 14

Matriz de correlaciones entre las variables del estudio

matriz_cor <- cor(base[, names(variables)])
tri <- matriz_cor[upper.tri(matriz_cor)]
rc <- function(a, b) matriz_cor[a, b]
d14 <- as.data.frame(as.table(matriz_cor)) |>
  mutate(Var1 = factor(variables[as.character(Var1)], levels = variables),
         Var2 = factor(variables[as.character(Var2)], levels = rev(variables)))
g14 <- ggplot(d14, aes(x = Var1, y = Var2, fill = Freq,
                       text = paste0(Var1, " y ", Var2, "<br>r = ", fmt(Freq)))) +
  geom_tile(color = "white") +
  geom_text(aes(label = fmt(Freq, 1)), size = 2.4, family = "Times New Roman") +
  scale_fill_gradient2(low = rojo, mid = "white", high = azul, limits = c(-1, 1), name = "r") +
  labs(x = NULL, y = NULL) + tema +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
interactivo(g14, 720)

Fuente: Banco Mundial, World Development Indicators (2026).

La matriz de correlaciones confirma que las variables comparten una gran cantidad de información: 54 de los 153 pares de variables tienen una correlación mayor que 0,5 en valor absoluto. Se identifican tres bloques. El primero es demográfico y de salud: la esperanza de vida se relaciona de forma negativa con la mortalidad infantil (r = -0,89) y con la fecundidad (r = -0,78), es decir, donde se vive más mueren menos niños y las familias son más pequeñas. El segundo es de acceso y conectividad: el uso de internet se asocia con el acceso a electricidad (r = 0,83), con la esperanza de vida (r = 0,81) y con la población urbana (r = 0,75). El tercero es económico: el PIB per cápita se relaciona positivamente con la esperanza de vida (r = 0,75) y con el CO2 per cápita (r = 0,69), y negativamente con el peso de la agricultura (r = -0,62). La energía renovable se correlaciona negativamente con el acceso a electricidad (r = -0,71), lo que refuerza la interpretación de que en los países pobres esta energía proviene de la biomasa tradicional. Esta redundancia entre variables justifica la aplicación del ACP.

Varianza explicada y número de componentes

acp <- prcomp(base[, names(variables)], scale. = TRUE)
referencias <- c("esperanza_vida", "pm25", "participacion_laboral_fem", "area_forestal")
for (k in 1:4) {
  if (acp$rotation[referencias[k], k] < 0) {
    acp$rotation[, k] <- -acp$rotation[, k]
    acp$x[, k] <- -acp$x[, k]
  }
}
valores <- tibble(Componente = paste0("CP", seq_along(acp$sdev)), lambda = acp$sdev^2) |>
  mutate(varianza = lambda / sum(lambda), acumulada = cumsum(varianza))
k_cp <- sum(valores$lambda > 1)
cargas <- sweep(acp$rotation[, 1:k_cp], 2, acp$sdev[1:k_cp], "*")
colnames(cargas) <- paste0("CP", 1:k_cp)
puntajes_cp <- base |>
  select(pais, codigo_iso3, region, grupo_ingreso) |>
  bind_cols(as.data.frame(acp$x[, 1:k_cp]) |> setNames(paste0("CP", 1:k_cp)))
vp <- function(k) valores$varianza[k]

El signo de cada componente es arbitrario, por lo que se orientaron los cuatro primeros para facilitar su lectura: el CP1 aumenta con la esperanza de vida, el CP2 con la contaminación por PM2.5, el CP3 con la participación laboral femenina y el CP4 con el área forestal.

Tabla 10

Valores propios y proporción de varianza explicada por cada componente

kable(valores |> transmute(Componente, `Valor propio` = fmt(lambda, 3), `Varianza explicada` = pct(varianza),
                           `Varianza acumulada` = pct(acumulada)),
      align = c("l", "r", "r", "r"))
Componente Valor propio Varianza explicada Varianza acumulada
CP1 8,116 45,1 % 45,1 %
CP2 2,382 13,2 % 58,3 %
CP3 1,713 9,5 % 67,8 %
CP4 1,206 6,7 % 74,5 %
CP5 0,860 4,8 % 79,3 %
CP6 0,670 3,7 % 83,0 %
CP7 0,560 3,1 % 86,2 %
CP8 0,513 2,8 % 89,0 %
CP9 0,393 2,2 % 91,2 %
CP10 0,344 1,9 % 93,1 %
CP11 0,269 1,5 % 94,6 %
CP12 0,230 1,3 % 95,9 %
CP13 0,188 1,0 % 96,9 %
CP14 0,165 0,9 % 97,8 %
CP15 0,138 0,8 % 98,6 %
CP16 0,119 0,7 % 99,3 %
CP17 0,071 0,4 % 99,7 %
CP18 0,063 0,3 % 100,0 %

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 15

Gráfico de sedimentación de los componentes principales

d15 <- valores |> mutate(num = row_number(), Conservado = ifelse(lambda > 1, "Valor propio mayor que 1", "Valor propio menor que 1"))
g15 <- ggplot(d15, aes(x = num, y = lambda)) +
  geom_col(aes(fill = Conservado, text = paste0(Componente, "<br>Valor propio: ", fmt(lambda, 3),
                                                "<br>Varianza: ", pct(varianza), "<br>Acumulada: ", pct(acumulada))),
           width = 0.7) +
  geom_line(color = "black", linewidth = 0.6) +
  geom_point(color = "black", size = 1.8) +
  geom_hline(yintercept = 1, linetype = "dashed", color = rojo) +
  scale_fill_manual(values = c("Valor propio mayor que 1" = azul, "Valor propio menor que 1" = gris), name = NULL) +
  scale_x_continuous(breaks = 1:18) +
  labs(x = "Componente principal", y = "Valor propio") + tema
interactivo(g15, 430)

Fuente: Banco Mundial, World Development Indicators (2026).

El primer componente explica por sí solo el 45,1 % de la varianza total de las 18 variables, el segundo agrega un 13,2 %, el tercero un 9,5 % y el cuarto un 6,7 %. Según el criterio de Kaiser se conservan 4 componentes, cuyos valores propios son 8,12; 2,38; 1,71; 1,21, y que en conjunto acumulan el 74,5 % de la información. El gráfico de sedimentación respalda esta decisión: la línea roja marca el valor propio igual a uno y, a partir del quinto componente, la curva se aplana y los valores propios quedan por debajo de este umbral. De esta forma, cuatro variables nuevas conservan cerca de tres cuartas partes de la información contenida en los 18 indicadores originales.

Interpretación de los componentes

Tabla 11

Cargas de las variables en los componentes conservados

cg <- function(v, k) cargas[v, k]
kable(data.frame(Variable = variables[rownames(cargas)], `Dimensión` = dimension[rownames(cargas)],
                 apply(cargas, 2, fmt), check.names = FALSE),
      row.names = FALSE, align = c("l", "l", rep("r", k_cp)))
Variable Dimensión CP1 CP2 CP3 CP4
PIB per cápita PPA Economía 0,77 0,04 0,38 -0,14
Agricultura (% del PIB) Economía -0,85 -0,08 0,12 -0,24
Industria (% del PIB) Economía 0,06 0,68 0,22 0,47
Desempleo Economía 0,00 0,02 -0,72 0,30
Participación laboral femenina Economía -0,14 -0,39 0,74 0,09
Esperanza de vida Salud y demografía 0,90 -0,10 0,10 -0,11
Mortalidad infantil Salud y demografía -0,91 0,09 0,01 -0,03
Fecundidad Salud y demografía -0,89 0,12 0,10 -0,11
Población de 65 años o más Salud y demografía 0,74 -0,49 0,06 -0,08
Crecimiento de la población Salud y demografía -0,70 -0,18 -0,17 0,06
Gasto en salud (% del PIB) Salud y demografía 0,40 -0,53 -0,15 -0,37
Usuarios de internet Infraestructura y conectividad 0,94 0,07 -0,03 0,05
Acceso a electricidad Infraestructura y conectividad 0,84 0,04 -0,23 0,09
Población urbana Infraestructura y conectividad 0,74 0,13 0,02 -0,02
Energía renovable Ambiente y energía -0,72 -0,31 0,28 0,00
CO2 per cápita Ambiente y energía 0,62 0,53 0,39 -0,10
Área forestal Ambiente y energía -0,01 -0,40 0,26 0,75
Contaminación PM2.5 Ambiente y energía -0,29 0,78 0,07 -0,23

Fuente: Banco Mundial, World Development Indicators (2026).

Las cargas de la Tabla 11 corresponden a la correlación entre cada variable y cada componente; un valor cercano a 1 o a −1 indica que la variable está bien representada en el componente.

Figura 16

Contribución de las variables a los componentes conservados

d16 <- as.data.frame(100 * acp$rotation[, 1:k_cp]^2) |>
  setNames(paste0("CP", 1:k_cp)) |>
  mutate(variable = rownames(acp$rotation)) |>
  pivot_longer(-variable, names_to = "Componente", values_to = "contribucion") |>
  mutate(Variable = factor(variables[variable], levels = rev(variables)),
         Destacada = ifelse(contribucion > 100 / 18, "Superior al promedio", "Inferior al promedio"))
g16 <- ggplot(d16, aes(x = contribucion, y = Variable, fill = Destacada,
                       text = paste0(Componente, "<br>", Variable, "<br>Contribución: ", fpct(contribucion)))) +
  geom_col(width = 0.7) +
  geom_vline(xintercept = 100 / 18, linetype = "dashed", color = rojo) +
  facet_wrap(~ Componente, ncol = 4) +
  scale_fill_manual(values = c("Superior al promedio" = azul, "Inferior al promedio" = gris), name = NULL) +
  labs(x = "Contribución (%)", y = NULL) + tema
interactivo(g16, 620)

Fuente: Banco Mundial, World Development Indicators (2026).

La contribución indica qué porcentaje de cada componente aporta cada variable; la línea roja marca la contribución promedio (100 % / 18 = 5,6 %), de modo que las barras azules corresponden a las variables que definen el componente. Con base en las cargas y las contribuciones se asignó un nombre a cada componente.

El CP1 representa el nivel de desarrollo socioeconómico (45,1 % de la varianza). Se correlaciona positivamente con los usuarios de internet (0,94), la esperanza de vida (0,90), el acceso a electricidad (0,84), el PIB per cápita (0,77) y la población urbana (0,74), y negativamente con la mortalidad infantil (-0,91), la fecundidad (-0,89), el peso de la agricultura (-0,85) y la energía renovable (-0,72). Un puntaje alto en este componente describe a un país rico, urbanizado, conectado, con alta esperanza de vida y población envejecida; un puntaje bajo, a un país rural y agrícola, con alta mortalidad infantil y alta fecundidad.

El CP2 representa la industrialización y la contaminación del aire (13,2 %). Sus cargas positivas más altas son la exposición a PM2.5 (0,78), el peso de la industria (0,68) y el CO2 per cápita (0,53), y las negativas, el gasto en salud (-0,53), la población mayor de 65 años (-0,49) y el área forestal (-0,40). Este componente distingue, entre países de desarrollo similar, a las economías industriales y extractivas con aire contaminado de las economías con más bosques, mayor gasto en salud y aire más limpio.

El CP3 representa la dinámica del mercado laboral (9,5 %) y lo definen la participación laboral femenina (0,74) y el desempleo (-0,72): un puntaje alto describe un mercado laboral que incorpora a más mujeres y presenta menos desempleo. El CP4 representa la cobertura forestal (6,7 %), dominada por el área de bosque (0,75), y separa a los países con amplias superficies boscosas de los países áridos o deforestados.

Figura 17

Círculo de correlaciones de las variables en los dos primeros componentes

circulo <- tibble(angulo = seq(0, 2 * pi, length.out = 200), x = cos(angulo), y = sin(angulo))
d17 <- as.data.frame(cargas[, 1:2]) |>
  mutate(variable = rownames(cargas), Variable = variables[variable], Dimension = dimension[variable],
         lx = CP1 * 1.15, ly = CP2 * 1.15) |>
  arrange(desc(ly))
for (it in 1:20) for (i in 2:nrow(d17)) for (j in 1:(i - 1)) {
  if (abs(d17$lx[i] - d17$lx[j]) < 0.5 && abs(d17$ly[i] - d17$ly[j]) < 0.075) d17$ly[i] <- d17$ly[j] - 0.075
}
g17 <- ggplot() +
  geom_path(data = circulo, aes(x = x, y = y), color = gris) +
  geom_hline(yintercept = 0, linetype = "dashed", color = gris) +
  geom_vline(xintercept = 0, linetype = "dashed", color = gris) +
  geom_segment(data = d17, aes(x = 0, y = 0, xend = CP1, yend = CP2, color = Dimension), linewidth = 0.7) +
  geom_point(data = d17, aes(x = CP1, y = CP2, color = Dimension,
                             text = paste0(Variable, "<br>Carga CP1: ", fmt(CP1), "<br>Carga CP2: ", fmt(CP2))), size = 2.5) +
  geom_text(data = d17, aes(x = lx, y = ly, label = Variable), size = 3, family = "Times New Roman") +
  scale_color_manual(values = c("Economía" = azul, "Salud y demografía" = "#C55A11",
                                "Infraestructura y conectividad" = "#7F7F7F", "Ambiente y energía" = "#548235"), name = NULL) +
  coord_equal(xlim = c(-1.35, 1.35), ylim = c(-1.35, 1.25)) +
  labs(x = paste0("CP1: nivel de desarrollo (", pct(vp(1)), ")"),
       y = paste0("CP2: industrialización y contaminación (", pct(vp(2)), ")")) + tema
interactivo(g17, 640)

Fuente: Banco Mundial, World Development Indicators (2026).

En el círculo de correlaciones cada punto representa una variable; mientras más cerca está del círculo, mejor representada queda en el plano formado por los dos primeros componentes. Las variables de salud, conectividad e ingreso se alinean sobre el eje horizontal, en extremos opuestos según su relación con el desarrollo, mientras que la contaminación por PM2.5, la industria y el CO2 se proyectan hacia arriba, y el gasto en salud, la población mayor y el área forestal, hacia abajo. La posición del CO2 per cápita, en diagonal entre ambos ejes, muestra que las emisiones crecen tanto con el desarrollo como con la industrialización.

Ubicación de los países

Figura 18

Ubicación de los países en el plano de los dos primeros componentes

ext <- function(k, n = 4, alto = TRUE) {
  o <- puntajes_cp[order(puntajes_cp[[k]], decreasing = alto), ]
  paste(o$pais[1:n], collapse = ", ")
}
cp_col <- puntajes_cp |> filter(pais == "Colombia")
g18 <- ggplot(puntajes_cp, aes(x = CP1, y = CP2)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = gris) +
  geom_vline(xintercept = 0, linetype = "dashed", color = gris) +
  geom_point(aes(color = region, text = paste0(pais, "<br>Región: ", region, "<br>CP1: ", fmt(CP1), "<br>CP2: ", fmt(CP2))),
             size = 2.3, alpha = 0.85) +
  geom_point(data = filter(puntajes_cp, pais == "Colombia"), shape = 21, size = 5, stroke = 1.2, color = rojo, fill = NA) +
  geom_text(data = filter(puntajes_cp, pais == "Colombia"), aes(label = "Colombia"), nudge_y = 0.45, color = rojo,
            family = "Times New Roman", size = 3.6) +
  scale_color_manual(values = col_region, name = NULL) +
  labs(x = paste0("CP1: nivel de desarrollo (", pct(vp(1)), ")"),
       y = paste0("CP2: industrialización y contaminación (", pct(vp(2)), ")")) + tema
interactivo(g18, 520)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 18 ubica a cada país según sus puntajes en los dos primeros componentes; Colombia aparece señalada con un círculo rojo. Hacia la derecha se encuentran los países de mayor desarrollo, como Catar, Singapur, Japón, Luxemburgo, y hacia la izquierda los de menor desarrollo, como Níger, Chad, Burundi, República Democrática del Congo, en su mayoría africanos. En la parte superior se ubican los países con economías industriales o petroleras y aire más contaminado, como Catar, Kuwait, Arabia Saudita, Omán, y en la parte inferior los países con más bosques, mayor gasto en salud y aire más limpio, como Liberia, Suecia, Islas Salomón, Finlandia. Colombia obtiene un puntaje de 0,85 en el CP1 y de -0,91 en el CP2: se sitúa ligeramente por encima del promedio en desarrollo y por debajo del promedio en industrialización contaminante, gracias a sus bajas emisiones y a su amplia cobertura forestal.

Figura 19

Puntaje de los países en el componente de nivel de desarrollo (CP1)

escala_div <- list(c(0, rojo), c(0.5, "#F2F2F2"), c(1, azul))
mapa(puntajes_cp, ~CP1, ~paste0(pais, "<br>CP1: ", fmt(CP1)), escala_div, "CP1", zmid = 0)

Fuente: Banco Mundial, World Development Indicators (2026).

El mapa del CP1 muestra un patrón geográfico muy definido: los puntajes más altos, en azul, se concentran en Europa, Norteamérica, Oceanía, Asia oriental y los países del Golfo, mientras que los más bajos, en rojo, se agrupan en África subsahariana y en algunos países del sur de Asia. América Latina se ubica en tonos intermedios, cercanos al promedio mundial.

Figura 20

Puntaje de los países en el componente de industrialización y contaminación (CP2)

mapa(puntajes_cp, ~CP2, ~paste0(pais, "<br>CP2: ", fmt(CP2)), escala_div, "CP2", zmid = 0)

Fuente: Banco Mundial, World Development Indicators (2026).

El mapa del CP2 presenta una distribución distinta a la del desarrollo. Los valores más altos aparecen en Medio Oriente, el norte de África y Asia central y meridional, regiones con economías basadas en hidrocarburos o industria pesada y con altos niveles de contaminación del aire. Los valores más bajos se observan en Europa occidental y los países nórdicos, así como en varios países de América Latina y de África con amplia cobertura forestal, entre ellos Colombia, Brasil y Liberia. Este contraste confirma que el desarrollo y el costo ambiental son dimensiones diferentes, que deben analizarse por separado.

Clusterización con el método de Ward

Número de clusters

matriz_cp <- as.matrix(puntajes_cp[, paste0("CP", 1:k_cp)])
distancias <- dist(matriz_cp)
modelo_ward <- hclust(distancias, method = "ward.D2")
criterios <- tibble(k = 2:8) |>
  mutate(wss = sapply(k, function(x) {
           g <- cutree(modelo_ward, x)
           sum(sapply(split(as.data.frame(matriz_cp), g), function(z) sum(scale(z, scale = FALSE)^2)))
         }),
         silueta = sapply(k, function(x) mean(silhouette(cutree(modelo_ward, x), distancias)[, 3])),
         altura = rev(modelo_ward$height)[k - 1],
         salto = altura - rev(modelo_ward$height)[k])
k_ward <- 5
grupo <- cutree(modelo_ward, k_ward)
golfo <- grupo[puntajes_cp$pais == "Catar"]
orden <- tapply(puntajes_cp$CP1, grupo, mean)
orden <- names(sort(orden[names(orden) != golfo]))
nombres_cl <- c("C1. Rezago en desarrollo", "C2. Desarrollo en transición", "C3. Desarrollo medio alto",
                "C4. Desarrollo alto", "C5. Petroleros del Golfo")
etiqueta <- setNames(nombres_cl, c(orden, golfo))
col_cluster <- setNames(c("#C00000", "#F4B183", "#9DB9D5", "#1F4E78", "#404040"), nombres_cl)
base_clusters <- base |>
  mutate(cluster = factor(etiqueta[as.character(grupo)], levels = nombres_cl))
puntajes_cp <- puntajes_cp |> mutate(cluster = base_clusters$cluster)

Tabla 12

Criterios para la selección del número de clusters

cr <- function(k, v) criterios[[v]][criterios$k == k]
kable(criterios |> transmute(`Número de clusters` = k,
                             `Suma de cuadrados dentro` = fmt(wss, 1),
                             `Reducción frente a k − 1` = c("–", fmt(-diff(wss), 1)),
                             `Silueta promedio` = fmt(silueta, 3),
                             `Altura de fusión` = fmt(altura, 2),
                             `Salto en el dendrograma` = fmt(salto, 2)),
      align = c("c", rep("r", 5)))
Número de clusters Suma de cuadrados dentro Reducción frente a k − 1 Silueta promedio Altura de fusión Salto en el dendrograma
2 1.208,9 – 0,382 43,00 22,12
3 991,1 217,8 0,297 20,87 0,76
4 788,8 202,3 0,330 20,11 2,21
5 628,5 160,3 0,269 17,91 5,62
6 553,0 75,5 0,273 12,29 0,66
7 485,4 67,6 0,270 11,63 2,67
8 445,3 40,1 0,274 8,96 0,11

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 21

Método del codo e índice de silueta según el número de clusters

d21 <- criterios |>
  select(k, `Suma de cuadrados dentro de los grupos` = wss, `Silueta promedio` = silueta) |>
  pivot_longer(-k, names_to = "Criterio", values_to = "valor")
g21 <- ggplot(d21, aes(x = k, y = valor)) +
  geom_vline(xintercept = k_ward, linetype = "dashed", color = rojo) +
  geom_line(color = azul, linewidth = 0.9) +
  geom_point(aes(text = paste0("k = ", k, "<br>", Criterio, ": ", fmt(valor, 3))), color = azul, size = 2.5) +
  facet_wrap(~ Criterio, scales = "free_y") +
  scale_x_continuous(breaks = 2:8) +
  labs(x = "Número de clusters (k)", y = NULL) + tema
interactivo(g21, 400)

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 22

Dendrograma de los países según el método de Ward

segmentos <- function(h, g) {
  n <- length(h$order); pos <- numeric(n); pos[h$order] <- seq_len(n)
  xm <- numeric(n - 1); miembros <- vector("list", n - 1); seg <- vector("list", n - 1)
  coord <- function(j) if (j < 0) c(pos[-j], 0) else c(xm[j], h$height[j])
  memb <- function(j) if (j < 0) -j else miembros[[j]]
  for (i in seq_len(n - 1)) {
    a <- h$merge[i, 1]; b <- h$merge[i, 2]
    ca <- coord(a); cb <- coord(b); y <- h$height[i]
    xm[i] <- (ca[1] + cb[1]) / 2
    miembros[[i]] <- c(memb(a), memb(b))
    gr <- unique(g[miembros[[i]]])
    seg[[i]] <- data.frame(x = c(ca[1], cb[1], ca[1]), xend = c(ca[1], cb[1], cb[1]),
                           y = c(ca[2], cb[2], y), yend = c(y, y, y),
                           grupo = if (length(gr) == 1) as.character(gr) else "Unión de clusters")
  }
  bind_rows(seg)
}
d22 <- segmentos(modelo_ward, base_clusters$cluster)
hojas <- tibble(x = seq_along(modelo_ward$order), pais = base$pais[modelo_ward$order],
                cluster = base_clusters$cluster[modelo_ward$order])
corte <- mean(rev(modelo_ward$height)[(k_ward - 1):k_ward])
g22 <- ggplot() +
  geom_segment(data = d22, aes(x = x, xend = xend, y = y, yend = yend, color = grupo), linewidth = 0.45) +
  geom_point(data = hojas, aes(x = x, y = -0.6, color = cluster, text = paste0(pais, "<br>", cluster)), size = 1.4) +
  geom_hline(yintercept = corte, linetype = "dashed", color = rojo) +
  scale_color_manual(values = c(col_cluster, "Unión de clusters" = "#7F7F7F"), breaks = nombres_cl, name = NULL) +
  labs(x = "Países (ordenados según el dendrograma)", y = "Altura de fusión") + tema +
  theme(axis.text.x = element_blank(), panel.grid.major.x = element_blank())
interactivo(g22, 520)

Fuente: Banco Mundial, World Development Indicators (2026).

La selección del número de clusters combinó tres criterios. El índice de silueta es máximo con dos grupos (0,382), una partición que solo separa a los países desarrollados de los no desarrollados y resulta poco informativa para el propósito del estudio. Entre las soluciones con más grupos, el método del codo muestra que la suma de cuadrados dentro de los grupos se reduce en 160,3 unidades al pasar de cuatro a cinco clusters, pero solo en 75,5 al pasar de cinco a seis, de modo que la ganancia de agregar grupos disminuye a menos de la mitad después de k = 5. El dendrograma confirma esta elección: el salto en la altura de fusión que se produce al cortar en cinco grupos (5,62) es el mayor después del corte en dos grupos, lo que indica que estos cinco conjuntos son claramente distintos entre sí. Aunque la silueta con cinco grupos (0,269) es algo menor que con cuatro (0,330), la solución de cuatro grupos reúne en un solo conjunto a países tan distintos como Alemania y Albania, mientras que la de cinco separa a los países desarrollados de los emergentes. Por estas razones se eligieron 5 clusters. En la Figura 22, la línea roja marca la altura de corte y los colores identifican cada cluster; al pasar el mouse sobre los puntos inferiores se observa el nombre de cada país.

Composición de los clusters

Tabla 13

Número de países y países que conforman cada cluster

nc <- function(i) t13$n[i]
t13 <- base_clusters |>
  group_by(cluster) |>
  summarise(n = n(), paises = paste(sort(pais), collapse = ", "), .groups = "drop")
kable(t13 |> transmute(Cluster = cluster, `Países` = n, `Integrantes` = paises), align = c("l", "c", "l"))
Cluster Países Integrantes
C1. Rezago en desarrollo 24 Angola, Benín, Burkina Faso, Burundi, Camerún, Chad, Etiopía, Guinea, Guinea-Bisáu, Islas Salomón, Liberia, Madagascar, Malaui, Malí, Mozambique, Níger, Nigeria, Papúa Nueva Guinea, República Democrática del Congo, Sierra Leona, Tanzania, Uganda, Zambia, Zimbabue
C2. Desarrollo en transición 44 Afganistán, Bangladesh, Belice, Bolivia, Botsuana, Bután, Camboya, Comoras, Costa de Marfil, Esuatini, Filipinas, Fiyi, Gabón, Gambia, Ghana, Guatemala, Guinea Ecuatorial, Guyana, Haití, Honduras, India, Indonesia, Kenia, Kirguistán, Laos, Lesoto, Mauritania, Namibia, Nepal, Nicaragua, Paraguay, Perú, República del Congo, Ruanda, Santo Tomé y Príncipe, Senegal, Sri Lanka, Tayikistán, Timor Oriental, Togo, Tonga, Uzbekistán, Vietnam, Yibuti
C3. Desarrollo medio alto 43 Albania, Argelia, Argentina, Armenia, Azerbaiyán, Barbados, Bielorrusia, Bosnia y Herzegovina, Brasil, Brunéi, Cabo Verde, China, Colombia, Costa Rica, Ecuador, Egipto, El Salvador, Georgia, Irak, Irán, Jamaica, Jordania, Kazajistán, Líbano, Libia, Macedonia del Norte, Malasia, Maldivas, Marruecos, Mauricio, México, Mongolia, Panamá, República Dominicana, Rusia, San Vicente y las Granadinas, Santa Lucía, Sudáfrica, Tailandia, Trinidad y Tobago, Túnez, Turquía, Ucrania
C4. Desarrollo alto 43 Alemania, Australia, Austria, Bahamas, Bélgica, Bulgaria, Canadá, Chequia, Chile, Chipre, Corea del Sur, Croacia, Dinamarca, Eslovaquia, Eslovenia, España, Estados Unidos, Estonia, Finlandia, Francia, Grecia, Hungría, Irlanda, Islandia, Israel, Italia, Japón, Letonia, Lituania, Luxemburgo, Malta, Moldavia, Noruega, Nueva Zelanda, Países Bajos, Polonia, Portugal, Reino Unido, Rumanía, Singapur, Suecia, Suiza, Uruguay
C5. Petroleros del Golfo 6 Arabia Saudita, Baréin, Catar, Emiratos Árabes Unidos, Kuwait, Omán

Fuente: Banco Mundial, World Development Indicators (2026).

Caracterización de los clusters

Tabla 14

Promedio de las variables según el cluster

pcl <- function(i, v) prom_cl[[v]][i]
prom_cl <- base_clusters |>
  group_by(cluster) |>
  summarise(across(all_of(names(variables)), mean), .groups = "drop")
t14 <- prom_cl |>
  pivot_longer(-cluster, names_to = "variable", values_to = "valor") |>
  mutate(cluster = sub("\\. .*", "", cluster)) |>
  pivot_wider(names_from = cluster, values_from = valor) |>
  mutate(Total = sapply(variable, function(v) mean(base[[v]])), variable = variables[variable])
kable(t14 |> mutate(across(-variable, ~ fmt(.x))) |> rename(Variable = variable), align = c("l", rep("r", 6)))
Variable C1 C2 C3 C4 C5 Total
PIB per cápita PPA 3.133,45 8.622,70 20.512,61 55.180,03 65.404,88 25.636,34
Agricultura (% del PIB) 26,63 14,46 6,43 2,34 1,13 10,37
Industria (% del PIB) 25,32 28,63 28,70 22,41 50,96 27,32
Desempleo 4,29 9,11 10,80 6,23 2,71 7,83
Participación laboral femenina 65,07 47,31 44,42 55,80 43,92 51,35
Esperanza de vida 61,45 66,44 72,84 79,46 78,34 71,36
Mortalidad infantil 47,85 27,70 11,85 3,77 6,27 19,23
Fecundidad 4,61 3,00 1,87 1,55 1,92 2,51
Población de 65 años o más 2,86 4,83 9,64 18,63 2,51 9,45
Crecimiento de la población 2,65 1,57 0,52 0,01 -1,80 0,90
Gasto en salud (% del PIB) 5,26 6,03 6,95 9,52 4,70 7,05
Usuarios de internet 21,51 53,27 78,44 89,83 99,10 66,81
Acceso a electricidad 37,67 83,80 98,72 100,00 100,00 85,85
Población urbana 36,23 48,59 67,08 77,20 91,44 61,00
Energía renovable 75,72 40,98 12,90 24,54 0,22 32,70
CO2 per cápita 0,32 1,33 5,05 7,00 25,75 4,62
Área forestal 36,38 35,25 30,07 33,13 1,57 32,19
Contaminación PM2.5 29,09 27,91 21,40 11,89 67,19 23,50

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 23

Perfil de los clusters según los promedios estandarizados de las variables

z_cl <- base_clusters |>
  mutate(across(all_of(names(variables)), ~ (.x - mean(.x)) / sd(.x))) |>
  group_by(cluster) |>
  summarise(across(all_of(names(variables)), mean), .groups = "drop") |>
  pivot_longer(-cluster, names_to = "variable", values_to = "z") |>
  mutate(Variable = factor(variables[variable], levels = rev(variables)))
g23 <- ggplot(z_cl, aes(x = cluster, y = Variable, fill = z,
                        text = paste0(cluster, "<br>", Variable, "<br>Promedio estandarizado: ", fmt(z)))) +
  geom_tile(color = "white") +
  geom_text(aes(label = fmt(z, 1)), size = 3.2, family = "Times New Roman") +
  scale_fill_gradient2(low = rojo, mid = "white", high = azul, midpoint = 0, limits = c(-2.5, 2.5),
                       oob = scales::squish, name = "z") +
  scale_x_discrete(labels = function(x) sub("\\..*", "", x)) +
  labs(x = NULL, y = NULL) + tema
interactivo(g23, 620)

Fuente: Banco Mundial, World Development Indicators (2026).

Figura 24

Indicadores seleccionados según el cluster

sel24 <- c("pib_pc_ppa", "esperanza_vida", "usuarios_internet", "energia_renovable", "co2_pc", "pm25")
d24 <- prom_cl |>
  select(cluster, all_of(sel24)) |>
  pivot_longer(-cluster, names_to = "variable", values_to = "valor") |>
  mutate(Variable = factor(variables[variable], levels = variables[sel24]))
g24 <- ggplot(d24, aes(x = cluster, y = valor, fill = cluster,
                       text = paste0(cluster, "<br>", Variable, ": ", fmt(valor)))) +
  geom_col(width = 0.7) +
  facet_wrap(~ Variable, scales = "free_y", ncol = 3) +
  scale_y_continuous(labels = function(x) format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE, trim = TRUE)) +
  scale_fill_manual(values = col_cluster, name = NULL) +
  labs(x = NULL, y = NULL) + tema +
  theme(axis.text.x = element_blank(), panel.grid.major.x = element_blank())
interactivo(g24, 560)

Fuente: Banco Mundial, World Development Indicators (2026).

La Tabla 14 y las Figuras 23 y 24 permiten caracterizar cada grupo. En la Figura 23, los valores azules indican promedios superiores al conjunto de países y los rojos, inferiores.

El cluster C1, rezago en desarrollo, reúne 24 países, casi todos de África subsahariana. Tiene el menor PIB per cápita (3.133 dólares), la menor esperanza de vida (61,5 años), la mayor mortalidad infantil (47,9 por cada 1.000 nacidos vivos) y apenas 21,5 % de la población usa internet. Su energía es mayoritariamente renovable (75,7 %), pero proviene de la biomasa tradicional, y sus emisiones de CO2 son mínimas (0,32 toneladas por persona). Presenta la mayor participación laboral femenina (65,1 %), asociada a la agricultura de subsistencia.

El cluster C2, desarrollo en transición, agrupa 44 países de Asia meridional y sudoriental, de buena parte de África, de Centroamérica y de la región andina. Sus indicadores son intermedios: un PIB per cápita de 8.623 dólares, una esperanza de vida de 66,4 años y un uso de internet de 53,3 %. Combina avances en salud y conectividad con un peso todavía importante de la agricultura (14,5 % del PIB) y emisiones bajas (1,33 toneladas por persona).

El cluster C3, desarrollo medio alto, reúne 43 países de América Latina, Europa oriental, Medio Oriente y Asia, entre ellos Colombia, Brasil, México, China, Turquía y Rusia. Tiene un PIB per cápita de 20.513 dólares, una esperanza de vida de 72,8 años y un 78,4 % de usuarios de internet. Su rasgo distintivo es el mercado laboral: presenta el mayor desempleo promedio (10,8 %) y una baja participación laboral femenina (44,4 %).

El cluster C4, desarrollo alto, está formado por 43 países, principalmente europeos, junto con Estados Unidos, Canadá, Japón, Corea del Sur, Australia, Nueva Zelanda, Singapur, Chile y Uruguay. Registra los mejores indicadores sociales, con una esperanza de vida de 79,5 años y una mortalidad infantil de 3,8, el mayor envejecimiento (18,6 % de mayores de 65 años) y el aire más limpio (11,9 microgramos de PM2.5), aunque con emisiones de CO2 de 7,0 toneladas por persona.

El cluster C5, petroleros del Golfo, reúne a 6 países: Arabia Saudita, Baréin, Catar, Emiratos Árabes Unidos, Kuwait y Omán. Tiene el PIB per cápita más alto (65.405 dólares) y cobertura casi total de internet, pero también las mayores emisiones de CO2 (25,8 toneladas por persona), la contaminación del aire más alta (67,2 microgramos de PM2.5), una energía renovable prácticamente nula (0,2 %) y casi ningún bosque (1,6 %). Es el ejemplo más claro de un alto nivel de ingreso sin sostenibilidad ambiental.

Visualización de los segmentos

Figura 25

Países en el plano de los dos primeros componentes según su cluster

g25 <- ggplot(puntajes_cp, aes(x = CP1, y = CP2)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = gris) +
  geom_vline(xintercept = 0, linetype = "dashed", color = gris) +
  geom_point(aes(color = cluster, text = paste0(pais, "<br>", cluster, "<br>CP1: ", fmt(CP1), "<br>CP2: ", fmt(CP2))),
             size = 2.4, alpha = 0.9) +
  geom_point(data = filter(puntajes_cp, pais == "Colombia"), shape = 21, size = 5, stroke = 1.2, color = rojo, fill = NA) +
  geom_text(data = filter(puntajes_cp, pais == "Colombia"), aes(label = "Colombia"), nudge_y = 0.45, color = rojo,
            family = "Times New Roman", size = 3.6) +
  scale_color_manual(values = col_cluster, name = NULL) +
  labs(x = paste0("CP1: nivel de desarrollo (", pct(vp(1)), ")"),
       y = paste0("CP2: industrialización y contaminación (", pct(vp(2)), ")")) + tema
interactivo(g25, 540)

Fuente: Banco Mundial, World Development Indicators (2026).

La Figura 25 muestra que los clusters se ordenan principalmente a lo largo del CP1: de izquierda a derecha aparecen el rezago en desarrollo, la transición, el desarrollo medio alto y el desarrollo alto, con zonas de contacto entre grupos vecinos que reflejan que el desarrollo es un proceso gradual. El cluster de los petroleros del Golfo se separa del resto en el eje vertical, por su combinación de alto desarrollo con industrialización y contaminación extremas. Este grupo no podría identificarse con un único indicador de desarrollo, lo que demuestra la utilidad de combinar varios componentes en la clusterización.

Figura 26

Mapa mundial de los clusters de países

n_cl <- length(nombres_cl)
escala_cl <- unlist(lapply(seq_len(n_cl), function(i) list(c((i - 1) / n_cl, col_cluster[i]), c(i / n_cl - 0.001, col_cluster[i]))), recursive = FALSE)
escala_cl[[length(escala_cl)]][1] <- 1
mapa(puntajes_cp |> mutate(z = as.numeric(cluster)), ~z, ~paste0(pais, "<br>", cluster), escala_cl, "",
     zmin = 0.5, zmax = n_cl + 0.5) |>
  colorbar(tickvals = seq_len(n_cl), ticktext = nombres_cl, len = 0.7)

Fuente: Banco Mundial, World Development Indicators (2026).

El mapa revela una geografía muy clara del desarrollo. El rezago se concentra en África subsahariana; la transición se extiende por el sur y el sureste de Asia, el resto de África y Centroamérica; el desarrollo medio alto domina buena parte de América Latina, Europa oriental, Medio Oriente y Asia central; el desarrollo alto corresponde a Estados Unidos y Canadá, Europa, Oceanía, Japón y Corea del Sur, junto con Chile y Uruguay en el Cono Sur; y los petroleros forman un bloque compacto en la península arábiga.

Relación de los clusters con la región y el ingreso

Tabla 15

Distribución de los países de cada cluster por región y grupo de ingreso

cruce <- table(base_clusters$cluster, base_clusters$grupo_ingreso)
coincide <- sum(diag(cruce[1:4, niv_ingreso])) + cruce[5, "Ingreso alto"]
cl_col <- base_clusters$cluster[base_clusters$pais == "Colombia"]
t15 <- base_clusters |>
  mutate(region = factor(region, levels = c("África", "América", "Asia", "Europa")),
         grupo_ingreso = factor(grupo_ingreso, levels = niv_ingreso))
t15 <- cbind(as.data.frame.matrix(table(t15$cluster, t15$region)),
             as.data.frame.matrix(table(t15$cluster, t15$grupo_ingreso)))
t15$Total <- rowSums(t15[, 1:4])
kable(data.frame(Cluster = rownames(t15), t15, check.names = FALSE), row.names = FALSE,
      align = c("l", rep("r", 9)))
Cluster África América Asia Europa Ingreso bajo Ingreso medio bajo Ingreso medio alto Ingreso alto Total
C1. Rezago en desarrollo 22 0 2 0 17 7 0 0 24
C2. Desarrollo en transición 18 9 17 0 7 25 12 0 44
C3. Desarrollo medio alto 8 14 11 10 0 7 32 4 43
C4. Desarrollo alto 0 5 6 32 0 1 2 40 43
C5. Petroleros del Golfo 0 0 6 0 0 0 0 6 6

Fuente: Banco Mundial, World Development Indicators (2026).

La Tabla 15 muestra que los clusters guardan una relación estrecha, aunque no perfecta, con la clasificación por ingreso del Banco Mundial. El rezago en desarrollo reúne principalmente países de ingreso bajo, el desarrollo medio alto está formado sobre todo por países de ingreso medio alto y el desarrollo alto, por países de ingreso alto. En total, 120 de los 160 países (75,0 %) quedan en el cluster que correspondería a su grupo de ingreso, lo que indica que la segmentación multidimensional no se reduce al ingreso. Las excepciones son las más interesantes: Bulgaria, Rumanía y Moldavia se agrupan con los países desarrollados por su envejecimiento poblacional, su aire limpio y su cobertura de servicios, a pesar de no ser de ingreso alto; Panamá, Trinidad y Tobago y Brunéi, de ingreso alto, quedan en el desarrollo medio alto porque sus indicadores sociales no acompañan a su ingreso; y Nigeria, Angola y Zambia, de ingreso medio bajo, se ubican en el rezago por sus condiciones de salud y de acceso a servicios. Los petroleros del Golfo, aunque son de ingreso alto, forman un grupo propio por su perfil ambiental.

Resultados e interpretación

¿Qué componentes principales explican mayor variabilidad y qué representan?

Los dos primeros componentes concentran la mayor variabilidad entre países. El CP1 explica el 45,1 % de la varianza y representa el nivel de desarrollo socioeconómico, en el que el ingreso, la salud, la conectividad y la transición demográfica avanzan de manera conjunta. El CP2 explica el 13,2 % y representa el grado de industrialización y la contaminación del aire, que distingue el tipo de economía entre países de desarrollo similar. Entre ambos acumulan el 58,3 % de la varianza, y al agregar el CP3, asociado al mercado laboral (9,5 %), y el CP4, asociado a la cobertura forestal (6,7 %), se alcanza el 74,5 %. De acuerdo con estos resultados, la principal diferencia entre los países es cuánto se han desarrollado, y la segunda, cómo lo han hecho: con qué nivel de industria y a qué costo ambiental.

¿Cuántos clusters se formaron y qué características definen cada grupo?

Se formaron 5 clusters. El rezago en desarrollo (24 países) se caracteriza por bajos ingresos, baja esperanza de vida, alta mortalidad infantil y escaso acceso a electricidad e internet. El desarrollo en transición (44 países) presenta indicadores intermedios y una estructura todavía agrícola. El desarrollo medio alto (43 países) alcanza buenos niveles de salud y conectividad, pero enfrenta el mayor desempleo y una baja participación laboral femenina. El desarrollo alto (43 países) reúne los mejores indicadores sociales, una población envejecida y el aire más limpio. Por último, los petroleros del Golfo (6 países) combinan el mayor ingreso con la mayor huella ambiental de la muestra.

¿Se observan patrones interesantes entre los países?

Se observan tres patrones principales. El primero es geográfico: los clusters forman bloques regionales bien definidos, con África subsahariana concentrada en el rezago, Europa en el desarrollo alto y América Latina dividida entre el desarrollo medio alto y la transición. El segundo es la relación entre desarrollo y ambiente: los países más desarrollados emiten más CO2, mientras que la energía renovable predomina en los países más pobres por el uso de biomasa tradicional; solo algunos países, como los nórdicos, Francia o Suiza, logran combinar alto desarrollo con emisiones moderadas. El tercero es la existencia de excepciones al ingreso, como los petroleros del Golfo, ricos pero ambientalmente insostenibles; Bulgaria, Rumanía y Moldavia, que por su perfil social y demográfico se agrupan con los países desarrollados; y Nigeria y Angola, cuyo ingreso medio bajo no se traduce en mejores condiciones de salud y acceso a servicios.

En este contexto, Colombia se ubica en el cluster Desarrollo medio alto junto a Brasil, México, Costa Rica, Ecuador y Panamá, entre otros. Su perfil combina un desarrollo cercano al promedio mundial con fortalezas ambientales notables, como su amplia cobertura forestal y sus bajas emisiones, y una debilidad estructural en el mercado laboral, que comparte con su grupo y que se refleja en un puntaje de -0,93 en el CP3.

Discusión del modelo

El ACP cumplió su propósito de reducir la dimensionalidad: cuatro componentes conservan el 74,5 % de la información y tienen una interpretación económica clara, lo que respalda la selección de las 18 variables. La clusterización sobre estos componentes produjo grupos coherentes con el análisis descriptivo y con la geografía del desarrollo, y permitió identificar un segmento, el de los petroleros del Golfo, que no se habría detectado con un indicador único de desarrollo.

Los resultados deben interpretarse con algunas precauciones. La silueta promedio de la solución elegida (0,269) indica una estructura de grupos moderada: los clusters están bien diferenciados en sus centros, pero los países de las fronteras entre grupos vecinos comparten características, lo cual es esperable porque el desarrollo es un proceso continuo y no un conjunto de categorías cerradas. Asimismo, el método de Ward es sensible a la selección de variables y a los valores atípicos, y el año 2021 estuvo afectado por la pandemia, lo que alteró indicadores como la esperanza de vida, el desempleo y el crecimiento poblacional en algunos países. Aun con estas limitaciones, la consistencia entre el ACP, los clusters y la clasificación por ingreso del Banco Mundial indica que la segmentación obtenida es robusta y útil para el análisis comparativo.

Conclusiones

Hallazgos principales

El análisis permitió resumir 18 indicadores de desarrollo y sostenibilidad de 160 países en cuatro componentes que conservan el 74,5 % de la información. El hallazgo central es que casi la mitad de las diferencias entre países se explica por una sola dimensión, el nivel de desarrollo socioeconómico, en la que el ingreso, la salud, la conectividad y la estructura demográfica se mueven de forma conjunta. Esto indica que la pobreza, la mortalidad infantil, la falta de acceso a servicios y la alta fecundidad no son problemas aislados, sino manifestaciones de un mismo rezago estructural.

La segunda dimensión revela que el desarrollo no garantiza la sostenibilidad. Los países más ricos emiten más CO2 y la energía renovable predomina en los más pobres por razones de subsistencia, no de transición energética. El caso de los petroleros del Golfo, con el mayor ingreso y la mayor huella ambiental de la muestra, demuestra que el crecimiento basado en hidrocarburos puede generar riqueza sin bienestar ambiental, mientras que los países europeos con matrices eléctricas limpias muestran que es posible combinar ambos objetivos.

¿El análisis permitió identificar patrones de desarrollo entre países?

Sí. El ACP y el método de Ward identificaron cinco segmentos de países bien caracterizados, que responden a la pregunta de investigación: los grupos se forman principalmente por el nivel de desarrollo y, en segundo lugar, por el modelo productivo y su costo ambiental. Respecto a la segunda parte de la pregunta, un mayor nivel de desarrollo no coincide con un mejor desempeño ambiental en emisiones de CO2, aunque sí con una mejor calidad del aire en los países de desarrollo alto. La segmentación coincide en buena medida con la clasificación por ingreso del Banco Mundial, pero la complementa al identificar excepciones que el ingreso por sí solo no revela.

Para Colombia, el análisis muestra un perfil de desarrollo medio alto, con ventajas ambientales que la diferencian de muchos países de ingreso similar y con un reto prioritario en el mercado laboral, especialmente en desempleo. Esta posición sugiere que el país tiene margen para crecer sin seguir la trayectoria de altas emisiones de los países industrializados, siempre que conserve sus bosques y su matriz energética basada en fuentes hidráulicas.

Usos en economía y políticas públicas

Este tipo de análisis tiene aplicaciones directas en la formulación de políticas. Permite que los gobiernos se comparen con países de su mismo segmento y no solo con los de su región o nivel de ingreso, lo que facilita identificar buenas prácticas aplicables. Para los organismos de cooperación internacional y la banca de desarrollo, la segmentación ofrece un criterio para focalizar recursos: los países en rezago requieren inversiones en salud, electrificación y conectividad, mientras que los de desarrollo medio alto necesitan políticas de empleo y de inclusión laboral femenina. Además, los resultados permiten diseñar políticas de transición energética diferenciadas, orientadas a reducir emisiones en los países de altos ingresos y a sustituir la biomasa tradicional por energía limpia y moderna en los países más pobres. Finalmente, el procedimiento puede repetirse con información de distintos años para hacer seguimiento al cumplimiento de los Objetivos de Desarrollo Sostenible.

Limitaciones y trabajo futuro

El estudio se limita a un solo año, 2021, afectado por la pandemia, y excluye a 34 países por falta de información, en su mayoría pequeños Estados insulares y países en conflicto. Además, los resultados dependen de las variables seleccionadas, y la falta de datos completos impidió incluir indicadores relevantes como la pobreza, la desigualdad o la educación. Como trabajo futuro se propone repetir el análisis con varios años para estudiar la movilidad de los países entre clusters, incorporar variables de gobernanza y desigualdad, aplicar métodos de imputación para recuperar los países excluidos y comparar los resultados con otros métodos de clusterización, como k-medias.

Bibliografía

Banco Mundial. (2026). World Development Indicators [Conjunto de datos]. https://databank.worldbank.org/source/world-development-indicators

Gapminder Foundation. (2026). Open Numbers: World Development Indicators [Repositorio de datos]. GitHub. https://github.com/open-numbers/ddf–open_numbers–world_development_indicators

James, G., Witten, D., Hastie, T., y Tibshirani, R. (2021). An introduction to statistical learning: With applications in R (2.ª ed.). Springer.

Jolliffe, I. T., y Cadima, J. (2016). Principal component analysis: A review and recent developments. Philosophical Transactions of the Royal Society A, 374(2065), 20150202.

Kaiser, H. F. (1960). The application of electronic computers to factor analysis. Educational and Psychological Measurement, 20(1), 141–151.

Naciones Unidas. (2015). Transformar nuestro mundo: la Agenda 2030 para el Desarrollo Sostenible (A/RES/70/1). Asamblea General de las Naciones Unidas.

Preston, S. H. (1975). The changing relation between mortality and level of economic development. Population Studies, 29(2), 231–248.

Rousseeuw, P. J. (1987). Silhouettes: A graphical aid to the interpretation and validation of cluster analysis. Journal of Computational and Applied Mathematics, 20, 53–65.

Sievert, C. (2020). Interactive web-based data visualization with R, plotly, and shiny. Chapman and Hall/CRC.

Ward, J. H. (1963). Hierarchical grouping to optimize an objective function. Journal of the American Statistical Association, 58(301), 236–244.