La Organización para la Cooperación y el Desarrollo Económicos (OCDE) reúne información económica de países con niveles de desarrollo y estructuras productivas muy diferentes. Gracias a la estandarización de sus indicadores, es posible comparar economías avanzadas y emergentes utilizando una misma base de referencia.
Durante los últimos años, las economías del mundo han enfrentado desafíos importantes asociados a la recuperación posterior a la pandemia, el aumento de la inflación, los cambios en las tasas de interés y las transformaciones en las cadenas globales de suministro. Como consecuencia, se han hecho más evidentes las diferencias entre países en aspectos como el crecimiento económico, la estabilidad de precios y el desempeño del sector externo.
Analizar estas diferencias únicamente a través de indicadores individuales resulta limitado, esta limitación es justamente la que motiva el uso de técnicas de análisis multivariado: según Hair et al. (2019), cuando existen muchas variables relacionadas entre sí. Por esta razón, en este trabajo se utilizan técnicas de aprendizaje no supervisado para identificar patrones conjuntos dentro de los datos. En particular, se aplica el Análisis de Componentes Principales (ACP) para reducir la dimensionalidad de la información y posteriormente se emplean métodos de agrupamiento que permiten identificar conjuntos de países con características macroeconómicas similares.
El objetivo es comprender qué factores explican las principales diferencias entre las economías analizadas y determinar si existen perfiles económicos claramente diferenciados dentro de la muestra.
En primer lugar, utilizaremos el Análisis de Componentes Principales (ACP) para reducir las 15 variables originales a unos pocos ejes fundamentales que resuman el tamaño y el dinamismo de los países. Después aplicamos algoritmos de partición (k-means) y aglomerativos (método jerárquico de Ward) para construir una segmentación que nos permita identificar tipologías de países y entender mejor cómo se estructuran las asimetrías económicas a nivel global.
Los datos utilizados corresponden a un período caracterizado por importantes ajustes económicos a nivel mundial. Tras la recuperación posterior a la pandemia, muchos países enfrentaron simultáneamente presiones inflacionarias, incrementos en las tasas de interés y cambios en las dinámicas del comercio internacional.
La muestra incluye economías desarrolladas y emergentes con tamaños, niveles de ingreso y estructuras productivas muy diversos. Países como Estados Unidos, Alemania o Japón conviven en la base de datos con economías como Colombia, India, Chile o Argentina, lo que permite estudiar una amplia variedad de comportamientos macroeconómicos.
Las variables seleccionadas abarcan aspectos fundamentales del desempeño económico, incluyendo crecimiento, comercio exterior, consumo, inversión, desempleo e inflación. Cada una de ellas aporta información sobre una dimensión particular de la economía; sin embargo, su análisis conjunto resulta más útil para comprender las similitudes y diferencias existentes entre los países.
La diversidad de situaciones presentes en los datos convierte a esta base en un escenario adecuado para aplicar técnicas de análisis multivariado. Más que estudiar cada país de manera aislada, el interés está en identificar patrones comunes que permitan entender cómo se organizan las economías según sus características estructurales.
¿Es posible identificar grupos de países con perfiles macroeconómicos estructuralmente similares a partir de 15 indicadores de la OCDE mediante técnicas de análisis no supervisado, y cuáles son las dimensiones y variables que mejor explican las diferencias entre dichos grupos?
Para responder esta pregunta se emplea el Análisis de Componentes Principales como herramienta de reducción de dimensionalidad y posteriormente se aplican métodos de agrupamiento que permitan identificar conjuntos de países con características económicas comparables. De esta forma, se busca comprender mejor las diferencias estructurales existentes entre las economías incluidas en la muestra y determinar qué factores contribuyen con mayor fuerza a dichas diferencias.
La metodología de este estudio se organiza en varias fases, desde la preparación de los datos hasta la aplicación de técnicas de análisis multivariado. Primero se hizo la selección, depuración y estandarización de las variables económicas. Después se aplicó el ACP para reducir la dimensionalidad del conjunto de datos e identificar los ejes principales que explican la variabilidad de los indicadores. Por último, se aplicaron dos métodos de agrupamiento no supervisado —k-means y Ward— para segmentar los países en grupos con características económicas homogéneas. Este flujo de trabajo —reducción de dimensionalidad seguida de clustering— sigue la lógica recomendada por Hair et al. (2019) para conjuntos de datos con variables altamente correlacionadas, donde aplicar el agrupamiento directamente sobre las 15 variables originales podría sobreponderar las dimensiones más redundantes (como las distintas medidas de tamaño del PIB) frente a las menos redundantes.
Con esta metodología esperamos: reducir la complejidad del conjunto de datos identificando los ejes principales que explican su variabilidad; interpretar las componentes en términos de dimensiones clave del desempeño macroeconómico; agrupar los países en clusters según sus similitudes estructurales —por ejemplo, economías de gran tamaño con crecimiento nominal moderado, economías medianas con comportamiento típico, o economías emergentes con alta inflación y tipos de cambio elevados—; y visualizar los patrones que permitan comprender las dinámicas económicas globales y las asimetrías entre países.
El ACP es una técnica de reducción de dimensionalidad que transforma un conjunto de variables numéricas correlacionadas en un nuevo conjunto de variables no correlacionadas llamadas componentes principales (CP). Cada componente es una combinación lineal de las variables originales, construida de manera que el CP1 captura la mayor cantidad posible de varianza, el CP2 la mayor varianza restante siendo ortogonal al CP1, y así sucesivamente.
El ACP permite: (1) visualizar países y variables en un espacio de baja dimensión; (2) identificar qué variables están más correlacionadas entre sí; y (3) reducir el ruido y la redundancia antes de aplicar clustering. La estandarización previa es indispensable dado que la técnica es sensible a la escala de medición.
Para construir la segmentación recurrimos a dos estrategias de agrupamiento distintas y complementarias, lo que nos permitirá contrastar qué tan estables son los perfiles que encontremos.
Por una parte, K-means funciona mediante un proceso de asignación directa. El algoritmo divide la muestra en un número k de grupos fijos; sitúa unos puntos de referencia llamados centroides y va moviendo a cada país al grupo cuyo centro le quede más cerca matemáticamente. Este proceso se repite en bucle hasta que los centros se estabilizan. Para no elegir el número de grupos a ciegas, nos apoyamos en los criterios de la silueta y el gráfico del codo (WSS).
Por otra parte, el Método de Ward opera desde abajo hacia arriba mediante una estructura jerárquica (dendrograma). Empieza tratando a cada país como si fuera un grupo individual y, paso a paso, va uniendo a los países o bloques que más se parecen. Lo interesante de Ward es su criterio de fusión: en lugar de unirse solo por cercanía simple, se asocian buscando que el crecimiento de la varianza interna de los grupos sea el menor posible, garantizando que los clusters finales sean sumamente compactos y homogéneos.
La base de datos utilizada proviene de la OECD (Organisation for Economic Co-operation and Development) y contiene información macroeconómica de 42 países miembros plenos y socios estratégicos para un período de referencia reciente. La base original cuenta con 29 variables económicas (x1 a x29), de las cuales se seleccionaron 15 variables que cubren de manera representativa las principales dimensiones del desempeño económico: comercio exterior, tamaño del PIB, crecimiento, inflación, consumo, inversión, desempleo y tasas de interés.
El procesamiento incluyó:
datos <- read_excel("C:/Users/david/Downloads/DatosEcon.xlsx", sheet = "Data")
diccionario <- read_excel("C:/Users/david/Downloads/DatosEcon.xlsx", sheet = "Descripción")
variables_seleccionadas <- c("x1","x2","x3","x5","x9","x10","x11",
"x12","x17","x18","x19","x21","x22",
"x26","x29")
datos_sel <- datos %>%
select(Pais, all_of(variables_seleccionadas))
nombres <- c(
"Pais", "CtaCte_PIB", "TipoCambio", "Importaciones", "Exportaciones",
"PIB_nominal", "PIB_volumen", "PIB_PPP", "FormCapital",
"Crec_PIB_vol", "Crec_PIB_nom", "Crec_Deflactor",
"Crec_ConsPriv", "Crec_ConsGob", "Desempleo", "TasaInteres_CP"
)
colnames(datos_sel) <- nombres
cat("Datos faltantes:", sum(is.na(datos_sel)), "\n")
## Datos faltantes: 0
cat("Países:", nrow(datos_sel), "| Variables:", ncol(datos_sel) - 1)
## Países: 42 | Variables: 15
No hay datos faltantes en ninguna de las 15 variables seleccionadas, lo que simplifica el procesamiento.
datos_sel %>%
select(Pais) %>%
mutate(N = row_number()) %>%
select(N, Pais) %>%
kbl(
caption = "Países incluidos en el análisis",
col.names = c("N°", "País"), align = "cl"
) %>%
kable_styling(bootstrap_options = c("hover", "condensed", "responsive"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
row_spec(seq(1, nrow(datos_sel), 2), background = "#f0f7ff") %>%
row_spec(seq(2, nrow(datos_sel), 2), background = "#ffffff")
| N° | País |
|---|---|
| 1 | Australia |
| 2 | Austria |
| 3 | Belgium |
| 4 | Canada |
| 5 | Chile |
| 6 | Colombia |
| 7 | Czech Republic |
| 8 | Denmark |
| 9 | Estonia |
| 10 | Finland |
| 11 | France |
| 12 | Germany |
| 13 | Greece |
| 14 | Hungary |
| 15 | Iceland |
| 16 | Ireland |
| 17 | Israel |
| 18 | Italy |
| 19 | Japan |
| 20 | Korea |
| 21 | Luxembourg |
| 22 | Mexico |
| 23 | Netherlands |
| 24 | New Zealand |
| 25 | Norway |
| 26 | Poland |
| 27 | Portugal |
| 28 | Slovak Republic |
| 29 | Slovenia |
| 30 | Spain |
| 31 | Sweden |
| 32 | Switzerland |
| 33 | Türkiye |
| 34 | United Kingdom |
| 35 | United States |
| 36 | Argentina |
| 37 | Brazil |
| 38 | Croatia |
| 39 | India |
| 40 | Peru |
| 41 | Romania |
| 42 | SouthAfrica |
Las 15 variables cubren cinco dimensiones del desempeño macroeconómico. Elegimos una representación por cada ángulo importante: no tiene sentido incluir las cuatro variantes del PIB si están muy correlacionadas entre sí; es mejor tener una medida de tamaño, una de crecimiento real y una de precios.
data.frame(
Variable = c("CtaCte_PIB","TipoCambio","Importaciones","Exportaciones",
"PIB_nominal","PIB_volumen","PIB_PPP","FormCapital",
"Crec_PIB_vol","Crec_PIB_nom","Crec_Deflactor",
"Crec_ConsPriv","Crec_ConsGob","Desempleo","TasaInteres_CP"),
Cod = c("x1","x2","x3","x5","x9","x10","x11","x12",
"x17","x18","x19","x21","x22","x26","x29"),
Descripcion = c(
"Balance cuenta corriente (% del PIB)",
"Tipo de cambio (moneda nacional / USD)",
"Importaciones de bienes y servicios (volumen)",
"Exportaciones de bienes y servicios (volumen)",
"PIB nominal a precios de mercado",
"PIB en volumen a precios de mercado",
"PIB en volumen, USD a PPA constantes",
"Formación bruta de capital fijo (volumen)",
"Crecimiento del PIB en volumen (%)",
"Crecimiento del PIB nominal (%)",
"Crecimiento del deflactor del PIB — inflación (%)",
"Crecimiento del consumo privado (volumen, %)",
"Crecimiento del consumo del gobierno (volumen, %)",
"Tasa de desempleo (%)",
"Tasa de interés de corto plazo (%)"
),
Dimension = c("Sector externo","Sector externo","Sector externo","Sector externo",
"Tamaño económico","Tamaño económico","Tamaño económico","Tamaño económico",
"Crecimiento","Crecimiento","Precios","Precios","Precios",
"Condiciones laborales","Condiciones financieras")
) %>%
kbl(caption = "Variables seleccionadas y su dimensión analítica",
col.names = c("Variable","Código","Descripción","Dimensión"),
align = "llll") %>%
kable_styling(bootstrap_options = c("hover","condensed","responsive"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
column_spec(1, bold = TRUE, color = "#1a6e9e") %>%
row_spec(seq(1,15,2), background = "#f0f7ff")
| Variable | Código | Descripción | Dimensión |
|---|---|---|---|
| CtaCte_PIB | x1 | Balance cuenta corriente (% del PIB) | Sector externo |
| TipoCambio | x2 | Tipo de cambio (moneda nacional / USD) | Sector externo |
| Importaciones | x3 | Importaciones de bienes y servicios (volumen) | Sector externo |
| Exportaciones | x5 | Exportaciones de bienes y servicios (volumen) | Sector externo |
| PIB_nominal | x9 | PIB nominal a precios de mercado | Tamaño económico |
| PIB_volumen | x10 | PIB en volumen a precios de mercado | Tamaño económico |
| PIB_PPP | x11 | PIB en volumen, USD a PPA constantes | Tamaño económico |
| FormCapital | x12 | Formación bruta de capital fijo (volumen) | Tamaño económico |
| Crec_PIB_vol | x17 | Crecimiento del PIB en volumen (%) | Crecimiento |
| Crec_PIB_nom | x18 | Crecimiento del PIB nominal (%) | Crecimiento |
| Crec_Deflactor | x19 | Crecimiento del deflactor del PIB — inflación (%) | Precios |
| Crec_ConsPriv | x21 | Crecimiento del consumo privado (volumen, %) | Precios |
| Crec_ConsGob | x22 | Crecimiento del consumo del gobierno (volumen, %) | Precios |
| Desempleo | x26 | Tasa de desempleo (%) | Condiciones laborales |
| TasaInteres_CP | x29 | Tasa de interés de corto plazo (%) | Condiciones financieras |
estadisticas <- datos_sel %>%
select(-Pais) %>%
summarise(across(everything(),
list(Media = mean, Mediana = median,
Min = min, Max = max, SD = sd),
.names = "{.col}_{.fn}")) %>%
pivot_longer(everything(),
names_to = c("Variable", "Estadistico"),
names_sep = "_(?=[A-Za-z]+$)") %>%
pivot_wider(names_from = Estadistico, values_from = value)
estadisticas %>%
kbl(caption = "Estadísticas descriptivas de los indicadores económicos OECD",
digits = 2, align = "lccccc",
col.names = c("Variable", "Media", "Mediana", "Mínimo", "Máximo", "Desv. Est.")) %>%
kable_styling(bootstrap_options = c("hover", "condensed", "responsive"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
column_spec(1, bold = TRUE, color = "#1a6e9e") %>%
row_spec(seq(1, 15, 2), background = "#f0f7ff") %>%
row_spec(seq(2, 14, 2), background = "#ffffff") %>%
add_header_above(c(" " = 1, "Medidas descriptivas" = 5),
bold = TRUE, background = "#d0e8f7")
| Variable | Media | Mediana | Mínimo | Máximo | Desv. Est. |
|---|---|---|---|---|---|
| CtaCte_PIB | 1.010000e+00 | 3.600000e-01 | -7.280000e+00 | 1.491000e+01 | 5.080000e+00 |
| TipoCambio | 7.990000e+00 | 1.300000e+00 | 7.300000e-01 | 9.508000e+01 | 1.822000e+01 |
| Importaciones | 3.819741e+11 | 2.038763e+11 | 8.644998e+09 | 3.245332e+12 | 5.493589e+11 |
| Exportaciones | 3.704357e+11 | 2.173976e+11 | 8.082994e+09 | 2.257271e+12 | 4.488404e+11 |
| PIB_nominal | 1.068741e+14 | 2.384922e+12 | 3.135620e+10 | 2.071658e+15 | 3.699529e+14 |
| PIB_volumen | 9.137015e+13 | 1.930567e+12 | 2.601447e+10 | 1.915777e+15 | 3.310409e+14 |
| PIB_PPP | 1.545227e+12 | 5.341115e+11 | 1.884749e+10 | 2.052937e+13 | 3.230601e+12 |
| FormCapital | 2.366899e+13 | 3.753493e+11 | 8.332420e+09 | 5.731436e+14 | 9.288766e+13 |
| Crec_PIB_vol | 6.410000e+00 | 5.290000e+00 | 1.640000e+00 | 1.343000e+01 | 2.870000e+00 |
| Crec_PIB_nom | 1.297000e+01 | 1.068000e+01 | 7.600000e-01 | 7.018000e+01 | 1.137000e+01 |
| Crec_Deflactor | 6.080000e+00 | 3.070000e+00 | -8.700000e-01 | 5.415000e+01 | 9.120000e+00 |
| Crec_ConsPriv | 6.610000e+00 | 5.730000e+00 | 4.000000e-01 | 2.051000e+01 | 3.930000e+00 |
| Crec_ConsGob | 4.460000e+00 | 4.030000e+00 | 4.100000e-01 | 1.263000e+01 | 2.780000e+00 |
| Desempleo | 7.370000e+00 | 6.080000e+00 | 2.820000e+00 | 3.427000e+01 | 5.270000e+00 |
| TasaInteres_CP | 1.000000e+00 | 2.000000e-02 | -7.400000e-01 | 1.871000e+01 | 3.170000e+00 |
Lo más llamativo en las estadísticas es la enorme brecha entre el mínimo y el máximo en las variables de tamaño económico (PIB, importaciones, exportaciones), Esto no es ninguna sorpresa: no es lo mismo comparar el PIB de Estados Unidos con el de un país pequeño de la muestra, así que era de esperarse que estas variables tuvieran la mayor dispersión. Eso confirma que necesitamos estandarizar antes del ACP. También llama la atención el crecimiento del PIB nominal y el deflactor, donde algunos países tienen valores extremadamente altos Argentina y Türkiye son los casos más obvios, mientras la mayoría se mueve en rangos mucho más moderados.
En promedio, el crecimiento del PIB en volumen de la muestra es de aproximadamente 6,41%, el crecimiento del consumo privado es cercano al 6,61% y el del consumo del gobierno llega a un promedio de 4,46%. Aunque estas cifras puedan parecer altas para economías “desarrolladas”, hay que recordar que se trata de un promedio que incluye economías emergentes con tasas de crecimiento nominal elevadas, lo que infla el promedio general. En cualquier caso, esta heterogeneidad es justamente la razón por la que tiene sentido aplicar ACP y clustering: con tanta dispersión entre países, mirar variable por variable no permite ver con claridad qué países se parecen entre sí.
p_boxplot <- datos_sel %>%
select(-Pais) %>%
scale() %>%
as.data.frame() %>%
pivot_longer(everything(), names_to = "Variable", values_to = "Valor") %>%
ggplot(aes(x = Variable, y = Valor)) +
geom_boxplot(fill = "#00AFBB") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Variables estandarizadas", y = "Valor (z-score)")
ggplotly(p_boxplot)
Los boxplots de las variables estandarizadas confirman lo que ya se intuía en la tabla de estadísticas descriptivas: varias variables presentan una dispersión considerable y bastantes valores atípicos, lo que refleja la heterogeneidad económica de la muestra. Las variables de PIB, importaciones, exportaciones y formación bruta de capital son las que muestran mayor variabilidad, lo cual tiene sentido porque son justamente las que dependen más directamente del tamaño absoluto de cada economía.
En cuanto a los valores atípicos puntuales, destacan Estados Unidos y Alemania, con niveles muy por encima del promedio en las variables de comercio exterior y tamaño de la economía —algo esperable dado que son dos de las economías más grandes del mundo—. También resaltan Argentina y Türkiye, cuyos altos valores en crecimiento nominal, deflactor del PIB y tasas de interés las separan claramente del resto de países, en línea con sus conocidos episodios de inflación elevada en los últimos años. Por su parte, Sudáfrica aparece como un valor atípico en la tasa de desempleo, mientras que Irlanda, Noruega, Chile y Colombia muestran comportamientos extremos en indicadores puntuales como el saldo de cuenta corriente o las tasas de crecimiento.
En general, la presencia de estas observaciones extremas en varias variables confirma que existen diferencias estructurales importantes entre las economías estudiadas, y refuerza la necesidad de aplicar técnicas de reducción de dimensión y agrupamiento que permitan encontrar patrones comunes entre los países sin que estos valores atípicos distorsionen el análisis variable por variable.
datos_num <- datos_sel %>% select(-Pais)
datos_z <- scale(datos_num)
rownames(datos_z) <- datos_sel$Pais
matriz_cor <- cor(datos_sel %>% select(-Pais))
corrplot(matriz_cor,
method = "color", type = "upper",
addCoef.col = "black", number.cex = 0.55,
tl.col = "black", tl.cex = 0.75,
col = colorRampPalette(c("#1a6e9e", "white", "#FC4E07"))(200),
title = "Matriz de correlación - Indicadores económicos OECD",
mar = c(0, 0, 2, 0))
La matriz de correlación deja ver relaciones bastante claras entre
varias de las variables seleccionadas. Entre las correlaciones positivas
más altas están las que se dan entre el PIB nominal y
el PIB en volumen, y entre estas dos y la
formación bruta de capital, lo que tiene sentido: los
países con economías más grandes también tienden a invertir más en
términos absolutos. De forma parecida, importaciones y
exportaciones están altamente correlacionadas, lo cual
era de esperarse porque las economías con mayor actividad comercial
suelen registrar simultáneamente mayores flujos de compra y de
venta.
También aparece una asociación fuerte entre el crecimiento del PIB nominal y el crecimiento del deflactor del PIB, lo que sugiere que ambos indicadores están respondiendo a factores comunes relacionados con la dinámica de precios y la actividad económica —dicho de otra forma, cuando sube mucho la inflación, el crecimiento nominal del PIB también tiende a inflarse, aunque el crecimiento real no haya cambiado tanto—. Además, el crecimiento del PIB en volumen se correlaciona positivamente con el crecimiento del consumo privado, lo que indica que un mayor dinamismo económico suele venir acompañado de un mayor gasto de los hogares.
En el otro extremo, algunas variables presentan correlaciones negativas moderadas, como el saldo de cuenta corriente frente al crecimiento del consumo privado, lo que sugiere que un mayor consumo interno puede estar asociado con una reducción del saldo externo en algunos países. Aun así, la mayoría de las correlaciones negativas encontradas son de magnitud baja y no parecen ser un patrón dominante en los datos.
En conjunto, la existencia de varias correlaciones altas indica que hay información redundante entre algunos indicadores, sobre todo entre las variables de tamaño económico y comercio internacional. Según Hair et al. (2019), este es exactamente el escenario en el que el ACP aporta más valor: cuando varias variables miden, en el fondo, aspectos parecidos de un mismo fenómeno subyacente en este caso, el tamaño de la economía, tiene más sentido resumirlas en un componente común que tratarlas como 15 dimensiones independientes. Esto es justamente lo que justifica aplicar el Análisis de Componentes Principales (ACP): en vez de seguir trabajando con 15 variables que en parte se repiten entre sí, el ACP permite resumir esa información en un número reducido de componentes, conservando la mayor parte de la variabilidad de los datos y facilitando después la identificación de grupos de países con características económicas similares.
res.pca <- prcomp(datos_z, scale = TRUE)
eig.val <- get_eigenvalue(res.pca)
res.var <- get_pca_var(res.pca)
res.ind <- get_pca_ind(res.pca)
pct1 <- round(eig.val$variance.percent[1], 1)
pct2 <- round(eig.val$variance.percent[2], 1)
En términos prácticos, el ACP nos sirve para resolver un problema de exceso de información. Al tener quince variables e indicadores que en el fondo miden aspectos muy parecidos (como las distintas versiones del PIB o los flujos de importación y exportación), meterlas todas juntas en un modelo distorsionaría cualquier cálculo de distancia. Lo que hace el ACP es tomar este bloque de variables correlacionadas y transformarlo en un nuevo conjunto de ejes independientes entre sí, llamados componentes principales.
El primer componente (CP1) se encargará de absorber la mayor parte posible de la variabilidad que hay en la muestra, el segundo (CP2) recogerá el máximo de la información restante de forma perpendicular al primero, y así sucesivamente. De este modo, en lugar de arrastrar quince dimensiones, podemos proyectar a los países en un plano bidimensional, eliminando el ruido y la redundancia antes de clasificar las observaciones. Dado que el algoritmo trabaja evaluando distancias geométricas, un paso obligatorio es la estandarización previa de los datos, evitando que las variables con magnitudes numéricas más grandes absorban a las demás.
eig.val %>%
as.data.frame() %>%
rownames_to_column("Componente") %>%
mutate(across(where(is.numeric), round, 3)) %>%
kbl(caption = "Eigenvalores y varianza explicada por componente",
col.names = c("Componente", "Eigenvalor", "% Varianza", "% Varianza acumulada"),
align = "lccc") %>%
kable_styling(bootstrap_options = c("hover", "condensed"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
row_spec(1:5, background = "#f0f7ff") %>%
column_spec(1, bold = TRUE, color = "#1a6e9e")
| Componente | Eigenvalor | % Varianza | % Varianza acumulada |
|---|---|---|---|
| Dim.1 | 3.979 | 26.529 | 26.529 |
| Dim.2 | 3.061 | 20.409 | 46.938 |
| Dim.3 | 2.553 | 17.021 | 63.959 |
| Dim.4 | 1.625 | 10.835 | 74.794 |
| Dim.5 | 1.295 | 8.633 | 83.427 |
| Dim.6 | 0.811 | 5.404 | 88.831 |
| Dim.7 | 0.656 | 4.371 | 93.202 |
| Dim.8 | 0.460 | 3.068 | 96.270 |
| Dim.9 | 0.271 | 1.803 | 98.073 |
| Dim.10 | 0.190 | 1.268 | 99.341 |
| Dim.11 | 0.071 | 0.476 | 99.817 |
| Dim.12 | 0.022 | 0.150 | 99.967 |
| Dim.13 | 0.005 | 0.031 | 99.998 |
| Dim.14 | 0.000 | 0.001 | 99.999 |
| Dim.15 | 0.000 | 0.001 | 100.000 |
library(highcharter)
library(magrittr)
if (inherits(res.pca, "PCA")) {
var_explicada <- res.pca$eig[, 2]
} else {
var_explicada <- (res.pca$sdev^2 / sum(res.pca$sdev^2)) * 100
}
df_var <- data.frame(
Componente = paste0("Dim.", 1:length(var_explicada)),
Porcentaje = round(var_explicada, 1)
)
highchart() %>%
hc_title(text = "Varianza explicada por componente principal") %>%
hc_xAxis(categories = df_var$Componente) %>%
hc_yAxis(title = list(text = "Porcentaje de varianzas"), max = 35) %>%
hc_add_series(
type = "column",
data = df_var$Porcentaje,
name = "Varianza",
color = "#1a6e9e",
dataLabels = list(enabled = TRUE, format = "{y}%")
) %>%
hc_add_series(
type = "line",
data = df_var$Porcentaje,
name = "Acumulado",
color = "#FC4E07"
)
La tabla de eigenvalores permite observar el aporte de cada componente a la variabilidad total de la base de datos. Como es habitual en este tipo de análisis, los primeros componentes concentran la mayor parte de la información, mientras que los siguientes aportan cada vez menos.
Para determinar cuántos componentes conservar, se utilizó el criterio de Kaiser, el cual recomienda retener aquellos componentes cuyo eigenvalor sea superior a 1. Bajo este criterio, los tres primeros componentes resultan relevantes, ya que explican una proporción importante de la variabilidad total y conservan gran parte de la información contenida en las variables originales.
Esto se nota también en el scree plot donde se observa una disminución pronunciada de la varianza explicada durante los primeros componentes y una tendencia mucho más estable a partir del tercero. Esto indica que los componentes posteriores aportan información adicional, pero de manera cada vez más limitada.
fviz_contrib(res.pca, choice = "var", axes = 1, top = 15,
fill = "#1a6e9e", color = "white",
title = paste0("Contribución al CP1 (", pct1, "% de la varianza) — Dinamismo económico e inflacionario")) +
labs(x = "Variables", y = "Contribución (%)") +
theme_minimal(base_size = 11) +
theme(plot.title = element_text(face = "bold", size = 11),
axis.text.x = element_text(angle = 30, hjust = 1)) +
geom_hline(yintercept = 100/15, linetype = "dashed",
color = "#FC4E07", linewidth = 0.8) +
annotate("text", x = 1, y = 100/15 + 0.5,
label = "Contribución media esperada", color = "#FC4E07", hjust = 0, size = 3)
fviz_contrib(res.pca, choice = "var", axes = 2, top = 15,
fill = "#E7B800", color = "white",
title = paste0("Contribución al CP2 (", pct2, "% de la varianza) — Tamaño y escala económica")) +
labs(x = "Variables", y = "Contribución (%)") +
theme_minimal(base_size = 11) +
theme(plot.title = element_text(face = "bold", size = 11),
axis.text.x = element_text(angle = 30, hjust = 1)) +
geom_hline(yintercept = 100/15, linetype = "dashed",
color = "#FC4E07", linewidth = 0.8) +
annotate("text", x = 1, y = 100/15 + 0.5,
label = "Contribución media esperada", color = "#FC4E07", hjust = 0, size = 3)
La línea roja punteada de los gráficos representa la contribución promedio esperada si todas las variables participaran por igual en la construcción de cada componente. Por lo tanto, aquellas variables que superan este valor pueden considerarse especialmente importantes para interpretar el significado de cada eje factorial.
El análisis de contribuciones muestra que el primer componente principal (CP1) está asociado principalmente con variables relacionadas con el crecimiento económico y la evolución de los precios. Entre las de mayor contribución se encuentran el crecimiento del PIB nominal, el crecimiento del deflactor del PIB, el crecimiento del consumo privado y el crecimiento del PIB en volumen. En conjunto, estas variables describen economías con mayor dinamismo económico, aunque también con mayores presiones inflacionarias. Por esta razón, el CP1 puede interpretarse como una dimensión vinculada al dinamismo económico e inflacionario.
El segundo componente principal (CP2), en cambio, está dominado por variables de tamaño absoluto de las economías: el PIB nominal (29,4%), el PIB en volumen (29,0%) y la formación bruta de capital fijo (28,0%). Estas variables permiten diferenciar países según su escala productiva y capacidad de inversión, independientemente de su comportamiento inflacionario o de crecimiento reciente. En consecuencia, el CP2 puede interpretarse como una dimensión relacionada con la escala y el tamaño económico.
var_coord <- as.data.frame(res.var$coord[, 1:2])
var_coord$contrib <- rowSums(res.var$contrib[, 1:2])
var_coord$Variable <- rownames(var_coord)
ggplot(var_coord, aes(x = Dim.1, y = Dim.2, color = contrib)) +
geom_path(
data = data.frame(x = cos(seq(0, 2*pi, length.out = 300)),
y = sin(seq(0, 2*pi, length.out = 300))),
aes(x = x, y = y), color = "grey60", linewidth = 0.5, inherit.aes = FALSE
) +
geom_segment(aes(xend = 0, yend = 0),
arrow = arrow(length = unit(0.22, "cm")),
alpha = 0.85, linewidth = 0.7) +
geom_point(size = 2.5) +
geom_text_repel(aes(label = Variable), size = 3.5, color = "black",
segment.color = "grey70", max.overlaps = 20) +
scale_color_gradient(low = "#00AFBB", high = "#FC4E07") +
coord_fixed() +
theme_minimal(base_size = 12) +
labs(title = "Círculo de correlación de variables",
subtitle = "Color = contribución acumulada CP1 + CP2",
x = paste0("CP1 (", pct1, "%)"),
y = paste0("CP2 (", pct2, "%)"),
color = "Contrib (%)")
El círculo de correlación permite visualizar cómo se relacionan las variables entre sí y con los componentes principales. En él se observa que las variables vinculadas al crecimiento nominal, la inflación y el consumo tienden a agruparse en una misma dirección, lo que indica que mantienen una relación estrecha y contribuyen conjuntamente a la construcción del primer componente.
Por otro lado, variables como el PIB, las exportaciones, las importaciones y la formación de capital aparecen más asociadas al segundo componente, reflejando diferencias relacionadas con el tamaño y la capacidad productiva de las economías. Esto sugiere que la escala económica constituye una dimensión distinta del comportamiento inflacionario y del crecimiento de corto plazo.
También se aprecia que variables como la tasa de desempleo y la tasa de interés presentan una relación menos clara con los dos componentes principales. Esto puede indicar que su comportamiento depende de factores adicionales que no quedan completamente representados en los primeros ejes factoriales.
fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Países en el plano factorial (CP1 vs CP2)")
coord_ind <- as.data.frame(res.pca$x[, 1:2])
coord_ind$Pais <- rownames(coord_ind)
coord_ind$N <- seq_len(nrow(coord_ind))
coord_ind$cos2 <- rowSums(res.ind$cos2[, 1:2])
plot_ly(coord_ind,
x = ~PC1, y = ~PC2,
text = ~paste0(N, ". ", Pais),
color = ~cos2,
colors = c("#00AFBB", "#E7B800", "#FC4E07"),
type = "scatter", mode = "markers+text",
textposition = "top center",
marker = list(size = 7)) %>%
layout(
title = paste0("Países en el plano factorial interactivo (",
round(pct1 + pct2, 1), "% varianza explicada)"),
xaxis = list(title = paste0("CP1 (", pct1, "%)")),
yaxis = list(title = paste0("CP2 (", pct2, "%)"))
)
coord_var_bi <- as.data.frame(res.pca$rotation[, 1:2])
coord_var_bi$Variable <- rownames(coord_var_bi)
max_ind <- max(abs(coord_ind[, 1:2]))
max_var <- max(abs(coord_var_bi[, 1:2]))
escala <- max_ind / max_var * 0.75
coord_var_bi[, 1:2] <- coord_var_bi[, 1:2] * escala
fig_biplot <- plot_ly(type = "scatter", mode = "markers+text")
fig_biplot <- fig_biplot %>%
add_trace(data = coord_ind,
x = ~PC1, y = ~PC2,
text = ~paste0(N, ". ", Pais),
color = ~cos2,
colors = c("#00AFBB", "#E7B800", "#FC4E07"),
mode = "markers+text",
textposition = "top center",
marker = list(size = 6, opacity = 0.8),
name = "Países")
for (i in seq_len(nrow(coord_var_bi))) {
fig_biplot <- fig_biplot %>%
add_trace(x = c(0, coord_var_bi$PC1[i]),
y = c(0, coord_var_bi$PC2[i]),
mode = "lines+text",
text = c("", coord_var_bi$Variable[i]),
textposition = "top center",
line = list(color = "#FC4E07", width = 1.5),
showlegend = FALSE,
name = coord_var_bi$Variable[i])
}
fig_biplot %>%
layout(
title = paste0("Biplot interactivo — Países y variables económicas OECD (",
round(pct1 + pct2, 1), "% varianza)"),
xaxis = list(title = paste0("CP1 (", pct1, "%)")),
yaxis = list(title = paste0("CP2 (", pct2, "%)")),
showlegend = TRUE
)
En el gráfico de individuos se ve que la mayoría de los países se agrupa cerca del origen del plano factorial, lo que sugiere que comparten características económicas relativamente parecidas en las variables consideradas. Dicho de otro modo: para la mayoría de los 42 países, ninguna de las 15 variables es tan extrema como para alejarlos mucho del promedio del grupo. Pero también hay países que se alejan bastante del centro, lo que indica perfiles económicos bien diferenciados del resto.
Sobre el CP1 destacan Argentina y Türkiye, ubicadas en el extremo positivo, lo que refleja su alto dinamismo nominal e inflacionario. En el extremo negativo aparecen Estados Unidos, Alemania, Japón y Corea, algo que es coherente con lo que ya habíamos visto en el círculo de correlación: como importaciones y exportaciones tienen cargas negativas en el CP1, las grandes economías comerciales —con volúmenes de comercio exterior enormes— se desplazan hacia la izquierda del eje no porque tengan bajo crecimiento, sino porque su perfil está dominado por el tamaño de sus flujos comerciales.
En el CP2 sobresale especialmente Corea, que tiene la mayor distancia respecto al resto de países, seguida por Colombia, ambas claramente separadas del grupo principal. Esto sugiere que estos dos países tienen rasgos particulares en algunas de las variables asociadas al crecimiento, consumo, desempleo o tasas de interés, que terminan contribuyendo bastante a la variabilidad que explica este componente.
El color asociado al cos² ayuda a identificar qué países están mejor representados por estos dos primeros componentes. Corea, Japón, Colombia, Suiza, Argentina y Alemania tienen valores altos de cos², lo que significa que su posición en el plano resume bien la información de las variables originales. Los países que están cerca del origen, en cambio, quedan representados de forma menos precisa con solo estos dos componentes —no porque tengan menos información, sino porque esa información probablemente está más repartida entre los componentes 3, 4 o 5, que aquí no estamos viendo—.
Antes incluso de aplicar los métodos formales de agrupamiento, el plano factorial ya deja ver una tendencia a formar grupos de economías con perfiles parecidos, mientras que Argentina, Türkiye, Corea, Estados Unidos y Colombia aparecen más aislados por sus características económicas particulares. Esto anticipa, en buena medida, la estructura de clústeres que se identifica más adelante con k-means y Ward.
Siguiendo el código guía del curso, usamos FactoClass para combinar el ACP con el método jerárquico de Ward en un solo flujo de trabajo. Esto nos permite visualizar directamente cómo se relacionan países y variables en el plano factorial.
library(FactoClass)
datos_z_df <- as.data.frame(datos_z)
resultado_FC <- FactoClass(datos_z_df, dudi.pca,
k.clust = 3, scanFC = FALSE)
## The number of retained axes for factorial analysis is 2
##
## The number of axes for clustering is 10
## Look the histogram of 25 indexes
## Partition in 3 clusters
grupos_FC2 <- resultado_FC$cluster
plot(resultado_FC$dudi)
s.corcircle(resultado_FC$dudi$co)
s.label(resultado_FC$dudi$li, label = rownames(datos_z_df))
s.label(resultado_FC$dudi$co, xax = 1, yax = 2,
sub = "Componente 1 y 2", possub = "bottomright")
scatter(resultado_FC$dudi, xax = 1, yax = 2)
s.class(resultado_FC$dudi$li,
fac = factor(grupos_FC2),
col = c("#1a6e9e", "#E7B800", "#FC4E07"),
sub = "Componentes 1 y 2", possub = "bottomright")
resultado_FC$carac.cont
## class: 1
## Test.Value Class.Mean Frequency Global.Mean
## Crec_ConsGob -2.068 -0.143 35 0
## FormCapital -2.981 -0.206 35 0
## TasaInteres_CP -3.043 -0.210 35 0
## PIB_volumen -3.169 -0.219 35 0
## TipoCambio -3.222 -0.222 35 0
## PIB_nominal -3.394 -0.234 35 0
## Crec_Deflactor -3.427 -0.236 35 0
## Crec_PIB_vol -3.672 -0.253 35 0
## Crec_ConsPriv -3.983 -0.275 35 0
## Crec_PIB_nom -4.013 -0.277 35 0
## ------------------------------------------------------------
## class: 2
## Test.Value Class.Mean Frequency Global.Mean
## Crec_ConsPriv 4.568 1.727 6 0
## Crec_PIB_nom 4.515 1.707 6 0
## Crec_PIB_vol 4.259 1.610 6 0
## Crec_Deflactor 3.823 1.445 6 0
## TipoCambio 3.348 1.265 6 0
## TasaInteres_CP 3.262 1.233 6 0
## Crec_ConsGob 2.017 0.762 6 0
## ------------------------------------------------------------
## class: 3
## Test.Value Class.Mean Frequency Global.Mean
## FormCapital 5.987 5.915 1 0
## PIB_volumen 5.578 5.511 1 0
## PIB_nominal 5.375 5.311 1 0
datos_z_df <- as.data.frame(datos_z)
resultado_FC <- FactoClass(datos_z_df, dudi.pca,
k.clust = 3, scanFC = FALSE)
## The number of retained axes for factorial analysis is 2
##
## The number of axes for clustering is 10
## Look the histogram of 25 indexes
## Partition in 3 clusters
grupos_FC2 <- resultado_FC$cluster
datos_sel$Pais[grupos_FC2 == 3]
## [1] "Korea"
Como chequeo adicional de la segmentación, aplicamos FactoClass, que integra en un solo procedimiento el ACP y la clusterización jerárquica de Ward sobre los ejes factoriales retenidos. La diferencia frente al análisis principal —que usó solo los dos primeros componentes para el clustering— es que FactoClass construye la partición sobre los 10 primeros ejes factoriales, lo que la hace más sensible a diferencias de menor varianza entre países que podrían pasar desapercibidas si solo miráramos el plano CP1-CP2.
El resultado confirma la robustez de dos de los tres grupos que ya habíamos identificado: un Cluster 1 de 35 países con perfil macroeconómico moderado (todas las variables con media negativa respecto al promedio global), y un Cluster 2 de 6 países —Argentina, Türkiye, Chile, Colombia, India y Perú— caracterizado por alto crecimiento nominal, inflación elevada y tipo de cambio depreciado. Este segundo grupo coincide exactamente con el Cluster 3 de economías emergentes que obtuvimos con k-means y Ward, lo cual es una buena señal de que ese grupo no es un artefacto de un método en particular.
La diferencia más llamativa es que FactoClass aísla a Corea en un cluster propio (Cluster 3), con valores extremadamente altos en formación de capital, PIB en volumen y PIB nominal —entre 5,3 y 5,9 desviaciones estándar por encima de la media—. Esto coincide con lo que ya se había observado en el dendrograma de Ward del análisis principal, donde Corea también se separaba del resto de grandes economías a la mayor distancia de fusión. Que dos métodos distintos, usando un número distinto de ejes factoriales, lleguen a la misma conclusión sobre Corea refuerza la idea de que no se trata de una casualidad del algoritmo, sino de un caso atípico genuino: Corea tiene una combinación de tamaño económico e indicadores de inversión que no comparte ni siquiera con las demás grandes economías del Cluster 1 (Alemania, Japón, Estados Unidos).
set.seed(123)
fviz_nbclust(datos_z, kmeans, method = "wss") +
labs(title = "Método del codo — Número óptimo de clusters")
set.seed(123)
fviz_nbclust(datos_z, kmeans, method = "silhouette") +
labs(title = "Método de la silueta — K-means")
fviz_nbclust(datos_z, hcut, method = "silhouette") +
labs(title = "Método de la silueta — Clustering jerárquico")
El método del codo muestra una caída marcada de la suma de cuadrados intra-cluster entre k=1 y k=4, y a partir de ahí la curva se aplana de forma más gradual. Esto sugiere que entre 3 y 4 grupos se captura la mayor parte de la reducción de varianza disponible, sin que agregar más clusters aporte mucho más.
El método de la silueta, propuesto originalmente por Kaufman y Rousseeuw (2005) como criterio para evaluar la calidad de una partición, aplicado a k-means alcanza su máximo en k=4 (ancho promedio ≈0,51), con k=3 prácticamente empatado en segundo lugar (≈0,51 también) y k=2 algo más abajo (≈0,45). La silueta del clustering jerárquico, en cambio, tiene su máximo en k=2 (≈0,44), con k=3 y k=4 muy cerca entre sí (≈0,42-0,43). En conjunto, esto indica que pasar de dos a cuatro grupos no representa una pérdida importante de cohesión interna, así que en principio cualquiera de esos valores sería defendible desde el punto de vista puramente estadístico.
Dicho esto, aunque la silueta de k-means sugiere que k=4 podría ser ligerísimamente mejor, decidimos trabajar con k=3 por razones de interpretabilidad económica y de consistencia entre métodos. Con k=4 el grupo de economías emergentes (Cluster 3) tendería a partirse en subgrupos sin que exista una distinción macroeconómica clara entre ellos —es decir, estaríamos separando países que en la práctica comparten el mismo perfil de alta inflación y alto crecimiento nominal solo porque el algoritmo encuentra una diferencia estadística marginal, no porque exista una diferencia económica relevante—. En cambio, k=3 produce una partición con sentido económico evidente: grandes economías desarrolladas, economías medianas y avanzadas, y economías emergentes con alta inflación. Esta decisión se apoya además en la alta concordancia que se observa entre k-means y Ward trabajando con k=3 (más adelante se detalla esta comparación), lo que confirma que esta partición refleja estructuras genuinas en los datos y no es solo una elección arbitraria de los autores.
set.seed(123)
k <- 3
modelo_kmeans <- kmeans(datos_z, centers = k, nstart = 25)
fviz_cluster(modelo_kmeans, data = datos_z,
repel = TRUE,
ellipse.type = "convex",
palette = c("#1a6e9e", "#E7B800", "#FC4E07"),
ggtheme = theme_minimal(),
main = "Clusters de países (k-means) en plano PCA")
datos_kmeans <- datos_sel %>%
mutate(cluster_kmeans = factor(modelo_kmeans$cluster))
distancias <- dist(datos_z, method = "euclidean")
modelo_ward <- hclust(distancias, method = "ward.D2")
fviz_dend(modelo_ward,
k = k,
cex = 0.6,
k_colors = c("#1a6e9e", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE,
rect = TRUE,
rect_border = c("#1a6e9e", "#E7B800", "#FC4E07"),
rect_fill = TRUE,
main = "Dendrograma — Método de Ward",
xlab = "Países",
ylab = "Distancia (Ward.D2)")
clusters_ward <- cutree(modelo_ward, k = k)
datos_final <- datos_kmeans %>%
mutate(cluster_ward = factor(clusters_ward))
El dendrograma obtenido mediante el método de Ward.D2 muestra con claridad la formación de tres grupos diferenciados.
El Cluster 1 (azul): es el más numeroso y agrupa a la gran mayoría de los países — incluyendo United States, Germany, Japan, SouthAfrica, India y la mayor parte de las economías europeas —, que se fusionan progresivamente a distancias relativamente bajas, indicando perfiles macroeconómicos similares entre sí.
El Cluster 2 (amarillo): está conformado únicamente por Korea, que permanece aislada durante gran parte del proceso jerárquico y se une al grupo principal solo a una distancia considerablemente alta, cercana a 15 en la escala Ward.D2. Su separación refleja que Korea presenta una combinación particular de indicadores especialmente en las variables de tamaño ecnómico y PIB que la diferencia estructuralmente del resto de países.
El Cluster 3 (naranja): agrupa a Colombia, Chile, Perú, Türkiye y Argentina, economías que comparten un perfil de alto crecimiento nominal y presiones inflacionarias elevadas. Estas economías se fusionan entre sí a distancias relativamente bajas, evidenciando una alta similitud interna, y se unen al resto de países solo en la última etapa del dendrograma a la mayor distancia de fusión, lo que confirma que constituyen un grupo claramente diferenciado.
Es importante señalar que la asignación de Korea difiere entre los dos métodos: mientras Ward la identifica como un cluster propio dada su distancia euclidiana respecto al resto, k-means la incorpora al grupo de grandes economías desarrolladas junto con Germany, Japan y United States, ya que su centroide más cercano corresponde a ese grupo. Esta discrepancia es esperable y refleja las diferencias algorítmicas entre ambos métodos: Ward prioriza la distancia mínima de fusión, mientras que k-means optimiza la compacidad interna de los grupos.
table(KMeans = datos_final$cluster_kmeans,
Ward = datos_final$cluster_ward) %>%
kbl(caption = "Tabla de contingencia: K-means vs Ward") %>%
kable_styling(bootstrap_options = c("hover", "condensed"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white")
| 1 | 2 | 3 |
|---|---|---|
| 3 | 0 | 1 |
| 32 | 0 | 0 |
| 1 | 5 | 0 |
La tabla de contingencia entre k-means y Ward es una forma directa de evaluar qué tan consistente es la segmentación que obtuvimos. Al revisar los resultados, 40 de los 42 países quedan clasificados de forma consistente en ambos métodos, lo que da una concordancia de 95,2%. Es una cifra bastante alta para dos algoritmos que funcionan de forma tan distinta, y sugiere que la estructura de agrupamiento que encontramos no depende del método que se use, sino que refleja algo real en los datos.
El grupo más estable es el Cluster 2 de economías medianas y avanzadas: los 32 países de este grupo reciben exactamente la misma asignación en los dos métodos, sin ninguna discrepancia. Esto da una idea de que este grupo tiene una cohesión interna bastante alta y que sus fronteras frente a los otros dos clusters son claras en el espacio de variables estandarizadas.
Las únicas dos discrepancias involucran a países con perfiles algo atípicos dentro de su propio grupo. Corea es asignada por k-means al Cluster 1 de grandes economías —porque su centroide más cercano corresponde a ese grupo—, mientras que Ward la separa en un cluster propio por su distancia euclidiana extrema en las variables de tamaño económico y formación de capital, donde llega a registrar valores de entre 5 y 6 desviaciones estándar por encima de la media. India, por su parte, es asignada por k-means al Cluster 3 de economías emergentes, pero Ward la incorpora al grupo principal, probablemente porque su perfil inflacionario, aunque elevado, no llega a los niveles tan extremos de Argentina o Türkiye.
Como la numeración de los clusters no es la misma en ambos métodos (el “Cluster 1” de k-means no necesariamente corresponde al “Cluster 1” de Ward), la comparación hay que hacerla en términos de qué países quedan juntos, no de qué número de cluster les toca. Con esa salvedad, la concordancia de 95,2% respalda bastante bien la validez de la segmentación en tres grupos, y sugiere que las diferencias que sí aparecen entre clusters no son un capricho del algoritmo, sino estructuras que realmente están presentes en los datos macroeconómicos.
dudi_obj <- dudi.pca(as.data.frame(datos_z), scannf = FALSE, nf = 2)
xy <- dudi_obj$li[, 1:2]
colnames(xy) <- c("Dim1", "Dim2")
col_clusters <- c("#1a6e9e", "#E7B800", "#FC4E07")
s.class(xy,
fac = factor(modelo_kmeans$cluster),
xax = 1, yax = 2,
col = col_clusters,
grid = FALSE, cell = 0, clabel = 0,
cstar = 1, cpoint = 1.8,
addaxes = TRUE, axesell = FALSE,
sub = paste0("CP1 (", pct1, "%) y CP2 (", pct2, "%)"),
possub = "bottomright")
text(xy[,1], xy[,2],
labels = seq_len(nrow(xy)),
cex = 0.9,
font = 2,
col = col_clusters[modelo_kmeans$cluster])
for (i in 1:k) {
inds <- which(modelo_kmeans$cluster == i)
if (length(inds) >= 3) {
dataEllipse(xy[inds, 1], xy[inds, 2],
add = TRUE, levels = 0.95,
plot.points = FALSE, lwd = 2, lty = 1,
col = adjustcolor(col_clusters[i], alpha.f = 0.9),
fill = TRUE, fill.alpha = 0.08)
}
}
centroides <- aggregate(xy, by = list(Cluster = modelo_kmeans$cluster), FUN = mean)
points(centroides[,2], centroides[,3], pch = 16, cex = 1.8, col = "black")
text(centroides[,2], centroides[,3],
labels = centroides[,1], col = "white", cex = 1.2, font = 2)
El siguiente gráfico interactivo muestra la misma segmentación de tres clusters obtenida con k-means que se ve en el gráfico estático con elipses de confianza al 95%. La diferencia es que aquí se puede pasar el cursor sobre cada punto para identificar el país directamente, sin tener que ir y venir a la tabla de referencia numérica.
# Datos para el gráfico interactivo de clusters
xy_plotly <- as.data.frame(xy)
xy_plotly$Pais <- datos_sel$Pais
xy_plotly$N <- seq_len(nrow(xy_plotly))
xy_plotly$Cluster <- factor(modelo_kmeans$cluster)
plot_ly(xy_plotly,
x = ~Dim1, y = ~Dim2,
text = ~paste0(N, ". ", Pais),
color = ~Cluster,
colors = c("#1a6e9e", "#E7B800", "#FC4E07"),
type = "scatter", mode = "markers+text",
textposition = "top center",
marker = list(size = 9)) %>%
layout(
title = paste0("Clusters de países en el plano factorial (versión interactiva) — ",
round(pct1 + pct2, 1), "% varianza explicada"),
xaxis = list(title = paste0("CP1 (", pct1, "%)")),
yaxis = list(title = paste0("CP2 (", pct2, "%)")),
showlegend = TRUE
)
tabla_paises_num <- datos_sel %>%
select(Pais) %>%
mutate(N = row_number(),
Cluster = factor(modelo_kmeans$cluster),
Grupo = case_when(
Cluster == 1 ~ "Grandes economías desarrolladas",
Cluster == 2 ~ "Economías medianas y avanzadas",
Cluster == 3 ~ "Economías emergentes con alta inflación")) %>%
select(N, Pais, Cluster, Grupo) %>%
arrange(Cluster, N)
tabla_paises_num %>%
kbl(caption = "Referencia: número asignado a cada país en el gráfico",
col.names = c("N°", "País", "Cluster", "Grupo"), align = "clcc") %>%
kable_styling(bootstrap_options = c("hover", "condensed", "responsive"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
row_spec(which(tabla_paises_num$Cluster == 1), background = "#dceefb") %>%
row_spec(which(tabla_paises_num$Cluster == 2), background = "#fff8e1") %>%
row_spec(which(tabla_paises_num$Cluster == 3), background = "#fde8d8") %>%
column_spec(1, bold = TRUE, color = "#1a6e9e") %>%
column_spec(2, bold = TRUE)
| N° | País | Cluster | Grupo |
|---|---|---|---|
| 12 | Germany | 1 | Grandes economías desarrolladas |
| 19 | Japan | 1 | Grandes economías desarrolladas |
| 20 | Korea | 1 | Grandes economías desarrolladas |
| 35 | United States | 1 | Grandes economías desarrolladas |
| 1 | Australia | 2 | Economías medianas y avanzadas |
| 2 | Austria | 2 | Economías medianas y avanzadas |
| 3 | Belgium | 2 | Economías medianas y avanzadas |
| 4 | Canada | 2 | Economías medianas y avanzadas |
| 7 | Czech Republic | 2 | Economías medianas y avanzadas |
| 8 | Denmark | 2 | Economías medianas y avanzadas |
| 9 | Estonia | 2 | Economías medianas y avanzadas |
| 10 | Finland | 2 | Economías medianas y avanzadas |
| 11 | France | 2 | Economías medianas y avanzadas |
| 13 | Greece | 2 | Economías medianas y avanzadas |
| 14 | Hungary | 2 | Economías medianas y avanzadas |
| 15 | Iceland | 2 | Economías medianas y avanzadas |
| 16 | Ireland | 2 | Economías medianas y avanzadas |
| 17 | Israel | 2 | Economías medianas y avanzadas |
| 18 | Italy | 2 | Economías medianas y avanzadas |
| 21 | Luxembourg | 2 | Economías medianas y avanzadas |
| 22 | Mexico | 2 | Economías medianas y avanzadas |
| 23 | Netherlands | 2 | Economías medianas y avanzadas |
| 24 | New Zealand | 2 | Economías medianas y avanzadas |
| 25 | Norway | 2 | Economías medianas y avanzadas |
| 26 | Poland | 2 | Economías medianas y avanzadas |
| 27 | Portugal | 2 | Economías medianas y avanzadas |
| 28 | Slovak Republic | 2 | Economías medianas y avanzadas |
| 29 | Slovenia | 2 | Economías medianas y avanzadas |
| 30 | Spain | 2 | Economías medianas y avanzadas |
| 31 | Sweden | 2 | Economías medianas y avanzadas |
| 32 | Switzerland | 2 | Economías medianas y avanzadas |
| 34 | United Kingdom | 2 | Economías medianas y avanzadas |
| 37 | Brazil | 2 | Economías medianas y avanzadas |
| 38 | Croatia | 2 | Economías medianas y avanzadas |
| 41 | Romania | 2 | Economías medianas y avanzadas |
| 42 | SouthAfrica | 2 | Economías medianas y avanzadas |
| 5 | Chile | 3 | Economías emergentes con alta inflación |
| 6 | Colombia | 3 | Economías emergentes con alta inflación |
| 33 | Türkiye | 3 | Economías emergentes con alta inflación |
| 36 | Argentina | 3 | Economías emergentes con alta inflación |
| 39 | India | 3 | Economías emergentes con alta inflación |
| 40 | Peru | 3 | Economías emergentes con alta inflación |
El ACP permitió identificar los ejes latentes que estructuran la variabilidad de los indicadores macroeconómicos de los países analizados. Los dos primeros componentes concentran en conjunto cerca del 46,9% de la varianza total (CP1: 26,5% y CP2: 20,4%), lo que significa que estos dos factores ya capturan casi la mitad de la información contenida en las 15 variables originales. Si se consideran los cinco primeros componentes, la varianza acumulada sube a 83,4%, lo que confirma que la reducción dimensional que hicimos es razonable para los fines de este análisis: con solo un tercio de las dimensiones originales (5 de 15) estamos conservando más del 80% de la información.
Esta reducción facilita entender las dinámicas que hay detrás de los datos, al resumir varios indicadores económicos en dimensiones que se pueden interpretar de forma conceptual. Según Hair et al. (2019), la interpretación sustantiva de cada componente —es decir, ponerle un nombre con sentido económico y no quedarse solo en “Componente 1” o “Componente 2”— es justamente lo que le da utilidad práctica al ACP más allá de la reducción de dimensionalidad. Estas dimensiones son, en últimas, los principales factores que explican la heterogeneidad macroeconómica entre países, y permiten ubicar a cada uno según su estructura de crecimiento, su tamaño económico y su nivel de inflación.
Primera Componente Principal (CP1): “Dinamismo económico e inflacionario”. El CP1, que explica el 26,5% de la varianza, agrupa principalmente variables de crecimiento económico nominal y dinámica de precios. Las que más contribuyen son el crecimiento del PIB nominal (17,7%), el crecimiento del deflactor del PIB (14,4%), el crecimiento del consumo privado (11,7%) y el crecimiento del PIB en volumen (10,8%). Todas con cargas positivas, lo que indica que los países en el extremo positivo del CP1 combinan crecimientos nominales altos, inflación alta y mayor dinamismo en el consumo privado, todo al mismo tiempo.
Este perfil corresponde sobre todo a economías emergentes como Argentina, Türkiye, Chile, Colombia, India y Perú, que en el período analizado tuvieron tasas de crecimiento nominal elevadas junto con presiones inflacionarias importantes. En el extremo opuesto están economías avanzadas como Estados Unidos, Alemania y Japón, con crecimientos nominales más moderados, inflación controlada y mayor estabilidad macroeconómica en general. Por eso interpretamos el CP1 como un eje de dinamismo económico nominal e inflacionario, que separa a las economías con alta expansión nominal y presiones de precios de las economías más maduras, con menor crecimiento pero mayor estabilidad.
Segunda Componente Principal (CP2): “Tamaño y escala económica”. El CP2, que explica el 20,4% de la varianza, está definido principalmente por variables de tamaño absoluto: el PIB nominal (29,4%), el PIB en volumen (29,0%) y la formación bruta de capital fijo (28,0%). Estas variables tienen cargas positivas altas, así que los países en el extremo positivo del CP2 son economías grandes en términos de producción e inversión.
Este perfil corresponde a economías como Corea, Japón, Colombia y Estados Unidos, que tienen valores altos en estas variables y aparecen claramente desplazadas hacia el extremo positivo del eje CP2 en el plano factorial. En contraste, las economías pequeñas y medianas que conforman el Cluster 2 se concentran cerca del origen, lo que refleja niveles intermedios en estas variables. El CP2 se puede leer entonces como un eje de escala y capacidad productiva, que separa a las grandes economías del resto, sin importar tanto su nivel de crecimiento o de inflación.
Vale la pena notar que estos dos ejes son, en buena medida, independientes entre sí: una economía puede ser grande (alto CP2) y tener inflación controlada (CP1 negativo), como Estados Unidos o Alemania, o puede ser una economía mediana (CP2 cercano a cero) con alta inflación (CP1 positivo), como Argentina. Esto confirma que el tamaño económico y el dinamismo inflacionario son dos dimensiones distintas de la heterogeneidad entre países, y no dos caras de lo mismo.
perfil_clusters <- datos_final %>%
select(-Pais, -cluster_ward) %>%
group_by(cluster_kmeans) %>%
summarise(
across(where(is.numeric), mean),
n_paises = n()
)
perfil_clusters %>%
kbl(caption = "Perfil de clusters — Medias de indicadores económicos por grupo",
digits = 2, align = "c") %>%
kable_styling(bootstrap_options = c("hover", "condensed", "responsive"),
full_width = FALSE, font_size = 12) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
row_spec(1, background = "#dceefb") %>%
row_spec(2, background = "#fff8e1") %>%
row_spec(3, background = "#fde8d8") %>%
column_spec(1, bold = TRUE)
| cluster_kmeans | CtaCte_PIB | TipoCambio | Importaciones | Exportaciones | PIB_nominal | PIB_volumen | PIB_PPP | FormCapital | Crec_PIB_vol | Crec_PIB_nom | Crec_Deflactor | Crec_ConsPriv | Crec_ConsGob | Desempleo | TasaInteres_CP | n_paises |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3.17 | 6.07 | 1.567789e+12 | 1.397740e+12 | 6.599727e+14 | 6.186213e+14 | 8.012326e+12 | 1.772324e+14 | 3.58 | 5.98 | 2.29 | 3.42 | 3.21 | 3.84 | 0.08 | 4 |
| 2 | 1.43 | 3.90 | 2.662391e+11 | 2.780983e+11 | 4.379192e+12 | 3.297780e+12 | 8.610170e+11 | 7.483222e+11 | 5.90 | 10.21 | 4.09 | 5.74 | 4.22 | 7.43 | 0.38 | 32 |
| 3 | -2.67 | 31.04 | 2.086839e+11 | 1.780325e+11 | 2.847812e+14 | 2.095886e+14 | 8.829461e+11 | 4.353693e+13 | 11.03 | 32.38 | 19.27 | 13.39 | 6.58 | 9.42 | 4.91 | 6 |
datos_z_df <- as.data.frame(datos_z) %>%
mutate(Pais = datos_sel$Pais,
cluster_kmeans = datos_final$cluster_kmeans)
datos_long <- datos_z_df %>%
pivot_longer(cols = -c(Pais, cluster_kmeans),
names_to = "Variable", values_to = "Valor")
p_box_cluster <- ggplot(datos_long, aes(x = Variable, y = Valor, fill = cluster_kmeans)) +
geom_boxplot(alpha = 0.8, outlier.shape = 16, outlier.size = 1.5) +
scale_fill_manual(
values = c("1" = "#1a6e9e", "2" = "#E7B800", "3" = "#FC4E07"),
labels = c("Cluster 1\n(Grandes economías)",
"Cluster 2\n(Economías medianas)",
"Cluster 3\n(Economías emergentes)")
) +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
legend.position = "top") +
labs(title = "Distribución de indicadores económicos por cluster",
subtitle = "Variables estandarizadas (z-score) | k-means k=3",
x = NULL, y = "Valor (z-score)", fill = NULL)
ggplotly(p_box_cluster)
vars_num <- datos_final %>% select(-Pais, -cluster_ward, -cluster_kmeans)
resultado_anova <- vars_num %>%
names() %>%
map_dfr(function(var) {
formula <- as.formula(paste(var, "~ cluster_kmeans"))
aov_res <- aov(formula, data = datos_final)
p_val <- summary(aov_res)[[1]]$`Pr(>F)`[1]
f_val <- summary(aov_res)[[1]]$`F value`[1]
tibble(Variable = var,
F_estadistico = round(f_val, 3),
p_valor = round(p_val, 4))
}) %>%
arrange(p_valor)
resultado_anova %>%
mutate(Significativa = ifelse(p_valor < 0.05, "✔ Sí", "✘ No")) %>%
kbl(caption = "Variables que mejor discriminan los clusters (ANOVA)",
col.names = c("Variable", "F estadístico", "p-valor", "¿Discrimina?"),
align = "lccc") %>%
kable_styling(bootstrap_options = c("hover", "condensed"),
full_width = FALSE, font_size = 13) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
column_spec(1, bold = TRUE, color = "#1a6e9e") %>%
row_spec(which(resultado_anova$p_valor < 0.05), background = "#f0f7ff")
| Variable | F estadístico | p-valor | ¿Discrimina? |
|---|---|---|---|
| Importaciones | 19.796 | 0.0000 | ✔ Sí |
| Exportaciones | 25.955 | 0.0000 | ✔ Sí |
| PIB_PPP | 14.838 | 0.0000 | ✔ Sí |
| Crec_PIB_vol | 19.450 | 0.0000 | ✔ Sí |
| Crec_PIB_nom | 20.233 | 0.0000 | ✔ Sí |
| Crec_ConsPriv | 22.800 | 0.0000 | ✔ Sí |
| Crec_Deflactor | 10.962 | 0.0002 | ✔ Sí |
| PIB_volumen | 9.235 | 0.0005 | ✔ Sí |
| FormCapital | 9.213 | 0.0005 | ✔ Sí |
| PIB_nominal | 8.835 | 0.0007 | ✔ Sí |
| TipoCambio | 7.381 | 0.0019 | ✔ Sí |
| TasaInteres_CP | 6.859 | 0.0028 | ✔ Sí |
| Crec_ConsGob | 2.428 | 0.1014 | ✘ No |
| CtaCte_PIB | 2.168 | 0.1280 | ✘ No |
| Desempleo | 1.380 | 0.2637 | ✘ No |
# Descripción estadística de grupos — medias y desviación estándar por cluster
carac_cont <- datos_final %>%
select(-Pais, -cluster_ward) %>%
group_by(cluster_kmeans) %>%
summarise_if(is.numeric, list(media = mean, sd = sd)) %>%
pivot_longer(-cluster_kmeans,
names_to = c("Variable", "Estadistico"),
names_sep = "_(?=media|sd)") %>%
pivot_wider(names_from = Estadistico, values_from = value) %>%
mutate(across(where(is.numeric), round, 2))
carac_cont %>%
kbl(caption = "Descripción estadística de grupos — Media y desviación estándar por cluster",
col.names = c("Cluster", "Variable", "Media", "Desv. Est."),
align = "clcc") %>%
kable_styling(bootstrap_options = c("hover", "condensed", "responsive"),
full_width = FALSE, font_size = 12) %>%
row_spec(0, bold = TRUE, background = "#1a6e9e", color = "white") %>%
column_spec(2, bold = TRUE, color = "#1a6e9e") %>%
row_spec(which(carac_cont$cluster_kmeans == 1), background = "#dceefb") %>%
row_spec(which(carac_cont$cluster_kmeans == 2), background = "#fff8e1") %>%
row_spec(which(carac_cont$cluster_kmeans == 3), background = "#fde8d8")
| Cluster | Variable | Media | Desv. Est. |
|---|---|---|---|
| 1 | CtaCte_PIB | 3.170000e+00 | 4.770000e+00 |
| 1 | TipoCambio | 6.070000e+00 | 5.940000e+00 |
| 1 | Importaciones | 1.567789e+12 | 1.182713e+12 |
| 1 | Exportaciones | 1.397740e+12 | 7.237171e+11 |
| 1 | PIB_nominal | 6.599727e+14 | 9.734989e+14 |
| 1 | PIB_volumen | 6.186213e+14 | 8.994479e+14 |
| 1 | PIB_PPP | 8.012326e+12 | 8.432959e+12 |
| 1 | FormCapital | 1.772324e+14 | 2.707958e+14 |
| 1 | Crec_PIB_vol | 3.580000e+00 | 1.890000e+00 |
| 1 | Crec_PIB_nom | 5.980000e+00 | 4.090000e+00 |
| 1 | Crec_Deflactor | 2.290000e+00 | 2.270000e+00 |
| 1 | Crec_ConsPriv | 3.420000e+00 | 3.530000e+00 |
| 1 | Crec_ConsGob | 3.210000e+00 | 1.920000e+00 |
| 1 | Desempleo | 3.840000e+00 | 1.070000e+00 |
| 1 | TasaInteres_CP | 8.000000e-02 | 5.800000e-01 |
| 2 | CtaCte_PIB | 1.430000e+00 | 5.210000e+00 |
| 2 | TipoCambio | 3.900000e+00 | 5.500000e+00 |
| 2 | Importaciones | 2.662391e+11 | 2.290162e+11 |
| 2 | Exportaciones | 2.780983e+11 | 2.387622e+11 |
| 2 | PIB_nominal | 4.379192e+12 | 1.042657e+13 |
| 2 | PIB_volumen | 3.297780e+12 | 7.784914e+12 |
| 2 | PIB_PPP | 8.610170e+11 | 9.107954e+11 |
| 2 | FormCapital | 7.483222e+11 | 1.905304e+12 |
| 2 | Crec_PIB_vol | 5.900000e+00 | 2.180000e+00 |
| 2 | Crec_PIB_nom | 1.021000e+01 | 3.520000e+00 |
| 2 | Crec_Deflactor | 4.090000e+00 | 3.380000e+00 |
| 2 | Crec_ConsPriv | 5.740000e+00 | 2.210000e+00 |
| 2 | Crec_ConsGob | 4.220000e+00 | 2.600000e+00 |
| 2 | Desempleo | 7.430000e+00 | 5.720000e+00 |
| 2 | TasaInteres_CP | 3.800000e-01 | 1.490000e+00 |
| 3 | CtaCte_PIB | -2.670000e+00 | 2.930000e+00 |
| 3 | TipoCambio | 3.104000e+01 | 4.203000e+01 |
| 3 | Importaciones | 2.086839e+11 | 2.521268e+11 |
| 3 | Exportaciones | 1.780325e+11 | 2.024216e+11 |
| 3 | PIB_nominal | 2.847812e+14 | 4.506117e+14 |
| 3 | PIB_volumen | 2.095886e+14 | 3.521838e+14 |
| 3 | PIB_PPP | 8.829461e+11 | 8.879028e+11 |
| 3 | FormCapital | 4.353693e+13 | 6.347029e+13 |
| 3 | Crec_PIB_vol | 1.103000e+01 | 1.530000e+00 |
| 3 | Crec_PIB_nom | 3.238000e+01 | 2.082000e+01 |
| 3 | Crec_Deflactor | 1.927000e+01 | 1.905000e+01 |
| 3 | Crec_ConsPriv | 1.339000e+01 | 4.540000e+00 |
| 3 | Crec_ConsGob | 6.580000e+00 | 3.480000e+00 |
| 3 | Desempleo | 9.420000e+00 | 3.030000e+00 |
| 3 | TasaInteres_CP | 4.910000e+00 | 6.850000e+00 |
Cluster 1 — Grandes economías desarrolladas (Alemania, Japón, Corea, EE.UU.). Este cluster reúne a las cuatro economías de mayor tamaño absoluto de toda la muestra. Su perfil se caracteriza por niveles muy altos de PIB nominal, PIB en volumen, importaciones, exportaciones y formación bruta de capital, lo cual tiene sentido si se piensa en su papel como grandes potencias comerciales e industriales a escala global. En cuanto a crecimiento, estas economías muestran tasas más moderadas que los otros dos clusters, algo coherente con su mayor madurez económica y con ciclos productivos ya bastante estabilizados.
Desde el punto de vista inflacionario, tanto el crecimiento del deflactor del PIB como la tasa de interés de corto plazo de este grupo son notablemente más bajos que los del Cluster 3, lo que refleja entornos de precios más estables y políticas monetarias más consolidadas. De hecho, la tasa de interés de corto plazo llega a valores bajos o incluso negativos en algunos casos —en particular Japón y Alemania—, lo que evidencia políticas monetarias expansivas orientadas a sostener el crecimiento en un entorno de baja inflación. En conjunto, el Cluster 1 representa economías con una posición dominante en el comercio mundial, alta capacidad de inversión y bastante estabilidad macroeconómica, aunque con menor dinamismo nominal que las economías emergentes.
Cluster 2 — Economías medianas y avanzadas (32 países, mayoría europea). Este es, por mucho, el cluster más grande y representa el perfil macroeconómico “típico” de la muestra. Sus indicadores se ubican en niveles intermedios en prácticamente todas las variables: crecimiento moderado del PIB, inflación controlada, tasas de interés bajas o moderadas y un nivel de comercio exterior proporcional al tamaño de cada economía. Es también el grupo con mayor heterogeneidad interna de los tres, porque reúne tanto a economías europeas avanzadas —Francia, España, Suecia, Países Bajos, Suiza— como a economías emergentes de tamaño medio —Brasil, México, Sudáfrica, Croacia, Rumania—, todas con perfiles que no llegan a los extremos que sí se observan en los otros dos clusters.
Lo que en realidad unifica a estas economías no es tanto una característica compartida, sino más bien la ausencia de valores extremos en las variables que más discriminan entre grupos: ninguna tiene el tamaño descomunal del Cluster 1 ni el dinamismo inflacionario extremo del Cluster 3. Esa posición central en el plano factorial refleja economías relativamente estables, con marcos institucionales consolidados o en proceso de consolidación, que en el período analizado lograron mantener un equilibrio razonable entre crecimiento y estabilidad de precios.
Cluster 3 — Economías emergentes con alta inflación (Chile, Colombia, Türkiye, Argentina, India, Perú). Este cluster agrupa a seis economías emergentes que comparten un perfil de alto crecimiento nominal, alta inflación y tipos de cambio elevados frente al dólar. Las variables que mejor discriminan a este grupo, según el ANOVA, son precisamente las relacionadas con el dinamismo nominal: el crecimiento del consumo privado (F = 22,8), las exportaciones (F = 26,0) y el crecimiento del PIB nominal (F = 20,2), todas con p-valores cercanos a cero.
Argentina y Türkiye son los casos más extremos dentro de este cluster, con tasas de inflación y crecimientos nominales muy por encima del resto, lo que refleja contextos de inestabilidad macroeconómica bastante severa. Chile, Colombia, India y Perú tienen un perfil algo más moderado, pero igual de diferenciado respecto al Cluster 2, con crecimientos nominales altos sostenidos por expansión económica real y presiones inflacionarias que se mantienen en el tiempo. La tasa de interés de corto plazo de este grupo es la más alta de los tres clusters, lo cual es razonable si se piensa en la respuesta típica de los bancos centrales ante presiones inflacionarias: subir tasas para intentar contenerlas. En conjunto, el Cluster 3 representa economías en expansión pero con alta volatilidad nominal, cuyo dinamismo está acompañado de retos importantes en materia de estabilidad de precios y política cambiaria.
El uso conjunto del Análisis de Componentes Principales (ACP) y de las técnicas de agrupamiento permitió identificar patrones que difícilmente habrían sido visibles mediante una revisión individual de cada variable. Aunque la base contenía únicamente 42 países y 15 indicadores, la cantidad de relaciones existentes entre las variables hacía complejo comprender cómo se estructuraban realmente las diferencias económicas entre las naciones analizadas.
Uno de los hallazgos más interesantes fue comprobar que las diferencias entre países no dependen únicamente de su nivel de riqueza o del tamaño de su economía. El ACP mostró que existen al menos dos dimensiones fundamentales que explican buena parte de la heterogeneidad observada: por un lado, el tamaño y la capacidad productiva de las economías; y por otro, el dinamismo económico asociado al crecimiento nominal, la inflación y el comportamiento del consumo. Estas dimensiones resultan especialmente útiles porque permiten entender que países con niveles de desarrollo distintos pueden compartir características similares en ciertos aspectos y diferir profundamente en otros.
Los resultados también evidencian que el crecimiento económico no siempre está acompañado de estabilidad macroeconómica. El grupo conformado por Argentina, Türkiye, Colombia, Chile, Perú e India muestra que es posible observar economías con elevados niveles de crecimiento nominal y expansión económica, pero al mismo tiempo con mayores presiones inflacionarias y tasas de interés más altas. Esto refleja uno de los principales retos de muchas economías emergentes: mantener el crecimiento sin comprometer la estabilidad de precios.
Por otra parte, las grandes economías desarrolladas se diferenciaron principalmente por su enorme escala productiva y comercial. Estados Unidos, Alemania, Japón y Corea forman un grupo claramente separado del resto debido a la magnitud de sus niveles de producción, inversión y comercio internacional. Sin embargo, este resultado también invita a reflexionar sobre cómo el tamaño económico continúa siendo un factor determinante en la estructura del sistema económico global, incluso en un contexto donde la innovación, la digitalización y los servicios tienen cada vez mayor relevancia.
Un aspecto particularmente llamativo fue el caso de Corea. Tanto el ACP como los métodos de agrupamiento mostraron que este país presenta características suficientemente diferenciadas para aparecer aislado o separado en varios momentos del análisis. Este resultado demuestra que incluso dentro del grupo de economías desarrolladas existen trayectorias y estructuras productivas muy distintas, algo que normalmente queda oculto cuando los países se analizan únicamente a través de indicadores agregados.
La alta concordancia observada entre k-means y Ward aporta confianza en la consistencia de los resultados. Que dos métodos con lógicas diferentes produzcan agrupamientos muy similares sugiere que los patrones encontrados no son producto del azar ni de una decisión metodológica específica, sino que responden a estructuras reales presentes en los datos.
No obstante, este estudio también presenta algunas limitaciones. El análisis se realizó utilizando información correspondiente a un período específico, por lo que los grupos identificados podrían modificarse ante cambios económicos importantes, como crisis financieras, variaciones en los precios internacionales o transformaciones en la política monetaria de cada país. Además, aunque las 15 variables seleccionadas representan dimensiones relevantes del desempeño macroeconómico, existen otros factores institucionales, sociales y políticos que también influyen en el comportamiento económico de las naciones y que no fueron considerados en este trabajo.
`