library(tidyverse)
library(factoextra)
library(FactoMineR)
library(dendextend)
library(FactoClass)
library(reshape2)
library(corrplot)
library(ggcorrplot)
library(ggrepel)
library(readxl)
library(knitr)
library(kableExtra)
library(scales)
library(plotly)Los manuales de economía internacional suelen clasificar los países en dos grandes bloques: economías avanzadas y economías emergentes. Es una distinción útil, pero incompleta. Dentro de la propia OCDE conviven países con inflaciones de un dígito y países con inflaciones de tres dígitos, economías altamente abiertas al comercio mundial y otras que dependen casi exclusivamente de su mercado interno, mercados laborales de medio millón de trabajadores y mercados de más de mil millones.
Esto lleva a una pregunta que no siempre se formula con claridad: ¿hasta qué punto los indicadores macroeconómicos estándar son suficientes para clasificar países en grupos coherentes, o existen economías cuya trayectoria es tan particular que simplemente no encajan en ninguna categoría?
Dicho de otra forma: cuando se analizan 15 variables económicas simultáneamente sobre 42 países, ¿emergen grupos naturales con sentido económico real, o los datos están tan dispersos que cualquier agrupación es forzada? Y si hay economías que quedan fuera de los patrones comunes, ¿eso es un fallo del método o una señal genuina sobre su situación estructural?
Estas son las preguntas que guían el análisis.
La OCDE lleva décadas documentando cómo la economía global tiende a moverse en bloque, pero también cómo esa imagen de conjunto esconde diferencias enormes entre países. Después de la pandemia eso quedó más claro que nunca.
Cuando los precios empezaron a dispararse entre 2021 y 2022, la inflación no llegó igual a todos lados. En Alemania o España subió y después bajó, siguiendo el ciclo de política monetaria de los bancos centrales. En Argentina ya venía alta antes de la pandemia y siguió escalando hasta superar el 100% anual. En Japón casi no se movió durante años. Como señaló la propia OCDE en su informe de septiembre de 2021, la recuperación económica avanzaba, pero de forma desigual: algunos países retomaban el crecimiento con fuerza mientras otros seguían atrapados en sus propios problemas estructurales (OCDE, 2021).
Esa desigualdad no desapareció con el tiempo. Los reportes más recientes de la organización muestran que si bien la inflación ha bajado en la mayoría de economías avanzadas, no todos van al mismo ritmo ni desde el mismo punto de partida. Según el Economic Outlook 2025 de la OCDE, la inflación anual del G20 se espera que pase del 3.4% en 2025 al 2.8% en 2026, pero esos promedios ocultan que hay economías donde la inflación sigue siendo un problema sin resolver, mientras que otras ya la tienen completamente bajo control (OCDE, 2025).
En cuanto al crecimiento, el panorama también es dispar. La economía global ha mostrado más resistencia de lo que se esperaba frente a shocks como las subidas de aranceles o la incertidumbre geopolítica, pero el crecimiento del PIB global se proyecta que baje del 3.2% en 2025 al 2.9% en 2026, con diferencias notables entre regiones: las economías emergentes de Asia siguen siendo el principal motor, mientras Europa crece más lento y algunos países de América Latina navegan entre la estabilización y la volatilidad (OCDE, 2025).
Todo esto sirve de fondo para entender por qué tiene sentido hacer el ejercicio que propone este trabajo. Si los países fueran más o menos homogéneos, un análisis de clustering sobre sus indicadores daría grupos difusos y poco útiles. Pero si las diferencias estructurales son reales y profundas, los datos deberían organizarse en grupos con sentido económico propio. El objetivo es justamente verificar eso, y de paso, identificar cuáles son las dimensiones que mejor explican por qué unos países se parecen entre sí y otros no.
La base de datos utilizada es el archivo DatosEcon.xlsx,
hoja Data, con fuente en la OCDE (Organización para la
Cooperación y el Desarrollo Económicos). Contiene información de 42
países, incluyendo tanto economías miembros de la OCDE como economías
emergentes asociadas o invitadas (Brasil, India, Colombia, Perú,
Sudáfrica, Argentina, entre otros).
La base original dispone de 29 variables macroeconómicas (x1 a x29), que cubren áreas como balanza de pagos, cuentas nacionales, precios, empleo, tasas de interés y tipos de cambio. Para el análisis se seleccionaron 15 variables con base en tres criterios: cobertura temática equilibrada entre dimensiones económicas, capacidad discriminante entre grupos de países, y control de valores extremos. Las observaciones corresponden a promedios del período analizado (datos panel resumidos en un corte transversal por país), con los valores monetarios expresados en distintas unidades según la variable (USD corrientes, moneda nacional, índices o porcentajes).
Análisis de Componentes Principales (ACP). Es una técnica de reducción de dimensionalidad que transforma un conjunto de variables correlacionadas en un conjunto menor de variables no correlacionadas llamadas componentes principales, ordenadas de manera que las primeras retienen la mayor parte de la variabilidad de los datos originales. Esto permite identificar los “factores” subyacentes que explican el comportamiento conjunto de las variables económicas y visualizar a los países en un espacio de menor dimensión.
Clusterización K-Means. Es un algoritmo de agrupamiento que divide un conjunto de observaciones en k grupos, asignando cada observación al grupo cuyo centroide (promedio) le resulte más cercano, y recalculando iterativamente esos centroides hasta que las asignaciones se estabilizan. Requiere definir de antemano el número de grupos k.
Clusterización jerárquica (método de Ward). A diferencia de K-Means, este método no requiere definir k de antemano: comienza tratando cada observación como su propio grupo y va fusionando los grupos más similares de manera sucesiva, hasta formar una estructura en forma de árbol (dendrograma). El método de Ward fusiona en cada paso los grupos que minimizan el incremento en la varianza interna total, produciendo grupos compactos y homogéneos. El número final de grupos se obtiene “cortando” el dendrograma a una altura determinada.
Para determinar el número óptimo de grupos se emplearon los criterios de codo (within-cluster sum of squares) y de silueta promedio. En este análisis, el criterio de silueta sugiere k = 2 como óptimo matemático; sin embargo, esto se debe a que Argentina constituye un caso tan extremo en términos de inflación y deuda externa que cualquier partición en dos grupos tiende a separarla del resto, maximizando artificialmente la silueta. Se optó por k = 3, ya que ofrece una segmentación con mayor riqueza interpretativa: permite distinguir un grupo intermedio de economías emergentes que k = 2 no deja ver, manteniendo a Argentina como un tercer grupo (caso atípico) plenamente justificable desde el punto de vista estadístico y económico.
Las 15 variables seleccionadas se organizan en cinco dimensiones económicas:
CuentaCorriente_pct (x1): Saldo de
la cuenta corriente como porcentaje del PIB. Valores positivos indican
superávit (el país exporta más de lo que importa), mientras que valores
negativos reflejan déficit y dependencia del financiamiento externo. Es
un indicador clave de la sostenibilidad del sector externo.
Exportaciones_pctPIB (x4):
Exportaciones de bienes y servicios como porcentaje del PIB. Mide el
peso del sector exportador dentro de la economía, enfocándose en la
oferta exportable.
Apertura_Comercial (x21): Suma de
exportaciones e importaciones como porcentaje del PIB. Refleja el grado
de integración de un país con la economía mundial; economías pequeñas y
abiertas tienden a mostrar valores más altos que economías grandes y
relativamente cerradas.
Crec_PIB_Real (x17): Tasa de
crecimiento anual del PIB real. Es el indicador estándar del ritmo de
expansión económica, eliminando el efecto de la inflación.
Crec_Exportaciones (x16): Tasa de
crecimiento de las exportaciones en volumen real. Mide el dinamismo del
sector externo y la ganancia de competitividad en mercados
internacionales.
Crec_FBCF (x20): Tasa de
crecimiento de la Formación Bruta de Capital Fijo. Es el componente más
volátil del PIB y actúa como señal adelantada del ciclo económico;
captura el dinamismo de la inversión productiva.
Inflacion_IPC (x18): Variación del
Índice de Precios al Consumidor (%). Captura la presión inflacionaria
sobre los hogares. Argentina presenta un z-score superior a 5 por su
inflación crónica, convirtiéndola en un caso atípico estadísticamente
justificable.
Deflactor_Crec (x19): Variación del
deflactor implícito del PIB (%). Es una medida más amplia de inflación
que el IPC, pues incluye bienes de inversión y exportaciones. Presenta
alta correlación con la inflación IPC (r = 0.968) dado que ambas
capturan el fenómeno inflacionario desde ángulos distintos.
Deflactor_PIB_Nivel (x25): Nivel
del deflactor del PIB (índice base). A diferencia de la variación anual,
captura la acumulación histórica de precios, reflejando cuánto han
variado los precios en términos absolutos respecto al año base.
Deflactor_Imp_Exp (x8): Relación
entre el deflactor de importaciones y el de exportaciones, equivalente a
los términos de intercambio implícitos. Valores positivos indican que el
país vende caro y compra barato; es sensible a los precios de las
materias primas.
Tasa_Desempleo (x15): Tasa de
desempleo (%). Refleja la eficiencia en el uso del factor trabajo y la
salud del mercado laboral.
Empleo_Total (x27): Número total de
personas empleadas. Es una variable de tamaño absoluto que complementa
la tasa de desempleo con una medida del volumen real del mercado
laboral.
FuerzaLaboral (x28): Población
económicamente activa (empleados más desempleados que buscan trabajo).
Correlaciona muy fuertemente con el empleo total (r = 0.999), pues ambas
son componentes del mismo agregado laboral; juntas capturan el tamaño
del mercado de trabajo.
Tasa_Interes_CP (x29): Tasa de
interés de corto plazo del banco central. Tasas elevadas señalan una
política monetaria antiinflacionaria o una prima de riesgo país elevada;
tasas bajas indican una postura expansiva.
Deuda_Ext_pct (x2): Indicador de
posición financiera externa o deuda como ratio. Argentina presenta un
z-score de 4.84, consistente con su historial de reestructuraciones de
deuda. Junto con las variables de inflación, construye la dimensión de
fragilidad macroeconómica que el ACP identifica como componente
independiente.# ── 1. CARGA DE DATOS ────────────────────────────────────────
datos <- read_excel("DatosEcon.xlsx", sheet = "Data")
paises <- datos$Pais# ── 2. SELECCIÓN Y RENOMBRE DE VARIABLES ─────────────────────
variables_sel <- c(
"x1", # CuentaCorriente_pct
"x15", # Tasa_Desempleo
"x16", # Crec_Exportaciones
"x17", # Crec_PIB_Real
"x18", # Inflacion_IPC
"x19", # Deflactor_Crec
"x2", # Deuda_Ext_pct
"x20", # Crec_FBCF
"x21", # Apertura_Comercial
"x25", # Deflactor_PIB_Nivel
"x27", # Empleo_Total
"x28", # FuerzaLaboral
"x29", # Tasa_Interes_CP
"x4", # Exportaciones_pctPIB
"x8" # Deflactor_Imp_Exp
)
base <- datos %>%
select(all_of(variables_sel)) %>%
rename(
CuentaCorriente_pct = x1,
Tasa_Desempleo = x15,
Crec_Exportaciones = x16,
Crec_PIB_Real = x17,
Inflacion_IPC = x18,
Deflactor_Crec = x19,
Deuda_Ext_pct = x2,
Crec_FBCF = x20,
Apertura_Comercial = x21,
Deflactor_PIB_Nivel = x25,
Empleo_Total = x27,
FuerzaLaboral = x28,
Tasa_Interes_CP = x29,
Exportaciones_pctPIB = x4,
Deflactor_Imp_Exp = x8
)
rownames(base) <- paises
# Objeto auxiliar con columna Pais (útil para gráficos)
datos_sel <- bind_cols(Pais = paises, base)La tabla siguiente resume las principales medidas de tendencia central y dispersión para cada una de las 15 variables seleccionadas, agrupadas por dimensión económica.
tabla_desc <- data.frame(
Variable = colnames(base),
Media = sapply(base, function(x) mean(x, na.rm = TRUE)),
Mediana = sapply(base, function(x) median(x, na.rm = TRUE)),
SD = sapply(base, function(x) sd(x, na.rm = TRUE)),
CV = sapply(base, function(x)
abs(sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE)) * 100),
Min = sapply(base, function(x) min(x, na.rm = TRUE)),
Max = sapply(base, function(x) max(x, na.rm = TRUE))
)
tabla_fmt <- tabla_desc %>%
mutate(
across(c(Media, Mediana, SD, Min, Max),
~ ifelse(abs(.) >= 1e9,
formatC(., format = "e", digits = 2),
round(., 3))),
CV = round(CV, 1)
)
tabla_fmt %>%
kable(
caption = "Estadísticas descriptivas — 15 variables OCDE",
align = c("l", rep("r", 6))
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
font_size = 12
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white") %>%
pack_rows("Sector Externo", 1, 1) %>% # CuentaCorriente_pct
pack_rows("Mercado Laboral y Monetario", 2, 2) %>% # Tasa_Desempleo
pack_rows("Dinámica y Tasas de Crecimiento", 3, 4) %>% # Crec_Exportaciones, Crec_PIB_Real
pack_rows("Precios e Inflación", 5, 6) %>% # Inflacion_IPC, Deflactor_Crec
pack_rows("Desequilibrios Macroeconómicos", 7, 7) %>% # Deuda_Ext_pct
pack_rows("Dinámica y Tasas de Crecimiento", 8, 8) %>% # Crec_FBCF
pack_rows("Sector Externo", 9, 9) %>% # Apertura_Comercial
pack_rows("Precios e Inflación", 10, 10) %>% # Deflactor_PIB_Nivel
pack_rows("Mercado Laboral y Monetario", 11, 13) %>% # Empleo_Total, FuerzaLaboral, Tasa_Interes_CP
pack_rows("Sector Externo", 14, 14) %>% # Exportaciones_pctPIB
pack_rows("Precios e Inflación", 15, 15) # Deflactor_Imp_Exp| Variable | Media | Mediana | SD | CV | Min | Max | |
|---|---|---|---|---|---|---|---|
| Sector Externo | |||||||
| CuentaCorriente_pct | CuentaCorriente_pct | 1.012 | 0.356 | 5.079 | 501.9 | -7.282 | 14.913 |
| Mercado Laboral y Monetario | |||||||
| Tasa_Desempleo | Tasa_Desempleo | 10.67 | 10.405 | 6.887 | 64.5 | -3.586 | 27.823 |
| Dinámica y Tasas de Crecimiento | |||||||
| Crec_Exportaciones | Crec_Exportaciones | 12.824 | 13.125 | 8.24 | 64.3 | -8.283 | 35.465 |
| Crec_PIB_Real | Crec_PIB_Real | 6.415 | 5.291 | 2.87 | 44.7 | 1.641 | 13.427 |
| Precios e Inflación | |||||||
| Inflacion_IPC | Inflacion_IPC | 12.974 | 10.685 | 11.373 | 87.7 | 0.759 | 70.182 |
| Deflactor_Crec | Deflactor_Crec | 6.085 | 3.068 | 9.122 | 149.9 | -0.868 | 54.152 |
| Desequilibrios Macroeconómicos | |||||||
| Deuda_Ext_pct | Deuda_Ext_pct | 7.987 | 1.3 | 18.22 | 228.1 | 0.727 | 95.082 |
| Dinámica y Tasas de Crecimiento | |||||||
| Crec_FBCF | Crec_FBCF | 7.344 | 6.599 | 10.812 | 147.2 | -39.07 | 35.318 |
| Sector Externo | |||||||
| Apertura_Comercial | Apertura_Comercial | 6.611 | 5.733 | 3.929 | 59.4 | 0.399 | 20.505 |
| Precios e Inflación | |||||||
| Deflactor_PIB_Nivel | Deflactor_PIB_Nivel | 2.886 | 1.138 | 10.18 | 352.8 | 1 | 67.152 |
| Mercado Laboral y Monetario | |||||||
| Empleo_Total | Empleo_Total | 21054644.248 | 8025105.868 | 32633038.117 | 155.0 | 195925 | 152578500 |
| FuerzaLaboral | FuerzaLaboral | 22851309.563 | 8657374.355 | 35182554.068 | 154.0 | 208400 | 161204000 |
| Tasa_Interes_CP | Tasa_Interes_CP | 0.996 | 0.02 | 3.171 | 318.5 | -0.739 | 18.714 |
| Sector Externo | |||||||
| Exportaciones_pctPIB | Exportaciones_pctPIB | 3.76e+11 | 2.11e+11 | 4.95e+11 | 131.5 | 8.36e+09 | 2.75e+12 |
| Precios e Inflación | |||||||
| Deflactor_Imp_Exp | Deflactor_Imp_Exp | 0.001 | -0.006 | 0.051 | 4027.3 | -0.089 | 0.279 |
# Función auxiliar para etiquetar outliers en boxplots
outliers_pais <- function(df) {
df %>%
group_by(Variable) %>%
mutate(
Q1 = quantile(Valor, 0.25, na.rm = TRUE),
Q3 = quantile(Valor, 0.75, na.rm = TRUE),
IQR = Q3 - Q1,
es_outlier = Valor < (Q1 - 1.5 * IQR) | Valor > (Q3 + 1.5 * IQR)
) %>%
ungroup()
}
# Tema base para boxplots
tema_box <- theme_minimal(base_size = 12) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 13),
plot.subtitle = element_text(hjust = 0.5, size = 10,
color = "grey40", margin = margin(b = 10)),
plot.caption = element_text(size = 8, color = "grey55", hjust = 0),
strip.text = element_text(face = "bold", size = 11),
axis.title.y = element_text(size = 10, color = "grey40"),
axis.text.x = element_text(size = 10, face = "bold"),
axis.text.y = element_text(size = 9),
panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "none"
)El siguiente boxplot muestra la distribución del saldo de cuenta corriente como porcentaje del PIB entre los 42 países. Los países con superávit externo (Noruega, Irlanda, Alemania) se ubican en la parte positiva, mientras que los países con déficit —como Rumanía, Nueva Zelanda y Chile— presentan valores negativos, indicando dependencia del financiamiento externo. La línea punteada en cero facilita la identificación de la posición externa de cada economía.
g_cc <- datos_sel %>%
select(Pais, CuentaCorriente_pct) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
ggplot(g_cc, aes(x = Variable, y = Valor)) +
geom_boxplot(fill = "#2C5F8A", alpha = 0.65, width = 0.4,
outlier.shape = NA) +
geom_hline(yintercept = 0, linetype = "dashed",
color = "grey50", linewidth = 0.5) +
geom_point(data = filter(g_cc, es_outlier),
color = "#C0392B", size = 2.5, shape = 16) +
geom_text_repel(data = filter(g_cc, es_outlier),
aes(label = Pais),
size = 3, color = "grey25",
box.padding = 0.4, max.overlaps = 20,
segment.color = "grey70", segment.size = 0.3) +
labs(
title = "Posición Externa — Cuenta Corriente",
subtitle = "Saldo como porcentaje del PIB\n(+) superávit externo | (–) déficit externo",
caption = "Fuente: OCDE",
x = "", y = "% del PIB"
) +
tema_boxDistribución del saldo de cuenta corriente (% del PIB). Los puntos rojos identifican valores atípicos etiquetados por país.
Los dos paneles muestran el grado de apertura comercial y el peso de las exportaciones en el PIB. Se observa una alta variabilidad: economías pequeñas y muy abiertas como Luxemburgo, Bélgica e Irlanda presentan valores extremadamente altos tanto en apertura como en exportaciones como porcentaje del PIB, lo cual las convierte en valores atípicos respecto al resto de la muestra. En contraste, economías grandes como Estados Unidos o Japón muestran valores más bajos en ambas variables debido al tamaño de su mercado interno.
g_aper <- datos_sel %>%
select(Pais, Apertura_Comercial, Exportaciones_pctPIB) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
etiquetas_aper <- c(
Apertura_Comercial = "Apertura Comercial\n(% PIB)",
Exportaciones_pctPIB = "Exportaciones\n(% PIB)"
)
ggplot(g_aper, aes(x = "", y = Valor, fill = Variable)) +
geom_boxplot(alpha = 0.65, outlier.shape = NA) +
geom_point(data = filter(g_aper, es_outlier),
color = "#C0392B", size = 2, shape = 16) +
geom_text_repel(data = filter(g_aper, es_outlier),
aes(label = Pais),
size = 2.8, color = "grey25",
box.padding = 0.4, max.overlaps = 15,
segment.color = "grey70", segment.size = 0.3) +
facet_wrap(~ Variable, scales = "free_y",
labeller = as_labeller(etiquetas_aper)) +
scale_fill_manual(values = c("Apertura_Comercial" = "#2C5F8A",
"Exportaciones_pctPIB" = "#5B9BD5")) +
labs(
title = "Apertura y Orientación Exportadora",
subtitle = "Indicadores de integración comercial como % del PIB\nCada panel tiene su propia escala",
caption = "Fuente: OCDE",
x = "", y = "%"
) +
tema_box +
theme(axis.text.x = element_blank())Apertura comercial y exportaciones como porcentaje del PIB. Cada panel tiene su propia escala.
Los tres paneles presentan la distribución de las tasas de crecimiento del PIB real, de la inversión (FBCF) y de las exportaciones. Se puede observar que la inversión (Crec_FBCF) es el indicador más volátil de los tres, con una mayor dispersión intercuartílica, confirmando su rol de variable de ciclo económico. Irlanda muestra un valor extremadamente negativo en crecimiento de la inversión, consistente con los efectos contables de la relocalización de activos en su economía. La línea punteada en cero facilita identificar los países con contracción en cada dimensión.
g_crec <- datos_sel %>%
select(Pais, Crec_PIB_Real, Crec_FBCF, Crec_Exportaciones) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
etiquetas_crec <- c(
Crec_PIB_Real = "Crecimiento PIB Real\n(variación % anual)",
Crec_FBCF = "Inversión — FBCF\n(variación % anual)",
Crec_Exportaciones = "Crecimiento Exportaciones\n(variación % anual)"
)
ggplot(g_crec, aes(x = "", y = Valor, fill = Variable)) +
geom_boxplot(alpha = 0.65, outlier.shape = NA) +
geom_hline(yintercept = 0, linetype = "dashed",
color = "grey50", linewidth = 0.4) +
geom_point(data = filter(g_crec, es_outlier),
color = "#C0392B", size = 2, shape = 16) +
geom_text_repel(data = filter(g_crec, es_outlier),
aes(label = Pais),
size = 2.8, color = "grey25",
box.padding = 0.4, max.overlaps = 15,
segment.color = "grey70", segment.size = 0.3) +
facet_wrap(~ Variable, scales = "free_y",
labeller = as_labeller(etiquetas_crec)) +
scale_fill_manual(values = c("Crec_PIB_Real" = "#2C5F8A",
"Crec_FBCF" = "#5B9BD5",
"Crec_Exportaciones" = "#A8C8E8")) +
labs(
title = "Dinámica Económica — Tasas de Crecimiento",
subtitle = "Variaciones porcentuales anuales en términos reales\nLínea punteada = cero",
caption = "Fuente: OCDE",
x = "", y = "%"
) +
tema_box +
theme(axis.text.x = element_blank())Tasas de crecimiento del PIB real, inversión (FBCF) y exportaciones. Cada panel tiene su propia escala.
Los cuatro paneles permiten visualizar distintas dimensiones del fenómeno inflacionario. Argentina se identifica como valor extremo en todos los indicadores de precios: su inflación IPC y la variación del deflactor del PIB superan ampliamente los máximos del resto de la muestra, mientras que su deflactor de nivel refleja la acumulación histórica de precios. Turquía también emerge como valor atípico en las variables de variación de precios. Para el resto de los países, la distribución es relativamente compacta y cercana a valores bajos, coherente con la experiencia inflacionaria moderada de las economías OCDE en el período analizado.
g_prec <- datos_sel %>%
select(Pais, Inflacion_IPC, Deflactor_Crec, Deflactor_PIB_Nivel,
Deflactor_Imp_Exp) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
etiquetas_prec <- c(
Inflacion_IPC = "Inflación IPC\n(var. % anual)",
Deflactor_Crec = "Deflactor — Crecimiento\n(var. % anual)",
Deflactor_PIB_Nivel = "Deflactor PIB\n(nivel índice)",
Deflactor_Imp_Exp = "Términos de Intercambio\n(deflactor imp/exp)"
)
ggplot(g_prec, aes(x = "", y = Valor, fill = Variable)) +
geom_boxplot(alpha = 0.65, outlier.shape = NA) +
geom_point(data = filter(g_prec, es_outlier),
color = "#C0392B", size = 2, shape = 16) +
geom_text_repel(data = filter(g_prec, es_outlier),
aes(label = Pais),
size = 2.8, color = "grey25",
box.padding = 0.4, max.overlaps = 15,
segment.color = "grey70", segment.size = 0.3) +
facet_wrap(~ Variable, scales = "free_y",
labeller = as_labeller(etiquetas_prec)) +
scale_fill_manual(values = c("Inflacion_IPC" = "#2C5F8A",
"Deflactor_Crec" = "#5B9BD5",
"Deflactor_PIB_Nivel" = "#A8C8E8",
"Deflactor_Imp_Exp" = "#1A3F5C")) +
labs(
title = "Precios e Inflación",
subtitle = "Indicadores de presión inflacionaria y términos de intercambio\nCada panel tiene su propia escala",
caption = "Fuente: OCDE",
x = "", y = ""
) +
tema_box +
theme(axis.text.x = element_blank())Indicadores de presión inflacionaria y términos de intercambio. Cada panel tiene su propia escala.
Los cuatro paneles muestran la tasa de desempleo, el empleo total, la fuerza laboral y la tasa de interés de corto plazo. En cuanto al desempleo, países como Grecia, España y Sudáfrica presentan tasas elevadas que los ubican como valores atípicos. Para el empleo total y la fuerza laboral, las economías más grandes en términos poblacionales (India, Estados Unidos, Brasil) se destacan como outliers por el volumen absoluto de sus mercados de trabajo. En la tasa de interés, Turquía aparece como el caso más extremo, reflejando una política monetaria fuertemente restrictiva para contener la presión inflacionaria.
g_lab <- datos_sel %>%
select(Pais, Tasa_Desempleo, Empleo_Total, FuerzaLaboral, Tasa_Interes_CP) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
etiquetas_lab <- c(
Tasa_Desempleo = "Tasa de Desempleo\n(%)",
Empleo_Total = "Empleo Total\n(personas)",
FuerzaLaboral = "Fuerza Laboral\n(personas)",
Tasa_Interes_CP = "Tasa de Interés\nCorto Plazo (%)"
)
ggplot(g_lab, aes(x = "", y = Valor, fill = Variable)) +
geom_boxplot(alpha = 0.65, outlier.shape = NA) +
geom_point(data = filter(g_lab, es_outlier),
color = "#C0392B", size = 2.5, shape = 16) +
geom_text_repel(data = filter(g_lab, es_outlier),
aes(label = Pais),
size = 3, color = "grey25",
box.padding = 0.4, max.overlaps = 15,
segment.color = "grey70", segment.size = 0.3) +
facet_wrap(~ Variable, scales = "free_y",
labeller = as_labeller(etiquetas_lab)) +
scale_fill_manual(values = c("Tasa_Desempleo" = "#2C5F8A",
"Empleo_Total" = "#5B9BD5",
"FuerzaLaboral" = "#A8C8E8",
"Tasa_Interes_CP" = "#1A3F5C")) +
labs(
title = "Mercado Laboral y Política Monetaria",
subtitle = "Desempleo, tamaño del mercado laboral y tasa de interés de corto plazo\nCada panel tiene su propia escala",
caption = "Fuente: OCDE",
x = "", y = ""
) +
tema_box +
theme(axis.text.x = element_blank())Indicadores del mercado laboral y tasa de interés de corto plazo. Cada panel tiene su propia escala.
El boxplot de la deuda externa confirma la posición extrema de Argentina dentro de la muestra. Su ratio de deuda externa supera con amplitud el rango intercuartílico del conjunto, con un z-score de 4.84, consistente con su historial de reestructuraciones y vulnerabilidad financiera externa. El resto de los países se concentra en una distribución relativamente compacta, con valores moderados y similares entre sí.
g_deuda <- datos_sel %>%
select(Pais, Deuda_Ext_pct) %>%
pivot_longer(-Pais, names_to = "Variable", values_to = "Valor") %>%
outliers_pais()
ggplot(g_deuda, aes(x = Variable, y = Valor)) +
geom_boxplot(fill = "#7D3C98", alpha = 0.65, width = 0.4,
outlier.shape = NA) +
geom_point(data = filter(g_deuda, es_outlier),
color = "#C0392B", size = 2.5, shape = 16) +
geom_text_repel(data = filter(g_deuda, es_outlier),
aes(label = Pais),
size = 3, color = "grey25",
box.padding = 0.4, max.overlaps = 20,
segment.color = "grey70", segment.size = 0.3) +
labs(
title = "Desequilibrios Macroeconómicos — Deuda Externa",
subtitle = "Indicador de posición financiera externa o deuda como ratio",
caption = "Fuente: OCDE",
x = "", y = "Ratio / % del PIB"
) +
tema_boxDistribución del indicador de deuda externa (ratio o % del PIB). El punto rojo identifica a Argentina como valor atípico extremo.
La matriz de correlación permite identificar las relaciones lineales entre las 15 variables seleccionadas, detectar redundancias y anticipar la estructura factorial que el ACP revelará. Se presentan dos visualizaciones complementarias: el mapa de calor clásico (ordenado por similitud) y el gráfico de correlaciones significativas filtradas por p-valor.
mat_cor <- cor(base, use = "complete.obs", method = "pearson")
mat_pval <- ggcorrplot::cor_pmat(base, use = "complete.obs")
corrplot(mat_cor,
method = "color",
type = "upper",
order = "hclust",
tl.col = "black",
tl.srt = 45,
tl.cex = 0.85,
addCoef.col = "black",
number.cex = 0.6,
col = colorRampPalette(c("#C0392B", "white", "#2C5F8A"))(200),
title = "Matriz de correlación — 15 variables OCDE",
mar = c(0, 0, 2, 0))Matriz de correlaciones entre las 15 variables OCDE, ordenada por similitud (clúster jerárquico). Rojo = correlación negativa, azul = positiva.
ggcorrplot(mat_cor,
hc.order = TRUE,
type = "lower",
lab = TRUE,
lab_size = 3,
p.mat = mat_pval,
insig = "blank",
colors = c("#C0392B", "white", "#2C5F8A"),
title = "Correlaciones significativas (p < 0.05)",
ggtheme = theme_minimal())Correlaciones estadísticamente significativas (p < 0.05). Las celdas en blanco corresponden a pares no significativos.
cor_long <- melt(mat_cor)
colnames(cor_long) <- c("Var1", "Var2", "Correlacion")
alta_cor <- cor_long %>%
filter(as.character(Var1) < as.character(Var2)) %>%
filter(abs(Correlacion) >= 0.70) %>%
arrange(desc(abs(Correlacion)))
alta_cor %>%
mutate(Correlacion = round(Correlacion, 3)) %>%
kable(
caption = "Pares de variables con correlación |r| ≥ 0.70",
col.names = c("Variable 1", "Variable 2", "Correlación"),
align = c("l", "l", "r")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
font_size = 12
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white")| Variable 1 | Variable 2 | Correlación |
|---|---|---|
| Empleo_Total | FuerzaLaboral | 0.999 |
| Deflactor_Crec | Inflacion_IPC | 0.968 |
| Deflactor_Crec | Deflactor_PIB_Nivel | 0.855 |
| Deflactor_PIB_Nivel | Inflacion_IPC | 0.817 |
| Deflactor_PIB_Nivel | Deuda_Ext_pct | 0.760 |
| Apertura_Comercial | Crec_PIB_Real | 0.739 |
| Deflactor_Crec | Deuda_Ext_pct | 0.718 |
| Crec_FBCF | Deflactor_Imp_Exp | -0.703 |
La mayoría de las correlaciones altas se concentran dentro de cada dimensión temática, lo cual es esperable: variables que miden el mismo fenómeno desde distintos ángulos tienden a moverse juntas. Entre dimensiones diferentes, las correlaciones son bajas o no significativas, lo que confirma que las cinco dimensiones aportan información genuinamente distinta.
Los dos pares con correlación más alta merecen una nota.
Empleo_Total y FuerzaLaboral son casi
idénticas estadísticamente, ya que una es componente directa de la otra.
Se conservaron ambas porque contribuían a aumentar la varianza explicada
en el ACP y porque cada una describe el mercado laboral desde un ángulo
ligeramente distinto: una mide a quienes trabajan, la otra incluye
también a quienes buscan trabajo. Inflacion_IPC y
Deflactor_Crec, por su parte, miden la inflación desde
ángulos conceptualmente distintos —la canasta del consumidor versus el
conjunto de la producción nacional— lo que les otorga relevancia
económica propia y justifica conservar las dos en el análisis.
En todo caso, las correlaciones altas dentro de cada dimensión no representan un problema metodológico: el ACP está diseñado precisamente para sintetizar variables que comparten información en un único componente, sin pérdida de señal interpretativa.
El ACP se aplica sobre la base estandarizada (escala z) de las 15 variables para sintetizar la variabilidad en un número reducido de factores no correlacionados. Se retienen los componentes con eigenvalor mayor a 1 (criterio de Kaiser).
base_scaled <- scale(base)
res.pca <- prcomp(base_scaled, scale = FALSE)
fviz_eig(res.pca, addlabels = TRUE,
barfill = "#2C5F8A",
barcolor = "#2C5F8A",
linecolor = "#C0392B",
main = "Varianza explicada por componente principal")Varianza explicada por cada componente principal. Las barras muestran el porcentaje individual y la línea acumulada.
eig.val <- get_eigenvalue(res.pca)
eig.val %>%
round(3) %>%
head(8) %>%
kable(
caption = "Eigenvalores y varianza explicada — Primeros 8 componentes",
col.names = c("Eigenvalor", "% Varianza", "% Acumulado"),
align = rep("r", 3)
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
font_size = 12
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white") %>%
row_spec(1:3, background = "#EBF5FB")| Eigenvalor | % Varianza | % Acumulado | |
|---|---|---|---|
| Dim.1 | 5.158 | 34.388 | 34.388 |
| Dim.2 | 2.919 | 19.462 | 53.850 |
| Dim.3 | 2.358 | 15.720 | 69.570 |
| Dim.4 | 1.471 | 9.808 | 79.378 |
| Dim.5 | 0.956 | 6.371 | 85.748 |
| Dim.6 | 0.808 | 5.390 | 91.138 |
| Dim.7 | 0.457 | 3.046 | 94.184 |
| Dim.8 | 0.391 | 2.610 | 96.794 |
Los primeros 3 componentes presentan eigenvalor superior a 1 y acumulan aproximadamente el 69.6% de la varianza total. El primer componente carga con más peso que los otros dos juntos: su eigenvalor supera 5, lo que indica que hay una dimensión —la inflacionaria— que domina con claridad la variabilidad entre países. Los componentes 2 y 3 tienen eigenvalores más parecidos entre sí (alrededor de 2.9 y 2.4 respectivamente), lo que sugiere que las dimensiones de tamaño laboral y términos de intercambio tienen un peso similar en la estructura de los datos. El cuarto componente, aunque también supera el umbral de Kaiser, se excluye del análisis interpretativo porque los tres primeros ya capturan los factores económicos sustantivos y su adición no cambia la estructura de grupos.
fviz_pca_var(res.pca,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
axes = c(1, 2),
title = "Variables — PCA (Componentes 1 y 2)")Círculo de correlaciones: posición de las 15 variables en el espacio de los dos primeros componentes. El color indica la contribución al plano factorial.
Componente 1 — Fragilidad macroeconómica e inflación (34.4% de la
varianza): Este componente está dominado por las variables de precios:
Inflacion_IPC (15.9%), Deflactor_Crec (14.8%)
y Deflactor_PIB_Nivel (11.8%), todas con cargas positivas.
La Deuda_Ext_pct también contribuye significativamente
(10.4%). Los países que se ubican a la derecha del eje horizontal son
aquellos con mayor presión inflacionaria acumulada y mayor fragilidad
financiera externa, siendo Argentina el caso más extremo. En el extremo
opuesto se ubican las economías OCDE con precios estables y deuda
externa contenida.
Componente 2 — Tamaño del mercado laboral vs. orientación
exportadora (19.5%): Los dos polos de este componente enfrentan
Empleo_Total y FuerzaLaboral (contribución
conjunta ~33%) contra Exportaciones_pctPIB y
Crec_Exportaciones (~27%). Los países con fuerza laboral
grande en términos absolutos (India, EE.UU., Brasil) se ubican arriba
del eje vertical, mientras que las economías pequeñas pero muy
orientadas al comercio exterior (Irlanda, Bélgica, Luxemburgo) se
posicionan abajo. Esta dimensión diferencia el tamaño
económico-demográfico del grado de apertura.
Componente 3 — Términos de intercambio y ciclo de crecimiento
(15.7%): El Deflactor_Imp_Exp domina este componente con el
28.4% de la contribución, seguido de CuentaCorriente_pct
(10.3%), Crec_PIB_Real (9.7%) y Tasa_Desempleo
(9.3%). Esta dimensión captura la posición de cada economía frente a los
precios internacionales relativos: los países exportadores de materias
primas, que venden caro y compran barato, se diferencian de los
importadores netos. La combinación con el crecimiento y el desempleo
sugiere que esta dimensión también recoge el momento del ciclo
económico.
Para complementar la lectura anterior, se presentan a continuación los gráficos de contribución de cada variable a los tres componentes retenidos. La línea punteada roja marca el umbral esperado si todas las variables aportaran por igual (100 / 15 ≈ 6.67%); las variables que la superan son las que efectivamente definen esa dimensión.
Variables_dim1 <- fviz_contrib(res.pca, choice = "var", axes = 1,
top = 15, fill = "#2C5F8A", color = "#2C5F8A") +
labs(title = "Contribución de las variables a la Dimensión 1",
x = "Variables", y = "Contribución (%)")
ggplotly(Variables_dim1) %>%
layout(title = "Contribución de las variables a la Dimensión 1",
xaxis = list(title = "Variables"),
yaxis = list(title = "Contribución (%)"))Contribución (%) de cada variable a la Dimensión 1.
El gráfico confirma lo descrito arriba: Inflacion_IPC,
Deflactor_Crec y Deflactor_PIB_Nivel son las
únicas tres variables que superan ampliamente la línea de referencia,
junto con Deuda_Ext_pct algo más cerca del umbral. El resto
de variables aporta poco o nada a esta dimensión, lo que confirma que el
Componente 1 es esencialmente un eje de precios y fragilidad financiera,
no una mezcla de muchos factores distintos.
Variables_dim2 <- fviz_contrib(res.pca, choice = "var", axes = 2,
top = 15, fill = "#2C5F8A", color = "#2C5F8A") +
labs(title = "Contribución de las variables a la Dimensión 2",
x = "Variables", y = "Contribución (%)")
ggplotly(Variables_dim2) %>%
layout(title = "Contribución de las variables a la Dimensión 2",
xaxis = list(title = "Variables"),
yaxis = list(title = "Contribución (%)"))Contribución (%) de cada variable a la Dimensión 2.
Acá se ve con claridad el contraste entre Empleo_Total y
FuerzaLaboral por un lado, y
Exportaciones_pctPIB y Crec_Exportaciones por
el otro: son las cuatro variables que más superan el umbral, mientras
que el resto queda muy por debajo. Esto refuerza que el Componente 2 no
mide tamaño en general, sino específicamente la tensión entre volumen
del mercado laboral y orientación exportadora.
Variables_dim3 <- fviz_contrib(res.pca, choice = "var", axes = 3,
top = 15, fill = "#2C5F8A", color = "#2C5F8A") +
labs(title = "Contribución de las variables a la Dimensión 3",
x = "Variables", y = "Contribución (%)")
ggplotly(Variables_dim3) %>%
layout(title = "Contribución de las variables a la Dimensión 3",
xaxis = list(title = "Variables"),
yaxis = list(title = "Contribución (%)"))Contribución (%) de cada variable a la Dimensión 3.
En esta tercera dimensión la contribución está más repartida que en
las dos anteriores: Deflactor_Imp_Exp lidera con claridad,
pero CuentaCorriente_pct, Crec_PIB_Real y
Tasa_Desempleo también superan el umbral con valores
cercanos entre sí. Esa distribución más pareja es consistente con la
lectura de que el Componente 3 combina precios relativos y ciclo
económico, en lugar de estar dominado por una sola variable.
fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Países — PCA (Componentes 1 y 2)")Proyección de los 42 países en el plano de los dos primeros componentes. El color indica la calidad de representación (cos²).
Argentina se ubica claramente aislada en el extremo derecho del eje horizontal, separada del resto de la nube de puntos, lo que confirma visualmente su condición de caso atípico sobre el Componente 1. En el eje vertical, Estados Unidos y Alemania se ubican en el extremo superior por su elevado volumen de empleo y fuerza laboral, mientras que economías pequeñas y muy abiertas como Chile y Perú se ubican en el extremo inferior. Los colores más intensos (naranja) señalan los países cuya posición está mejor explicada por estos dos primeros componentes; los tonos más claros indican países cuya variabilidad responde más a otras dimensiones no graficadas aquí.
fviz_pca_biplot(res.pca,
repel = TRUE,
col.var = "#2E9FDF",
col.ind = "#696969",
axes = c(1, 2),
title = "Biplot — Países y Variables")Biplot: variables (flechas azules) y países (puntos grises) superpuestos en el espacio factorial.
El biplot integra ambas lecturas anteriores en un solo gráfico: la
dirección de las flechas indica qué variables explican el comportamiento
de los países que se ubican cerca de ellas. Argentina se posiciona en la
dirección de las flechas de inflación y deuda externa, confirmando que
su distancia del resto de países está asociada a esas variables. Del
mismo modo, los países que se agrupan cerca de las flechas de
Empleo_Total y FuerzaLaboral (parte superior)
son los de mayor tamaño demográfico-laboral, mientras que los que se
acercan a las flechas de exportaciones (parte inferior) son economías
pequeñas pero muy abiertas al comercio exterior.
Se emplearon dos criterios complementarios sobre la base estandarizada para decidir el número de grupos.
fviz_nbclust(base_scaled, FUN = kmeans, method = "wss", k.max = 10) +
labs(title = "Método del codo — número óptimo de clusters") +
theme_minimal()Método del codo: la caída en la inercia intra-cluster se aplana a partir de k = 3.
fviz_nbclust(base_scaled, FUN = kmeans, method = "silhouette", k.max = 10) +
labs(title = "Silueta promedio — número óptimo de clusters") +
theme_minimal()Silueta promedio: el máximo matemático es k = 2, pero la elección de k = 3 se justifica por riqueza interpretativa.
Si bien la silueta sugiere k = 2 como óptimo matemático, este resultado está influenciado por el carácter extremo de Argentina. Con k = 3 se obtiene una segmentación con mayor riqueza interpretativa que distingue un grupo de economías emergentes intermedias, conservando a Argentina como caso singular.
set.seed(123)
k_optimo <- 3
modelo_kmeans <- kmeans(base_scaled, centers = k_optimo, nstart = 25)
equipo <- modelo_kmeans$cluster
paises_kmeans <- base %>%
mutate(cluster = factor(equipo), Pais = paises)fviz_cluster(modelo_kmeans,
data = base_scaled,
geom = "point",
repel = TRUE,
palette = c("#E7B800", "#00AFBB", "#FC4E07"),
ggtheme = theme_minimal(),
main = "Clusters K-Means (proyección PCA)")Visualización de los 3 clusters K-Means proyectados sobre los dos primeros componentes del ACP.
El gráfico muestra tres agrupaciones bien diferenciadas en el plano factorial. El clúster amarillo concentra a la gran mayoría de países (30 en total), correspondiente al bloque de economías avanzadas con baja inflación y crecimiento estable. El clúster celeste agrupa a 11 economías emergentes y en transición, ubicadas en una zona intermedia del plano. Argentina aparece sola, en naranja, completamente separada de los otros dos grupos sobre el eje horizontal — la misma posición extrema que ya se había observado en la proyección de países, ahora confirmada como un clúster propio por el algoritmo K-Means.
paises_kmeans %>%
select(Pais, cluster) %>%
arrange(cluster, Pais) %>%
kable(
caption = "Asignación de países a clusters K-Means",
col.names = c("País", "Cluster"),
align = c("l", "c")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
font_size = 12
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white")| País | Cluster |
|---|---|
| Australia | 1 |
| Austria | 1 |
| Belgium | 1 |
| Brazil | 1 |
| Canada | 1 |
| Czech Republic | 1 |
| Denmark | 1 |
| Finland | 1 |
| France | 1 |
| Germany | 1 |
| Hungary | 1 |
| Ireland | 1 |
| Italy | 1 |
| Japan | 1 |
| Korea | 1 |
| Luxembourg | 1 |
| Mexico | 1 |
| Netherlands | 1 |
| New Zealand | 1 |
| Norway | 1 |
| Poland | 1 |
| Portugal | 1 |
| Romania | 1 |
| Slovak Republic | 1 |
| SouthAfrica | 1 |
| Spain | 1 |
| Sweden | 1 |
| Switzerland | 1 |
| United Kingdom | 1 |
| United States | 1 |
| Chile | 2 |
| Colombia | 2 |
| Croatia | 2 |
| Estonia | 2 |
| Greece | 2 |
| Iceland | 2 |
| India | 2 |
| Israel | 2 |
| Peru | 2 |
| Slovenia | 2 |
| Türkiye | 2 |
| Argentina | 3 |
paises_kmeans %>%
group_by(cluster) %>%
summarise(
n = n(),
across(where(is.numeric) & !matches("cluster"),
~ round(mean(.x, na.rm = TRUE), 2))
) %>%
kable(
caption = "Medias de cada variable por cluster K-Means",
align = c("c", "c", rep("r", 15))
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = TRUE,
font_size = 11,
position = "left"
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white") %>%
scroll_box(width = "100%")| cluster | n | CuentaCorriente_pct | Tasa_Desempleo | Crec_Exportaciones | Crec_PIB_Real | Inflacion_IPC | Deflactor_Crec | Deuda_Ext_pct | Crec_FBCF | Apertura_Comercial | Deflactor_PIB_Nivel | Empleo_Total | FuerzaLaboral | Tasa_Interes_CP | Exportaciones_pctPIB | Deflactor_Imp_Exp |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 30 | 2.02 | 8.26 | 9.45 | 5.19 | 9.33 | 3.94 | 4.53 | 3.86 | 4.82 | 1.27 | 22243614 | 24024525 | 0.41 | 477738861625 | 0.01 |
| 2 | 11 | -1.77 | 17.37 | 21.20 | 9.38 | 17.71 | 7.56 | 9.51 | 14.47 | 11.19 | 1.46 | 8640795 | 9620398 | 2.46 | 126868449362 | -0.01 |
| 3 | 1 | 1.37 | 9.22 | 22.02 | 10.40 | 70.18 | 54.15 | 95.08 | 33.42 | 10.02 | 67.15 | 121937875 | 133194875 | 2.46 | 72887513870 | -0.01 |
data_long <- paises_kmeans %>%
select(-Pais) %>%
pivot_longer(-cluster, names_to = "Variable", values_to = "Valor")
ggplot(data_long, aes(y = Valor, x = Variable, color = cluster)) +
geom_boxplot() +
facet_wrap(~ cluster, ncol = 1, labeller = label_both) +
scale_color_manual(values = c("1" = "#E7B800", "2" = "#00AFBB", "3" = "#FC4E07")) +
theme_minimal(base_size = 11) +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
legend.position = "none",
strip.text = element_text(face = "bold")
) +
labs(
title = "Variables por cluster K-Means",
x = "", y = "Valor"
)Distribución de las variables estandarizadas por cluster K-Means.
Para comparar los tres grupos de forma directa, se presenta un gráfico de barras interactivo con la media de cada variable por cluster. Cada barra representa el promedio de esa variable dentro del cluster correspondiente; los tres colores identifican a cada grupo y coinciden con la paleta usada en los gráficos anteriores: amarillo para el cluster 1 (economías OCDE maduras), celeste para el cluster 2 (economías emergentes) y naranja para el cluster 3 (Argentina). Al pasar el cursor sobre cualquier barra se muestra el valor exacto de la media original de esa variable, sin estandarizar.
medias_long <- paises_kmeans %>%
group_by(cluster) %>%
summarise(across(where(is.numeric) & !matches("cluster"), ~ mean(.x, na.rm = TRUE))) %>%
pivot_longer(-cluster, names_to = "Variable", values_to = "Media") %>%
group_by(Variable) %>%
mutate(Media_std = as.numeric(scale(Media))) %>%
ungroup()
g_comparacion <- ggplot(medias_long,
aes(x = Variable, y = Media_std, fill = cluster,
text = paste0("Cluster: ", cluster,
"<br>Variable: ", Variable,
"<br>Media original: ", round(Media, 2)))) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("1" = "#E7B800", "2" = "#00AFBB", "3" = "#FC4E07")) +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 9)) +
labs(title = "Comparación de medias por cluster (estandarizadas)",
x = "Variables", y = "Media estandarizada", fill = "Cluster")
ggplotly(g_comparacion, tooltip = "text") %>%
layout(title = "Comparación de medias por cluster (estandarizadas)",
xaxis = list(title = "Variables"),
yaxis = list(title = "Media estandarizada"),
legend = list(title = list(text = "Cluster")))Comparación de medias por variable y cluster (valores estandarizados).
El eje vertical no muestra las medias en su unidad original, sino
estandarizadas por variable (z-score), para que todas queden en una
escala comparable y las de mayor magnitud (como
Empleo_Total, en millones de personas) no opaquen
visualmente a las de menor magnitud (como las tasas, en porcentaje). El
gráfico hace evidente lo que antes solo estaba descrito en texto: la
barra naranja del cluster 3 (Argentina) se dispara muy por encima de las
demás en Inflacion_IPC, Deflactor_Crec y
Deuda_Ext_pct, mientras que en el resto de variables se
mantiene en un rango similar al de los otros dos grupos. Entre el
cluster 1 y el cluster 2 la diferencia es más sutil, y se concentra
principalmente en Tasa_Interes_CP y en las variables de
tamaño laboral.
Cluster 1 — Economías OCDE maduras: Concentra a la mayoría de los países europeos avanzados, junto con Estados Unidos, Canadá, Australia, Japón y Corea. Lo que los une no es solo el nivel de ingreso sino la estabilidad: inflación IPC promedio por debajo del 5%, deuda externa contenida y tasas de interés de corto plazo bajas o negativas en varios casos. El crecimiento del PIB real es positivo pero moderado, lo cual es coherente con economías que ya alcanzaron su frontera de producción y crecen principalmente por productividad.
Cluster 2 — Economías emergentes y en transición: Incluye países como Colombia, Brasil, Perú, India, Sudáfrica y Turquía. La principal diferencia con el grupo anterior no está en el crecimiento —de hecho varios de estos países crecen más rápido— sino en la volatilidad de precios y en el tamaño absoluto de su mercado laboral. Las tasas de interés promedio de este grupo son notablemente más altas, reflejo de políticas monetarias que tienen que lidiar con inflaciones más persistentes y primas de riesgo más elevadas.
Cluster 3 — Caso atípico (Argentina): Argentina forma un grupo propio no por capricho del algoritmo sino porque sus valores en inflación IPC, variación del deflactor y deuda externa están tan alejados del resto que ningún otro país de la muestra le resulta cercano en el espacio multivariado. La separación es una señal estadística genuina de una trayectoria macroeconómica que no tiene equivalente entre los 42 países analizados.
La clusterización jerárquica se aplica sobre las coordenadas de los 3 primeros componentes del ACP (que retienen el ~69.6% de la varianza), usando distancia euclidiana y el criterio de Ward.
scores_pca <- res.pca$x[, 1:3]
dist_paises <- dist(scores_pca, method = "euclidean")
modelo_ward <- hclust(dist_paises, method = "ward.D2")
dend_modelo <- as.dendrogram(modelo_ward)dend_modelo %>%
color_branches(k = k_optimo) %>%
color_labels(k = k_optimo) %>%
plot(main = "Dendrograma — Método de Ward (factores ACP)",
cex = 0.7)Dendrograma coloreado por los 3 grupos resultantes del corte del árbol. La altura indica la disimilitud acumulada al fusionar los grupos.
fviz_nbclust(scores_pca, FUN = hcut, method = "silhouette", k.max = 10) +
labs(title = "Silueta — Clusterización jerárquica (Ward, factores ACP)") +
theme_minimal()Silueta promedio para la clusterización jerárquica (Ward sobre factores ACP).
clusters_ward <- cutree(modelo_ward, k = k_optimo)
paises_ward <- base %>%
mutate(cluster_ward = factor(clusters_ward), Pais = paises)
paises_ward %>%
select(Pais, cluster_ward) %>%
arrange(cluster_ward, Pais) %>%
kable(
caption = "Asignación de países a clusters jerárquicos (Ward)",
col.names = c("País", "Cluster Ward"),
align = c("l", "c")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
font_size = 12
) %>%
row_spec(0, bold = TRUE, background = "#2C5F8A", color = "white")| País | Cluster Ward |
|---|---|
| Australia | 1 |
| Austria | 1 |
| Belgium | 1 |
| Brazil | 1 |
| Canada | 1 |
| Czech Republic | 1 |
| Denmark | 1 |
| Finland | 1 |
| France | 1 |
| Germany | 1 |
| Hungary | 1 |
| Ireland | 1 |
| Italy | 1 |
| Japan | 1 |
| Korea | 1 |
| Luxembourg | 1 |
| Mexico | 1 |
| Netherlands | 1 |
| New Zealand | 1 |
| Norway | 1 |
| Poland | 1 |
| Portugal | 1 |
| Slovak Republic | 1 |
| SouthAfrica | 1 |
| Spain | 1 |
| Sweden | 1 |
| Switzerland | 1 |
| United Kingdom | 1 |
| United States | 1 |
| Chile | 2 |
| Colombia | 2 |
| Croatia | 2 |
| Estonia | 2 |
| Greece | 2 |
| Iceland | 2 |
| India | 2 |
| Israel | 2 |
| Peru | 2 |
| Romania | 2 |
| Slovenia | 2 |
| Türkiye | 2 |
| Argentina | 3 |
Los resultados de Ward y K-Means coinciden en lo fundamental: Argentina queda aislada en ambos, y el bloque de economías avanzadas se mantiene estable. La única diferencia apreciable está en cómo los dos métodos distribuyen algunos países del grupo intermedio —por ejemplo, ciertos países de Europa del Este que K-Means asigna al Cluster 1 y Ward ubica en el Cluster 2—, lo cual es esperable dado que ambos algoritmos miden la similitud de forma distinta. Que la estructura principal se repita en los dos métodos no es algo menor: significa que los tres grupos no dependen de los supuestos de un algoritmo particular sino que están en los propios datos.
El ejercicio de segmentación sobre 42 países nos permite ver cosas que variable por variable no se dejarían ver.
Primero, el ACP sobre las 15 variables seleccionadas sintetizó la información en 3 componentes principales que acumulan el 69.6% de la varianza total. Cada componente tiene una lectura económica clara: el primero captura la dimensión de fragilidad inflacionaria y financiera, el segundo diferencia el tamaño del mercado laboral del grado de apertura comercial, y el tercero recoge la posición de cada economía frente a los precios internacionales relativos y el ciclo de crecimiento. Esta estructura factorial no es arbitraria, refleja las verdaderas tensiones que organizan las economías de la muestra.
Segundo, tanto K-Means como el método de Ward convergen en tres grupos con sentido económico, un bloque de economías OCDE con inflación controlada y crecimiento estable, un grupo de economías emergentes y en transición con mayor volatilidad y dinamismo, y Argentina como caso singular. Que dos algoritmos distintos lleguen a la misma partición no es un resultado menor: indica que esta estructura de grupos está en los datos, no en el método.
Tercero, y en respuesta directa al problema de investigación: los indicadores macroeconómicos estándar sí son suficientes para clasificar a la gran mayoría de los países en grupos coherentes y diferenciados. Pero también confirman que hay economías que no encajan en ninguna categoría estándar. Argentina no es un fallo del método, es exactamente lo que el problema de investigación anticipaba que es una trayectoria macroeconómica tan particular con inflación crónica, deuda externa elevada, política monetaria disruptiva que ningún otro país de la muestra comparte de forma simultánea. El análisis multivariado simplemente lo hace visible de forma objetiva.
Por último, el análisis tiene límites que conviene reconocer. Se trabajó con un corte transversal que resume el período en promedios, lo que puede ocultar variaciones cíclicas importantes. Países como Türkiye, que estaban en proceso de estabilización, quedan clasificados según su promedio y no según su trayectoria. Una extensión natural sería incorporar una dimensión temporal para seguir cómo evoluciona la pertenencia de cada país a los grupos a lo largo del tiempo.
OCDE (2021). La recuperación económica mundial prosigue, pero continúa siendo desigual. OCDE, París. https://www.oecd.org/en/about/news/press-releases/2021/09/la-recuperacion-economica-mundial-prosigue-pero-continua-siendo-desigual-asegura-la-ocde.html
OCDE (2024). OECD Economic Outlook, Volume 2024 Issue 2. OECD Publishing, París. https://doi.org/10.1787/d8814e8b-en
OCDE (2025). OECD Economic Outlook, Volume 2025 Issue 2. OECD Publishing, París. https://www.oecd.org/en/publications/oecd-economic-outlook-volume-2025-issue-2_9f653ca1-en.html
OCDE (2026). OECD Economic Outlook, Volume 2026 Issue 1. OECD Publishing, París. https://www.oecd.org/en/publications/oecd-economic-outlook-volume-2026-issue-1_2d1956f0-en.html
OCDE. Inflation and cost of living. https://www.oecd.org/en/topics/inflation-and-cost-of-living.html
OCDE. Global and regional development trends. https://www.oecd.org/en/topics/global-and-regional-development-trends.html
Informe elaborado con R y R Markdown. Datos: OCDE —
DatosEcon.xlsx.