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