Introducción

Los países pertenecientes a la Organización para la Cooperación y el Desarrollo Económicos (OCDE) presentan importantes diferencias en aspectos como crecimiento económico, productividad, empleo, comercio internacional, inflación y estabilidad macroeconómica. Aunque estas naciones comparten ciertos estándares de desarrollo, sus estructuras económicas y niveles de desempeño varían considerablemente. Analizar estas diferencias resulta fundamental para comprender los factores que influyen en la competitividad y el desarrollo económico de cada país. En este contexto, el uso de técnicas estadísticas multivariadas y de aprendizaje automático permite identificar patrones comunes, relaciones entre indicadores y agrupaciones de países con características económicas similares.

El presente trabajo tiene como objetivo aplicar técnicas de aprendizaje no supervisado sobre una base de datos compuesta por indicadores económicos de diversos países pertenecientes a la Organización para la Cooperación y el Desarrollo Económicos (OCDE). A diferencia de los métodos supervisados, el aprendizaje no supervisado permite identificar patrones y estructuras ocultas dentro de los datos sin la necesidad de contar con una variable objetivo previamente definida (James, 2021; Hastie, 2009), permitiendo identificar similitudes y diferencias entre las observaciones analizadas.

La metodología propuesta incluye inicialmente un análisis descriptivo de las variables seleccionadas, seguido de la evaluación de sus relaciones mediante matriz de correlación. Posteriormente, se aplica un Análisis de Componentes Principales (ACP) con el fin de reducir la dimensionalidad de los datos, técnica que transforma las variables originales en un conjunto reducido de componentes no correlacionados que concentran la mayor parte de la variabilidad de la información (Jolliffe & Cadima, 2016), permitiendo facilitar la representación gráfica de los datos. Finalmente, se aplicó el algoritmo K-Means, uno de los métodos de agrupamiento más utilizados para identificar grupos homogéneos dentro de un conjunto de observaciones (MacQueen, 1967).

A través de estas herramientas se espera identificar patrones estructurales entre las economías analizadas, reconocer grupos de países con comportamientos similares y determinar cuáles indicadores tienen una mayor influencia en la diferenciación de dichas agrupaciones. De esta manera, el trabajo permitirá ilustrar la utilidad de las técnicas de aprendizaje no supervisado para el análisis económico y la generación de conocimiento a partir de grandes conjuntos de datos.

Para el desarrollo del proyecto se utilizó el software R Studio, una de las herramientas más empleadas en el análisis estadístico y la ciencia de datos. Se incorporan gráficos interactivos y visualizaciones dinámicas, los cuales facilitarán la exploración de los datos y la interpretación de los resultados obtenidos.

Metodología

Base de datos

La información analizada proviene de una base de datos suministrada en el curso de Gestión de datos en la Universidad del Valle. La base de datos es perteneciente a la Organización para la Cooperación y el Desarrollo Económicos (OCDE).

La unidad de análisis está constituida por países, considerando para cada uno de ellos información relacionada con el mercado laboral y la productividad, medida a través del Producto Interno Bruto por persona empleada. Para analizar a mayor profundidad la productividad dependiendo de su ubicación geográfica, se seleccionan las regiones de Latinoamérica, Europa y Asia.

La unidad de análisis de este estudio corresponde a los países del mundo. Cada observación representa un país y sus respectivos indicadores económicos para un período determinado. En total, la base contiene 42 países y un conjunto de variables macroeconómicas relacionadas con crecimiento económico, comercio exterior, mercado laboral, consumo, inversión y tasas de interés.

Descripción de las variables

- Balanza cuenta corriente (Bal. cta. cte.): Saldo de cuenta corriente respecto al PIB. Esta variable se mide en porcentaje.

- Exportaciones netas (Exp. netas): Contribución de las exportaciones netas al cambio del PIB real. Esta variable se mide en porcentaje.

- Crecimiento exportaciones (Crec. exp.): Crecimiento del volumen de exportaciones de bienes y servicios. Esta variable se mide en tasa de crecimiento anual.

- Crecimiento importaciones (Crec. imp.): Crecimiento del volumen de importaciones de bienes y servicios. Esta variable se mide en tasa de crecimiento anual.

- Crecimiento PIB (Crec. PIB): Mide la tasa de crecimiento de la producción económica. Esta variable se mide en tasa de crecimiento anual.

- Crecimiento PIB nominal (Crec. PIB nom.): Refleja el crecimiento económico. Esta variable se mide en tasa de crecimiento anual.

- Deflactor PIB (Defl. PIB): Crecimiento del deflactor del PIB. Esta variable se mide en tasa de crecimiento anual.

- Crecimiento inversión (Crec. inv.): Crecimiento de la formación bruta de capital fijo. Esta variable se mide en tasa de crecimiento anual.

-Crecimiento consumo (Crec. consumo): Crecimiento del consumo privado. Esta variable se mide en tasa de crecimiento anual.

- Crecimiento gasto gobierno (Crec. gobierno): Crecimiento del gasto de consumo final del gobierno. Esta variable se mide en tasa de crecimiento anual.

- Deflactor exportaciones (Defl. exp.): Deflactor de exportaciones de bienes y servicios.Esta variable se mide en índice.

- Deflactor importaciones (Defl. imp.): Deflactor de importaciones de bienes y servicios. Esta variable se mide en índice.

- Nivel precios (Nivel precios): Deflactor del PIB. Esta variable se mide en ìndice.

- Desempleo (Desempleo): Porcentaje de la población económicamente activa que se encuentra sin empleo. Esta variable se mide en porcentaje.

- Tasa interés (Tasa int.): Tasa de interés a corto plazo. Esta variable se mide en porcentaje anual.

La mayoría de las variables se encuentran expresadas como tasas de crecimiento o porcentajes, lo que facilita la comparación entre países con distintos tamaños económicos. Adicionalmente, se incorporaron deflactores e indicadores de precios que permiten capturar aspectos relacionados con la inflación y la competitividad internacional. Algunas variables de la base de datos se encuentran expresadas en forma de índices, los cuales representan medidas relativas respecto a un período o valor de referencia.

La selección de las quince variables utilizadas en el análisis se realizó con el objetivo de capturar diferentes dimensiones del desempeño económico y social de los países, garantizando al mismo tiempo una representación amplia de la información contenida en la base de datos. Esta selección resulta adecuada para aplicar técnicas de aprendizaje no supervisado, ya que incorpora indicadores de distintas áreas de la economía y facilita la identificación de patrones y agrupaciones entre los países analizados.

Descripción de técnicas

ACP

El Análisis de Componentes Principales (ACP) es una técnica estadística multivariada utilizada para reducir la dimensionalidad de un conjunto de datos sin perder una proporción significativa de la información original. El método transforma las variables originales, que pueden estar correlacionadas entre sí, en un nuevo conjunto de variables denominadas componentes principales. Estos componentes son combinaciones lineales de las variables originales, son ortogonales entre sí y se ordenan de acuerdo con la cantidad de varianza que explican. De esta manera, el ACP permite simplificar el análisis, identificar patrones subyacentes y facilitar la visualización e interpretación de datos con múltiples dimensiones (Jolliffe & Cadima, 2016; Abdi & Williams, 2010).

Antes de aplicar el ACP, las variables deben estandarizarse debido a que poseen diferentes escalas.

Clusterización

La clusterización es una técnica de aprendizaje no supervisado que agrupa observaciones similares. Se hace uso de dos métodos:

K-means

K-Means es una técnica de aprendizaje no supervisado cuyo objetivo es agrupar observaciones similares en un número predeterminado de clusters. El algoritmo asigna cada observación al grupo cuyo centroide se encuentra más próximo, minimizando la variabilidad dentro de cada cluster y maximizando las diferencias entre grupos. El proceso se desarrolla de manera iterativa mediante la actualización de los centroides hasta alcanzar una solución estable. Debido a su simplicidad y eficiencia computacional, K-Means es uno de los métodos de agrupamiento más utilizados para la segmentación y clasificación de datos multidimensionales (MacQueen, 1967; Hastie, Tibshirani & Friedman, 2009).

Método de Ward

El método de Ward corresponde a una técnica de agrupamiento jerárquico aglomerativo que construye clusters de forma progresiva. Inicialmente, cada observación constituye un grupo independiente y, en cada etapa, se fusionan aquellos grupos cuya unión produce el menor incremento en la varianza interna total. Este procedimiento genera una estructura jerárquica representada mediante un dendrograma, permitiendo visualizar las relaciones existentes entre las observaciones y determinar un número adecuado de clusters (Kaufman & Rousseeuw, 2005; Everitt et al., 2011).

Resultados descriptivos

Análisis de las variables

library(tidyverse)
library(readxl)
library(factoextra)
library(FactoMineR)
library(FactoClass)
library(dendextend)
library(plotly)
library(psych)
library(DT)
library(corrplot)
library(knitr)
library(kableExtra)

datos <- read_excel("DatosEcon.xlsx", sheet = "Data")
paises <- datos$Pais
datos <- as.data.frame(datos)
datos <- datos %>% select(-Pais)

datos_seleccion <- c("x1", "x8", "x15", "x16", "x17", "x18", "x19", 
                     "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x29")

trans <- datos[, datos_seleccion]

conv_log <- c("x23", "x24", "x25")
trans[, conv_log] <- log(trans[, conv_log])

colnames(trans) <- c("Bal. cta. cte.", "Exp. netas", 
                     "Crec. exp.", "Crec. imp.",
                     "Crec. PIB", "Crec. PIB nom.", 
                     "Defl. PIB", "Crec. inv.", 
                     "Crec. consumo", "Crec. gobierno",
                     "Defl. exp.", "Defl. imp.",
                     "Nivel precios", "Desempleo", "Tasa int.")

rownames(trans) <- paises

datos_escalados <- as.data.frame(scale(trans))

tabla_desc <- describe(trans)

tabla_desc %>%
  select(mean, sd, min, max, median) %>%
  round(2) %>%
  kable(
    caption = "Estadísticas descriptivas de las variables económicas",
    col.names = c("Media",
                  "Desv. Est.",
                  "Mínimo",
                  "Máximo",
                  "Mediana")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped",
                          "hover",
                          "condensed"),
    full_width = FALSE
  )
Estadísticas descriptivas de las variables económicas
Media Desv. Est. Mínimo Máximo Mediana
Bal. cta. cte. 1.01 5.08 -7.28 14.91 0.36
Exp. netas 0.00 0.05 -0.09 0.28 -0.01
Crec. exp. 10.67 6.89 -3.59 27.82 10.41
Crec. imp. 12.82 8.24 -8.28 35.47 13.12
Crec. PIB 6.41 2.87 1.64 13.43 5.29
Crec. PIB nom. 12.97 11.37 0.76 70.18 10.68
Defl. PIB 6.08 9.12 -0.87 54.15 3.07
Crec. inv. 7.34 10.81 -39.07 35.32 6.60
Crec. consumo 6.61 3.93 0.40 20.51 5.73
Crec. gobierno 4.46 2.78 0.41 12.63 4.03
Defl. exp. 0.33 0.70 -0.04 4.05 0.10
Defl. imp. 0.28 0.66 -0.14 3.73 0.10
Nivel precios 0.31 0.68 0.00 4.21 0.13
Desempleo 7.37 5.27 2.82 34.27 6.08
Tasa int. 1.00 3.17 -0.74 18.71 0.02

Matriz de correlación

library(plotly)
library(reshape2)

colnames(trans) <- c("Bal. cta. cte.", "Exp. netas", 
                         "Crec. exp.", "Crec. imp.",
                         "Crec. PIB", "Crec. PIB nom.", 
                         "Defl. PIB", "Crec. inv.", 
                         "Crec. consumo", "Crec. gobierno",
                         "Defl. exp.", "Defl. imp.",
                         "Nivel precios", "Desempleo", "Tasa int.")

correlaciones <- cor(trans)

cor_triangulo <- correlaciones
cor_triangulo[upper.tri(cor_triangulo, diag = TRUE)] <- NA

cor_melt <- melt(cor_triangulo, varnames = c("Variable1", "Variable2"), value.name = "Correlación")

cor_melt <- na.omit(cor_melt)


plot_ly(
  data = cor_melt,
  x = ~Variable1,
  y = ~Variable2,
  z = ~Correlación,
  
  type = "heatmap",
  colorscale = list(
    list(0, "#CF2D27"),   
    list(0.25, "#D98F18"), 
    list(0.5, "#FFFFFF"),  
    list(0.75, "#4F90E8"), 
    list(1, "#0033DE")  
  ),
  zmin = -1,
  zmax = 1,
  hovertemplate = paste("<b>%{x}</b> vs <b>%{y}</b><br>",
                        "Correlación: %{z:.2f}<extra></extra>")
) %>%
  layout(
    title = "Matriz de correlación de variables",
    xaxis = list(title = "", tickangle = 45, tickfont = list(size = 9)),
    yaxis = list(title = "", tickfont = list(size = 9))
  )

La matriz de correlación evidencia la existencia de grupos de variables altamente relacionadas. Las variables de precios y mercado laboral (Defl. exp., Defl. imp., Nivel precios y Desempleo) presentan correlaciones positivas significativas, lo que sugiere que aumentos en el nivel general de precios están asociados con presiones inflacionarias en el comercio exterior y con mayores tasas de desempleo. Asimismo, el Crecimiento del PIB nominal y el Deflactor del PIB muestran una alta correlación positiva, un resultado esperable dado que el crecimiento nominal incorpora el componente inflacionario.

Por otro lado, se identifican relaciones negativas importantes entre el Crecimiento de las importaciones, la Balanza por cuenta corriente y las Exportaciones netas, reflejando comportamientos opuestos: un mayor crecimiento de las importaciones tiende a deteriorar el saldo externo y reduce la contribución neta del sector externo al crecimiento del PIB.

Finalmente, la Tasa de interés presenta correlaciones bajas con la mayoría de las variables, lo que indica que la política monetaria tiene un comportamiento relativamente independiente, aportando información complementaria al análisis. En conjunto, estos patrones justifican plenamente la aplicación del ACP para sintetizar la información contenida en las variables seleccionadas..

Histogramas

Crecimiento el PIB

p <- ggplot(trans, aes(x = `Crec. PIB`)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins = 10,
                 fill = "#4E79A7",
                 color = "white",
                 alpha = 0.8) +
  geom_density(linewidth = 1.2, color = "#E15759") +
  labs(
    title = "Distribución del Crecimiento del PIB",
    subtitle = "Países incluidos en la muestra",
    x = "Crecimiento del PIB (%)",
    y = "Densidad"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    axis.title = element_text(face = "bold")
  )

ggplotly(p) %>%
  layout(
    title = "Distribución del Crecimiento del PIB",
    xaxis = list(title = "Crecimiento del PIB (%)"),
    yaxis = list(title = "Densidad")
  )

La mayor parte de los datos se encuentra agrupada en la zona central e izquierda del gráfico, concentrándose con gran fuerza alrededor de valores de crecimiento del PIB de entre el 4% y el 5%. La gran mayoría de las economías analizadas se ubican en este rango, lo que representa un comportamiento estándar donde la producción de los países avanza a un ritmo moderado y regular.

Después de salir de este grupo principal, las barras comienzan a bajar y a extenderse hacia el lado derecho, formando una cola más larga en la distribución. Esto se nota en el camino que toman los datos hacia tasas más elevadas, pasando por rangos del 7% al 9% hasta llegar a valores aislados que superan el 10% y el 13%. Esto sugiere que el gráfico divide la muestra entre el comportamiento de las economías tradicionales y aquellas naciones que están experimentando una expansión acelerada o un dinamismo muy superior al promedio.

La forma de la curva refleja el comportamiento del crecimiento económico, que mide cuánto aumenta la producción de bienes y servicios en un país de un año a otro. Al concentrarse el grueso de los datos cerca del 5%, queda claro que la estabilidad es la norma para la mayoría de los países, mientras que alcanzar tasas de crecimiento de dos dígitos es un fenómeno poco común que queda reservado para situaciones de expansión muy particulares.

Nivel de precios

p <- ggplot(trans, aes(x = `Nivel precios`)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins = 10,
                 fill = "#59A14F",
                 color = "white",
                 alpha = 0.8) +
  geom_density(linewidth = 1.2, color = "#E15759") +
  labs(
    title = "Distribución del Nivel de Precios",
    subtitle = "Países incluidos en la muestra",
    x = "Nivel de precios (Deflactor PIB)",
    y = "Densidad"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    axis.title = element_text(face = "bold")
  )

ggplotly(p) %>%
  layout(
    title = list(text = "Distribución del Nivel de Precios<br><sup>Países incluidos en la muestra</sup>",
                 x = 0.5,
                 font = list(size = 14)),
    xaxis = list(title = "Nivel de precios (Deflactor PIB)"),
    yaxis = list(title = "Densidad"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

La mayor parte de los datos se encuentra agrupada en el extremo izquierdo del gráfico, concentrándose con gran fuerza en valores muy cercanos a cero, principalmente entre 0 y 0.5. La gran mayoría de las economías analizadas se ubican en este rango, lo que representa un comportamiento estándar donde el nivel de precios se mantiene bajo condiciones muy estables y controladas.

Después de salir de este grupo principal, las barras disminuyen drásticamente y la distribución se extiende hacia el lado derecho de forma muy dispersa, dejando un gran espacio vacío. Esto se nota en el camino que toman los datos hacia valores más elevados, mostrando pequeños picos aislados alrededor de 1.3 y 1.5, hasta llegar a un caso extremo que supera el valor de 4. Esto sugiere que el gráfico divide la muestra entre el comportamiento de las naciones con una alta estabilidad y aquellos países que enfrentan distorsiones o incrementos de precios fuera de lo común.

La forma de la curva refleja el comportamiento del nivel de precios (deflactor del PIB), que sirve para medir el impacto de la inflación en todos los bienes y servicios producidos dentro de una economía. Al concentrarse el grueso de los datos muy cerca de cero, queda claro que la estabilidad monetaria es la norma para la mayoría de los países estudiados, mientras que registrar valores tan alejados hacia la derecha representa un fenómeno atípico que evidencia fuertes desequilibrios económicos.

Desempleo

p <- ggplot(trans, aes(x = `Desempleo`)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins = 10,
                 fill = "#E15759",
                 color = "white",
                 alpha = 0.8) +
  geom_density(linewidth = 1.2, color = "#4E79A7") +
  labs(
    title = "Distribución de la Tasa de Desempleo",
    subtitle = "Países incluidos en la muestra",
    x = "Desempleo (%)",
    y = "Densidad"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    axis.title = element_text(face = "bold")
  )

ggplotly(p) %>%
  layout(
    title = list(text = "Distribución de la Tasa de Desempleo<br><sup>Países incluidos en la muestra</sup>",
                 x = 0.5,
                 font = list(size = 14)),
    xaxis = list(title = "Desempleo (%)"),
    yaxis = list(title = "Densidad"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

La mayor parte de los datos se encuentra agrupada en el lado izquierdo del gráfico, concentrándose con gran fuerza en niveles de desempleo bastante bajos, principalmente entre el 4% y el 8%. La gran mayoría de las economías analizadas se ubican en este rango, lo que representa un comportamiento estándar donde el mercado laboral se mantiene en condiciones estables y con una ocupación relativamente alta.

Después de salir de este grupo principal, las barras disminuyen notablemente y la distribución se extiende hacia la derecha de forma más dispersa. Esto se nota en el camino que toman los datos hacia tasas más elevadas, mostrando un pequeño segundo grupo alrededor del 12% y el 14%, hasta llegar a un caso extremo y aislado que supera el 34%. Esto sugiere que el gráfico divide la muestra entre el comportamiento de los países con mercados laborales saludables y aquellas naciones que enfrentan crisis de empleo muy profundas o problemas estructurales fuera de lo común.

La forma de la curva refleja el comportamiento de la tasa de desempleo, que mide el porcentaje de la población activa que busca trabajo pero no lo encuentra. Al concentrarse el grueso de los datos cerca del 6%, queda claro que la estabilidad laboral es la norma para la mayoría de los países estudiados, mientras que registrar valores tan alejados hacia la derecha representa un fenómeno atípico que coincide con lo visto en el círculo de correlación, donde la variable del desempleo se muestra alejada de las tendencias principales de la mayoría del grupo.

Tasa de interés

p <- ggplot(trans, aes(x = `Tasa int.`)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins = 10,
                 fill = "#F28E2B",
                 color = "white",
                 alpha = 0.8) +
  geom_density(linewidth = 1.2) +
  labs(
    title = "Distribución de la Tasa de Interés",
    subtitle = "Países incluidos en la muestra",
    x = "Tasa de interés (%)",
    y = "Densidad"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    axis.title = element_text(face = "bold")
  )

ggplotly(p) %>%
  layout(
    title = "Distribución de la Tasa de Interés",
    xaxis = list(title = "Tasa de interés (%)"),
    yaxis = list(title = "Densidad")
  )

El punto más alto de la curva se encuentra de forma contundente alrededor del 0% o incluso en niveles ligeramente negativos. La gran mayoría de los países de la muestra se concentran en este rango, lo que representa economías que operan bajo un escenario generalizado de políticas monetarias expansivas y estímulos agresivos para dinamizar la actividad económica.

Después de caer notablemente, la curva vuelve a subir sutilmente creando un segundo pico muy pequeño entre el 4% y el 5%. Esto sugiere que la muestra podría estar dividida en dos bloques con realidades distintas: un grupo mayoritario que goza de estabilidad y margen para mantener tasas mínimas, y un subgrupo reducido con presiones inflacionarias moderadas o debilidad cambiaria que le impiden relajar el costo del dinero.

Vemos que hay una barra aislada y un pequeño levantamiento de la curva al final del eje X, significativamente alejado del resto, por encima del 18%. Esto muestra la existencia de un país o unos pocos países con una crisis macroeconómica crítica y completamente atípica, donde el banco central se ve forzado a aplicar una política monetaria ultra-restrictiva como último recurso para contener crisis de divisas o espirales inflacionarias.

Boxplot general

library(reshape2)
datos_long <- melt(trans)
ggplot(datos_long,
       aes(x = variable,
           y = value,
           fill = variable)) +
  
  geom_boxplot(alpha = 0.8,
               outlier.color = "red",
               outlier.size = 2) +
  
  labs(
    title = "Distribución de las variables económicas",
    subtitle = "Análisis exploratorio de países OCDE",
    x = "Variables",
    y = "Valor"
  ) +
  
  theme_minimal() +
  
  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold",
      size = 16
    ),
    
    plot.subtitle = element_text(
      hjust = 0.5,
      size = 11
    ),
    
    axis.text.x = element_text(
      angle = 45,
      hjust = 1
    ),
    
    legend.position = "none"
  )

La mayor dispersión y variabilidad de los datos se concentra principalmente en las variables comerciales y nominales, específicamente en el crecimiento de las exportaciones e importaciones (Crec. exp., Crec. imp.), así como en el PIB nominal (Crec. PIB nom.) y su deflactor (Defl. PIB). La gran amplitud de estas cajas y la extensión de sus bigotes demuestran que las dinámicas de inserción global y los ritmos inflacionarios difieren drásticamente entre las naciones del bloque, rompiendo con cualquier supuesto de homogeneidad.Por el contrario, variables fundamentales como el crecimiento del PIB real (Crec. PIB), la balanza de cuenta corriente (Bal. cta. cte.), el desempleo (Desempleo) y la tasa de interés (Tasa int.) exhiben cajas significativamente más compactas y comprimidas cerca del cero. Esto representa un núcleo mayoritario de países con un comportamiento macroeconómico relativamente estandarizado, caracterizado por un crecimiento moderado y entornos financieros estables.Vemos, sin embargo, la presencia sistemática de puntos rojos aislados que sobresalen con fuerza por encima y por debajo de casi todas las variables. Destacan de forma crítica los descalces extremos en el PIB nominal (Crec. PIB nom.) y el deflactor (Defl. PIB) que superan el 50%, la caída libre de la inversión (Crec. inv.) por debajo del -25%, y los picos de desempleo (Desempleo) e interés (Tasa int.). Estas anomalías confirman de manera contundente la existencia de un subgrupo muy reducido de naciones sumidas en crisis estructurales profundas o espirales inflacionarias descontroladas que se alejan por completo de la realidad del resto del grupo analizado.

Resultados del modelo

Gráfico de sedimentación

library(knitr)
rownames(datos_escalados) <- paises
res.pca <- prcomp(datos_escalados,
                  scale = TRUE)

tabla_pca <- data.frame(
  Componente = paste0("PC", 1:6),
  "Desviacion"= round(res.pca$sdev[1:6], 3),
  "Varianza.E" = round((res.pca$sdev[1:6]^2 /
                                     sum(res.pca$sdev^2))*100, 2),
  "Varianza.A" = round(cumsum((res.pca$sdev[1:6]^2 /
                                            sum(res.pca$sdev^2))*100), 2)
)

kable(tabla_pca,
      caption = "Varianza explicada por los componentes principales")
Varianza explicada por los componentes principales
Componente Desviacion Varianza.E Varianza.A
PC1 2.456 40.20 40.20
PC2 1.652 18.20 58.40
PC3 1.364 12.41 70.81
PC4 1.227 10.03 80.85
PC5 0.959 6.13 86.97
PC6 0.847 4.79 91.76

El punto más alto de la capacidad de explicación se encuentra en el primer componente principal (PC1), el cual contiene una desviación de 2.456 y concentra por sí solo el 40.20% de la varianza. Esta gran concentración inicial representa la presencia de una fuerza macroeconómica dominante que lidera el comportamiento del bloque, demostrando que gran parte de las diferencias entre las economías estudiadas puede resumirse mediante una única dimensión fundamental, como por ejemplo la inflación o las distorsiones de precios.

Después de caer notablemente a menos de la mitad en el segundo componente (PC2), que aporta un 18.20%, la capacidad de capturar información desciende de manera más suave a través de los componentes tres y cuatro, los cuales añaden un 12.41% y un 10.03% respectivamente. Esto sugiere que el modelo es altamente eficiente para aplicar la simplificación de datos, ya que un plano básico con las dos primeras dimensiones logra acumular el 58.40% de la varianza total, mientras que al extenderse a los cuatro primeros componentes se alcanza a explicar un robusto 80.85% de la información del grupo.

Hay una pérdida de peso que se vuelve muy marcada a partir del quinto componente (PC5), situándose significativamente baja cuando la varianza explicada cae al 6.13% y la desviación desciende por debajo de uno hasta llegar a 0.847 en el sexto componente (PC6). Esto muestra que las últimas dimensiones aportan variaciones marginales o secundarias que van perdiendo relevancia analítica, lo que confirma que un número reducido de componentes es más que suficiente para describir con éxito la realidad económica general de la muestra, demostrando que no es necesario revisar una lista enorme de indicadores al dejar fuera el ruido de las variables restantes.

res.pca <- prcomp(datos_escalados,
                  scale=TRUE)
p <- fviz_eig(res.pca,
         addlabels = TRUE,
         barfill = "#2E86C1",
         barcolor = "#1B4F72",
         linecolor = "red") +
  labs(
    title = "Varianza explicada por los componentes principales",
    x = "Componentes",
    y = "Porcentaje de varianza"
  ) +
  theme_minimal()

ggplotly(p) %>%
  layout(
    title = list(text = "Varianza explicada por los componentes principales",
                 x = 0.5,
                 font = list(size = 14)),
    xaxis = list(title = "Componentes"),
    yaxis = list(title = "Porcentaje de varianza"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El punto más alto se concentra en el primer componente principal, el cual captura por sí solo el 40.2% de la variabilidad del total de los datos, esta gran concentración inicial representa la presencia de un factor macroeconómico dominante que lidera el comportamiento del bloque, demostrando que casi la mitad de las diferencias entre los países analizados puede resumirse mediante una única dimensión fundamental. Después de caer notablemente a menos de la mitad en la segunda barra a un 18.2%, la línea de sedimentación desciende de manera más suave y gradual a través de los componentes tres y cuatro, los cuales aportan un 12.4% y un 10.0% respectivamente. Esto sugiere que la estructura interna de los datos es altamente eficiente para la reducción de dimensiones, ya que un plano bidimensional básico logra retener el 58.4% de la varianza acumulada, mientras que los cuatro primeros componentes juntos logran explicar un robusto 80.8% de la información total.

Se observa que hay una pendiente que se aplana por completo hacia el final del eje X, situándose significativamente baja y en un descenso casi imperceptible a partir del quinto componente, donde los valores caen por debajo del 6.1% hasta llegar al 0.9%. Esto muestra la existencia de un claro “codo” o punto de quiebre en el gráfico, lo que delata que los componentes restantes representan únicamente ruido estadístico o variaciones marginales que pueden ser descartadas sin perder capacidad analítica en el modelo.

Gráfico de individuos

rownames(trans) <- paises

res.pca <- prcomp(trans, scale = TRUE)

ind_coords <- as.data.frame(res.pca$x[, 1:2])
colnames(ind_coords) <- c("PC1", "PC2")
ind_coords$Pais <- paises
ind_coords$cos2 <- round(res.pca$x[,1]^2 / sum(res.pca$sdev^2), 3)

plot_ly(ind_coords, 
        x = ~PC1, 
        y = ~PC2,
        text = ~Pais,
        mode = "markers+text",
        type = "scatter",
        marker = list(size = 12,
                      color = ~cos2,
                      colorscale = list(
                        list(0, "#1A5276"),
                        list(0.25, "#2E86C1"),
                        list(0.5, "#5DADE2"),
                        list(0.75, "#F5B041"),
                        list(1, "#C0392B")
                      ),
                      showscale = TRUE,
                      colorbar = list(title = "cos2")),
        textposition = "top",
        textfont = list(size = 10)) %>%
  layout(title = "",
         xaxis = list(title = paste0("PC1 (", round(summary(res.pca)$importance[2,1]*100, 1), "%)")),
         yaxis = list(title = paste0("PC2 (", round(summary(res.pca)$importance[2,2]*100, 1), "%)")),
         hovermode = "closest")

La mayor parte de los países se encuentra agrupada en el centro y hacia el lado izquierdo del plano. La gran mayoría de las naciones de la muestra se concentran en esta zona central, lo que representa un bloque de economías con un comportamiento muy parecido y estable (Alemania, Japón, Francia y Estados Unidos) que comparten resultados equilibrados entre sí.

Después de salir de este grupo principal, los puntos comienzan a separarse en distintas direcciones del plano factorial. Esto se nota en el salto vertical que da Irlanda hacia la parte más alta del segundo componente, o en el camino que toman hacia abajo y a la derecha países como Brasil, Colombia, Perú y Chile. Esto sugiere que el gráfico logra dividir la muestra en bloques con realidades diferentes, separando a las potencias tradicionales de aquellos países con dinámicas de comercio o desarrollo propias de mercados emergentes.

Sin embargo, que hay un par de puntos aislados y muy alejados de todos los demás hacia el extremo derecho del primer componente, representados por Türkiye y, de forma todavía más marcada, por Argentina, que se desplaza casi hasta el valor 11. Esto muestra la existencia de dos países con una situación económica diferente y fuera de lo común, donde los problemas con los precios y las altas tasas de interés los sacan por completo de la realidad del resto del grupo analizado.

Gráfico de variables

library(ggplot2)
library(plotly)

colnames(trans) <- c("Bal. cta. cte.", "Exp. netas", 
                         "Crec. exp.", "Crec. imp.",
                         "Crec. PIB", "Crec. PIB nom.", 
                         "Defl. PIB", "Crec. inv.", 
                         "Crec. consumo", "Crec. gobierno",
                         "Defl. exp.", "Defl. imp.",
                         "Nivel precios", "Desempleo", "Tasa int.")

res.pca <- prcomp(trans, scale = TRUE)

var_coords <- as.data.frame(res.pca$rotation[, 1:2])
colnames(var_coords) <- c("PC1", "PC2")
var_coords$Variable <- rownames(var_coords)

var_coords$contrib <- round((var_coords$PC1^2 + var_coords$PC2^2) / sum(res.pca$sdev[1:2]^2) * 100, 2)

var_coords_gg <- var_coords
var_coords_gg$PC1_end <- var_coords_gg$PC1
var_coords_gg$PC2_end <- var_coords_gg$PC2
var_coords_gg$PC1_start <- 0
var_coords_gg$PC2_start <- 0

p <- ggplot(var_coords_gg) +
  geom_segment(aes(x = PC1_start, y = PC2_start, 
                   xend = PC1_end, yend = PC2_end,
                   color = contrib,
                   text = paste(Variable, "<br>Contribución:", contrib, "%")),
               arrow = arrow(length = unit(0.2, "cm")),
               size = 1) +
  geom_point(aes(x = PC1_end, y = PC2_end, 
                 color = contrib,
                 text = paste(Variable, "<br>Contribución:", contrib, "%")),
             size = 2,
             show.legend = FALSE) +
  geom_text(aes(x = PC1_end * 1.08, y = PC2_end * 1.08, 
                label = Variable, color = contrib),
            size = 3.5) +
  annotate("path",
           x = cos(seq(0, 2*pi, length.out = 100)),
           y = sin(seq(0, 2*pi, length.out = 100)),
           color = "gray", linetype = "dashed") +
  geom_point(aes(x = 0, y = 0), size = 2, color = "black") +
  scale_color_gradientn(colors = c("#1A5276", "#2E86C1", "#5DADE2", "#F5B041", "#C0392B"),
                        name = "Contribución (%)",
                        limits = c(0, 3),
                        breaks = seq(0, 3, by = 0.5)) +
  geom_hline(yintercept = 0, linetype = "solid", color = "gray", alpha = 0.5) +
  geom_vline(xintercept = 0, linetype = "solid", color = "gray", alpha = 0.5) +
  coord_fixed(xlim = c(-1.1, 1.1), ylim = c(-1.1, 1.1)) +
  labs(title = "",
       x = paste0("PC1 (", round(summary(res.pca)$importance[2,1]*100, 1), "%)"),
       y = paste0("PC2 (", round(summary(res.pca)$importance[2,2]*100, 1), "%)")) +
  theme_minimal() +
  theme(legend.position = "right")

ggplotly(p, tooltip = "text") %>%
  layout(title = "Círculo de Correlaciones",
         hoverlabel = list(bgcolor = "white", font = list(size = 12)))

El primer componente del gráfico funciona principalmente como un reflejo de la inflación y los valores nominales, es decir, los datos medidos a precios corrientes sin ajustar por la pérdida de valor del dinero. La fuerte alineación de indicadores como el PIB nominal (Crec. PIB nom.), el deflactor (Defl. PIB) y los índices de precios (Defl. exp.), (Defl. imp.) y (Nivel precios) apunta en una misma dirección horizontal, lo que demuestra que la mayor diferencia entre los países proviene de su estabilidad de precios, ya que todas estas variables se mueven juntas cuando la inflación sube.

Después de alejarse de este conjunto horizontal, las variables se separan en distintas direcciones del círculo de correlación para mostrar cómo se dividen el gasto interno frente al comercio exterior. Esto se nota en el camino que toman hacia el cuadrante inferior derecho variables de demanda como el crecimiento de las importaciones (Crec. imp.), la inversión (Crec. inv.) y el consumo (Crec. consumo), o en el sentido opuesto que toman hacia el cuadrante superior izquierdo la balanza corriente (Bal. cta. cte.) y las exportaciones netas (Exp. netas), las cuales miden el superávit comercial (cuando un país le vende al mundo más de lo que le compra). Esta organización sugiere que el gráfico logra dividir los indicadores en fuerzas económicas diferentes, separando los fenómenos de precios de aquellos relacionados con el gasto real y el comercio.

Finalmente, se puede ver que hay algunas flechas con líneas cortas y colores fríos que se quedan en el puro centro del plano, representadas de forma clara por el crecimiento de las exportaciones (Crec. exp.) y el desempleo (Desempleo). Esto muestra la existencia de indicadores con una contribución baja y muy poco peso dentro de los dos primeros componentes principales, lo que delata que el mercado laboral y las exportaciones totales aportan poca información para explicar las diferencias iniciales entre las naciones estudiadas y requerirían de otros componentes independientes para ser analizados a fondo.

Biplot

colnames(trans) <- c("Bal. cta. cte.", "Exp. netas", 
                         "Crec. exp.", "Crec. imp.",
                         "Crec. PIB", "Crec. PIB nom.", 
                         "Defl. PIB", "Crec. inv.", 
                         "Crec. consumo", "Crec. gobierno",
                         "Defl. exp.", "Defl. imp.",
                         "Nivel precios", "Desempleo", "Tasa int.")


res.pca <- prcomp(trans, scale. = TRUE)

ind_coords <- as.data.frame(res.pca$x[, 1:2])
colnames(ind_coords) <- c("PC1", "PC2")
ind_coords$Pais <- paises
ind_coords$tipo <- "País"

var_coords <- as.data.frame(res.pca$rotation[, 1:2])
colnames(var_coords) <- c("PC1", "PC2")
var_coords$Variable <- rownames(var_coords)
var_coords$tipo <- "Variable"

var_coords$contrib <- round((var_coords$PC1^2 + var_coords$PC2^2) / sum(res.pca$sdev[1:2]^2) * 100, 2)

scale_factor <- 5
var_coords$PC1_scaled <- var_coords$PC1 * scale_factor
var_coords$PC2_scaled <- var_coords$PC2 * scale_factor

p <- ggplot() +
  geom_point(data = ind_coords, 
             aes(x = PC1, y = PC2, 
                 text = paste("País:", Pais,
                              "<br>PC1:", round(PC1, 2),
                              "<br>PC2:", round(PC2, 2)),
                 color = "Países"),
             size = 2.5, alpha = 0.7) +
  geom_text(data = ind_coords,
            aes(x = PC1, y = PC2, label = Pais),
            size = 3, hjust = -0.1, vjust = 0.5, check_overlap = TRUE) +
  geom_segment(data = var_coords,
               aes(x = 0, y = 0, 
                   xend = PC1_scaled, yend = PC2_scaled,
                   color = "Variables",
                   text = paste("Variable:", Variable,
                                "<br>Contribución:", contrib, "%")),
               arrow = arrow(length = unit(0.2, "cm")),
               size = 1) +
  geom_text(data = var_coords,
            aes(x = PC1_scaled * 1.08, y = PC2_scaled * 1.08, 
                label = Variable),
            size = 3.5, color = "#C0392B", fontface = "bold") +
  geom_point(data = var_coords,
             aes(x = PC1_scaled, y = PC2_scaled),
             size = 2, color = "#C0392B") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray", alpha = 0.5) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray", alpha = 0.5) +
  scale_color_manual(name = "Tipo",
                     values = c("Países" = "#2E86C1", "Variables" = "#C0392B")) +
  coord_fixed(ratio = 1) +
  labs(title = "Biplot - Componentes Principales",
       x = paste0("PC1 (", round(summary(res.pca)$importance[2,1]*100, 1), "%)"),
       y = paste0("PC2 (", round(summary(res.pca)$importance[2,2]*100, 1), "%)")) +
  theme_minimal() +
  theme(legend.position = "bottom")

ggplotly(p, tooltip = "text") %>%
  layout(
    title = list(text = "Biplot: Países y Variables Económicas",
                 x = 0.5,
                 font = list(size = 14)),
    hoverlabel = list(bgcolor = "white", font = list(size = 12)),
    legend = list(orientation = "h", x = 0.4, y = -0.1)
  )

La mayor parte de los países se encuentra agrupada en el centro y hacia el lado izquierdo del plano cartesiano, muy cerca del punto donde nacen las flechas. La gran mayoría de las naciones se concentran en esta zona estable, como Alemania, Japón, Francia y Estados Unidos, lo que representa economías equilibradas cuyos indicadores no muestran variaciones extremas y se mantienen bajo condiciones controladas en comparación con el resto de la muestra.

Después de salir de este grupo principal, las observaciones y las variables se separan en distintas direcciones del plano. Esto se nota en el salto vertical que da Irlanda hacia la parte más alta, así como en el camino que toman hacia abajo y a la derecha países como Colombia, Perú y Chile, los cuales aparecen fuertemente alineados con las flechas del crecimiento de las importaciones (Crec. imp.), la inversión (Crec. inv.) y el consumo (Crec. consumo). Esto sugiere que el gráfico logra dividir a los países según sus motores económicos, separando a las potencias tradicionales de aquellas naciones cuyo comportamiento está muy guiado por el gasto interno y la demanda.

Hay un par de puntos aislados y muy alejados de todos los demás hacia el extremo derecho del primer componente, representados por Türkiye y, de forma todavía más marcada, por Argentina, que se desplaza casi hasta el valor 11. Su posición en el mapa coincide exactamente con la dirección de las flechas largas que representan al PIB nominal (Crec. PIB nom.), el deflactor (Defl. PIB) y los índices de precios (Defl. exp.), (Defl. imp.) y (Nivel precios), lo que muestra la existencia de economías con un escenario de alta inflación y distorsión de precios fuera de lo común, lo cual las saca por completo de la realidad del resto del grupo analizado.

Dendrograma

library(colorspace)

datos_dist   <- dist(datos_escalados)
modelo_ward  <- hclust(datos_dist, method = "ward.D2")
s_clusters     <- cutree(modelo_ward, k = 2)
dendro  <- as.dendrogram(modelo_ward)
altura_corte <- mean(c(modelo_ward$height[length(modelo_ward$height) - 1],
                       modelo_ward$height[length(modelo_ward$height) - 2]))
dendro %>%
  color_branches(k = 2) %>%
  color_labels(k = 2) %>%
  plot(main = "Dendrograma — Método de Ward",
       sub  = "2 clusters",
       cex  = 0.6)
abline(h = altura_corte, lty = 2, col = "red", lwd = 1.5)

Cluster 1

Este cluster está conformado únicamente por Türkiye y Argentina.

Ambos países forman un grupo claramente diferenciado del resto de las economías analizadas. Además, se observa que se unen entre sí antes de integrarse al resto de los países, lo que indica que comparten características económicas similares dentro de las variables seleccionadas. Sin embargo, el hecho de que este grupo se conecte con el resto del dendrograma a una altura elevada sugiere que presentan un comportamiento económico significativamente distinto respecto a los demás países de la muestra.

Cluster 2

Este cluster reúne a todos los demás países analizados, incluyendo economías desarrolladas y emergentes como Chile, Colombia, Perú, India, Estados Unidos, Alemania, Japón, Canadá, España, Brasil y Sudáfrica, entre otros.

Dentro de este gran grupo se identifican varios subgrupos con altos niveles de similitud:

-Chile, Colombia, India y Perú presentan una cercanía importante.

-Alemania y Suiza forman una agrupación temprana.

-Australia y Canadá muestran comportamientos similares.

-Dinamarca, Países Bajos y Luxemburgo conforman otro subgrupo homogéneo.

-Austria, Bélgica y Portugal aparecen estrechamente relacionados.

El resultado indica que Türkiye y Argentina presentan características económicas atípicas respecto al conjunto de países analizados, lo que podría estar asociado a diferencias en variables como productividad, empleo, crecimiento económico, inversión o indicadores estructurales incluidos en la base de datos. En contraste, el resto de los países comparten patrones más similares entre sí, razón por la cual permanecen agrupados en un mismo cluster hasta niveles de distancia más bajos.

Dendrograma comparativo

datos_dist   <- dist(datos_escalados)
modelo_ward  <- hclust(datos_dist, method = "ward.D2")
s_clusters     <- cutree(modelo_ward, k = 3)
dendro  <- as.dendrogram(modelo_ward)
altura_corte <- mean(c(modelo_ward$height[length(modelo_ward$height) - 1],
                       modelo_ward$height[length(modelo_ward$height) - 2],
                       modelo_ward$height[length(modelo_ward$height) - 3]))
dendro %>%
  color_branches(k = 3) %>%
  color_labels(k = 3) %>%
  plot(main = "Dendrograma comparativo — Método de Ward",
       sub  = "3 clusters",
       cex  = 0.6)
abline(h = altura_corte, lty = 2, col = "red", lwd = 1.5)

Se realiza un segundo dendrograma comparativo con la intención de conseguir una segmentación más equilibrada e identificar patrones intermedios entre las economías analizadas.

La solución de tres clusters permite distinguir no solo a los países más atípicos, sino también separar economías con características similares dentro del grupo principal, mejorando la interpretación de los resultados.

Cluster 1

Como se habia evidenciado previamente, este cluster está formado por: Türkiye y Argentina

Este grupo permanece aislado incluso cuando se aumenta el número de clusters, lo que confirma que ambos países presentan características económicas significativamente diferentes respecto al resto de la muestra.

La elevada distancia a la que se unen con los demás países indica que comparten patrones particulares en los indicadores seleccionados, posiblemente asociados con mayores desequilibrios macroeconómicos, menor desempeño relativo o estructuras económicas diferentes frente a los países de la OCDE.

Cluster 2

Este cluster esta formado por: Chile, Colombia, India y Perú.

Este nuevo grupo surge al dividir el gran cluster obtenido anteriormente.

La agrupación de estos países sugiere que comparten características económicas similares y un nivel de desarrollo relativamente distinto al de las economías más avanzadas de la muestra. Además, se observa una alta proximidad entre Chile y Colombia, India y Perú.

Cluster 3

El cluster 3 incluye a países como Irlanda, Nueva Zelanda, Reino Unido, Japón, Alemania, Suiza, República Checa, Finlandia, República Eslovaca, Italia, Australia, Canadá, Corea, Dinamarca, Luxemburgo, Suecia, Hungría, Estados Unidos, Rumania, Islandia, México, Grecia, Costa Rica, Israel, Eslovenia, Estonia, Polonia, Austria, Francia, Bélgica, Portugal, Italia, España, Brasil y Sudáfrica

Este grupo concentra la mayoría de los países y muestra una estructura interna compleja con diversos subgrupos de alta similitud.

Algunas asociaciones destacadas son:

  • Alemania y Suiza.

  • Australia y Canadá.

  • Dinamarca y Luxemburgo.

  • Austria, Bélgica y Portugal.

  • España y Brasil.

  • Eslovenia, Estonia y Polonia.

Estas uniones ocurren a distancias bajas, indicando comportamientos económicos relativamente parecidos.

Analisis de Clusters

Selección del número de grupos

componentes <- as.data.frame(res.pca$x[, 1:2])

p <- fviz_nbclust(
  componentes,
  FUN = kmeans,
  method = "silhouette"
) +
  labs(
    title = "Selección del número óptimo de clusters",
    x = "Número de grupos",
    y = "Ancho promedio de silueta"
  ) +
  theme_minimal()

ggplotly(p) %>%
  layout(
    title = "Selección del número óptimo de clusters",
    xaxis = list(title = "Número de grupos"),
    yaxis = list(title = "Ancho promedio de silueta"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El punto más alto de la gráfica se encuentra en el número 2, donde el ancho promedio de la silueta alcanza su valor máximo superando el 0.6. Esto demuestra que la estructura de agrupación ideal para los datos consiste en dividir la muestra en dos conjuntos principales de países bien diferenciados.

Después de caer notablemente al pasar a 3 grupos, la línea desciende de manera generalizada hacia el lado derecho conforme aumenta el número de agrupaciones. Esto sugiere que añadir más conjuntos hace que los límites entre las economías se vuelvan difusos y se mezclen entre sí, perdiendo claridad analítica.

La curva refleja la búsqueda del número óptimo de clusters, una técnica de clasificación para agrupar elementos con características comunes. El modelo concluye que solo quedan dos grupos debido a la influencia de países atípicos como Argentina y Türkiye. Al presentar distorsiones extremas en su nivel de precios e inflación en comparación con el bloque mayoritario de naciones estables, estos casos particulares rompen cualquier intento de división intermedia. La realidad de los datos es tan polarizada que la única forma limpia de agruparlos es separar el comportamiento normal y equilibrado del resto del mundo de las dinámicas inflacionarias extremas de este pequeño grupo.

K-means

set.seed(21)
modelo <- kmeans(
  componentes,
  centers = 2,
  nstart = 25
)
fviz_cluster(
  modelo,
  data = componentes,
  ellipse.type = "convex",
  repel = TRUE
) +
  labs(
    title = "Agrupación de países mediante K-Means"
  ) +
  theme_minimal()

El análisis muestra la división de la muestra mediante el algoritmo de K-Means, confirmando la existencia de dos grupos independientes con comportamientos totalmente opuestos.

El primer grupo (cluster 1) abarca a la inmensa mayoría de las naciones estudiadas. En esta agrupación se concentran economías globales como Alemania, Japón, Francia y Estados Unidos. A pesar de sus diferencias internas en consumo o inversión, visibles en la separación vertical que lleva a Irlanda a la cima y a Chile a la base, todas ellas comparten un rasgo macroeconómico fundamental: la estabilidad en sus niveles de precios y una inflación bajo control.

Por el contrario, hacia el extremo derecho del eje horizontal se consolida de forma aislada el segundo grupo (cluster 2), integrado de manera exclusiva por países atípicos como Türkiye y Argentina. Al estar completamente desconectados del bloque mayoritario, la formación de este grupo evidencia un escenario de distorsión monetaria y alta inflación fuera de los parámetros normales del resto del mundo. El gráfico demuestra así que la realidad de los datos está tan polarizada que el algoritmo separa limpiamente el comportamiento económico regular y controlado de las crisis inflacionarias extremas de este pequeño grupo.

Caracterización de los grupos

Contribución de variables por componente

contrib1 <- as.data.frame(res.pca$rotation[, 1]^2 / sum(res.pca$rotation[, 1]^2) * 100)
colnames(contrib1) <- "Contribucion"
contrib1$Variable <- rownames(contrib1)

p <- ggplot(contrib1, aes(x = reorder(Variable, Contribucion), 
                           y = Contribucion,
                           text = paste("Variable:", Variable,
                                        "<br>Contribución:", round(Contribucion, 2), "%"))) +
  geom_bar(stat = "identity", fill = "#6090F0") +
  coord_flip() +
  labs(title = "Contribución en componente 1",
       x = "Variable", y = "Contribución (%)") +
  theme_minimal()

ggplotly(p, tooltip = "text") %>%
  layout(
    title = "Contribución en componente 1",
    xaxis = list(title = "Contribución (%)"),
    yaxis = list(title = "Variable"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El primer componente está dominado por variables de precios y valores nominales. Las de mayor contribución son Crecimiento del PIB nominal (14.77%) , Deflactor de exportaciones (14.0%) , Deflactor de importaciones (13.68%) , Deflactor del PIB (13.62%) y Nivel de precios (13.13%) . En conjunto, estas cinco variables concentran más del 66% del componente, confirmando que la inflación y las distorsiones de precios son el principal factor de diferenciación entre los países de la OCDE.

Con contribuciones medias aparecen Crecimiento de la inversión (6.2%) , Crecimiento del consumo (6%) y Tasa de interés (5.7%) , lo que sugiere que la inflación afecta el comportamiento de la demanda interna y la política monetaria, aunque de manera secundaria. El resto de variables (crecimiento real, comercio exterior, empleo y gasto público) presentan contribuciones bajas o marginales, indicando que el desempeño productivo y el mercado laboral no están fuertemente asociados con la dinámica inflacionaria en la muestra analizada.

La dominancia de este componente (40.2% de la varianza total) explica por qué la segmentación en dos clusters separa a la gran mayoría de países con inflación controlada de Argentina y Türkiye, cuyas distorsiones de precios los ubican en el extremo positivo del componente. Esto sugiere que, para los países de la OCDE, la estabilidad monetaria es un factor más relevante que el crecimiento real o el empleo para explicar las diferencias estructurales entre las economías.

contrib2 <- as.data.frame(res.pca$rotation[, 2]^2 / sum(res.pca$rotation[, 2]^2) * 100)
colnames(contrib2) <- "Contribucion"
contrib2$Variable <- rownames(contrib2)

p <- ggplot(contrib2, aes(x = reorder(Variable, Contribucion), 
                           y = Contribucion,
                           text = paste("Variable:", Variable,
                                        "<br>Contribución:", round(Contribucion, 2), "%"))) +
  geom_bar(stat = "identity", fill = "#8B3A62") +
  coord_flip() +
  labs(title = "Contribución en componente 2",
       x = "Variable", y = "Contribución (%)") +
  theme_minimal()

ggplotly(p, tooltip = "text") %>%
  layout(
    title = "Contribución en componente 2",
    xaxis = list(title = "Contribución (%)"),
    yaxis = list(title = "Variable"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El segundo componente está dominado por variables relacionadas con el sector externo, destacando las Exportaciones netas (22.8%), el Crecimiento de las importaciones (21%) y la Balanza por cuenta corriente (17.6%). La alta contribución de estas tres variables refleja una oposición clara: países con altas exportaciones netas y superávit en cuenta corriente se ubican en un extremo, mientras que aquellos con alto crecimiento de importaciones y déficit externo se sitúan en el opuesto. Esta estructura indica que el componente 2 captura las vulnerabilidades comerciales de los países.

El Crecimiento de la inversión (12.5%) y el Crecimiento del consumo (6.4%) también contribuyen, pero en menor medida, lo que sugiere que el gasto interno está asociado al aumento de importaciones, como se esperaría en economías con alta demanda doméstica. El resto de variables presentan contribuciones bajas, indicando que la dinámica del comercio exterior es el factor más relevante en este componente.

En conjunto, el componente 2 separa a los países según su dependencia comercial: aquellos que crecen mediante el gasto interno tienden a importar más y deteriorar su balanza, mientras que los que mantienen superávits comerciales dependen más del sector externo. Esta dimensión complementa al componente 1, diferenciando a los países no solo por su estabilidad de precios, sino también por su vulnerabilidad externa y el motor de su crecimiento económico.

contrib3 <- as.data.frame(res.pca$rotation[, 3]^2 / sum(res.pca$rotation[, 3]^2) * 100)
colnames(contrib3) <- "Contribucion"
contrib3$Variable <- rownames(contrib3)

p <- ggplot(contrib3, aes(x = reorder(Variable, Contribucion), 
                           y = Contribucion,
                           text = paste("Variable:", Variable,
                                        "<br>Contribución:", round(Contribucion, 2), "%"))) +
  geom_bar(stat = "identity", fill = "#852C2C") +
  coord_flip() +
  labs(title = "Contribución en componente 3",
       x = "Variable", y = "Contribución (%)") +
  theme_minimal()

ggplotly(p, tooltip = "text") %>%
  layout(
    title = "Contribución en componente 3",
    xaxis = list(title = "Contribución (%)"),
    yaxis = list(title = "Variable"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El tercer componente refleja principalmente el dinamismo real de la economía, con las variables de crecimiento de exportaciones (27.3%) y crecimiento del PIB (24.7%) como las de mayor contribución. Esta alta participación de ambas variables sugiere que el componente captura la capacidad de los países para expandir su producción y su inserción internacional de manera conjunta, es decir, economías donde el crecimiento está vinculado al desempeño exportador.

El crecimiento del consumo (12.1%) y las exportaciones netas (12.3%) también contribuyen, aunque con menor peso, lo que indica que la demanda interna y el saldo comercial acompañan, en cierta medida, esta dinámica de crecimiento real. El resto de variables presentan contribuciones bajas, destacando la escasa participación de la balanza por cuenta corriente, el desempleo y el crecimiento nominal, lo que confirma que este componente no está asociado con desequilibrios externos ni con distorsiones de precios.

En contraste con el componente 1 (inflación) y el componente 2 (vulnerabilidad externa), el componente 3 se asocia a una dimensión más virtuosa del desempeño económico, donde el crecimiento real y las exportaciones se mueven en la misma dirección. Esto sugiere que ciertos países logran combinar expansión productiva con apertura comercial, un rasgo distintivo de economías competitivas que no depende ni de la estabilidad de precios ni de la balanza comercial. La baja contribución del desempleo y el gasto público indica que estos factores no están necesariamente alineados con el dinamismo exportador en la muestra analizada.

contrib4 <- as.data.frame(res.pca$rotation[, 4]^2 / sum(res.pca$rotation[, 4]^2) * 100)
colnames(contrib4) <- "Contribucion"
contrib4$Variable <- rownames(contrib4)

p <- ggplot(contrib4, aes(x = reorder(Variable, Contribucion), 
                           y = Contribucion,
                           text = paste("Variable:", Variable,
                                        "<br>Contribución:", round(Contribucion, 2), "%"))) +
  geom_bar(stat = "identity", fill = "#2F4F4F") +
  coord_flip() +
  labs(title = "Contribución en componente 4",
       x = "Variable", y = "Contribución (%)") +
  theme_minimal()

ggplotly(p, tooltip = "text") %>%
  layout(
    title = "Contribución en componente 4",
    xaxis = list(title = "Contribución (%)"),
    yaxis = list(title = "Variable"),
    hoverlabel = list(bgcolor = "white", font = list(size = 12))
  )

El cuarto componente está dominado de manera abrumadora por el Crecimiento del gasto gobierno (48%) , lo que indica que esta dimensión captura esencialmente la dinámica de la política fiscal. La alta contribución de esta variable sugiere que el componente 4 separa a los países según el comportamiento de su gasto público, siendo este el rasgo más distintivo de esta dimensión.

El Desempleo (12%) y el Crecimiento del PIB (11.8%) también contribuyen, aunque con mucho menor peso, lo que sugiere una relación entre el gasto público, el empleo y la actividad económica, consistente con la lógica keynesiana de que el gasto gubernamental estimula el crecimiento y reduce el desempleo en el corto plazo.

El Crecimiento de exportaciones (10%) y la Tasa de interés (6%) completan las contribuciones relevantes, indicando que la política fiscal puede estar relacionada con el sector externo y las condiciones monetarias. El resto de variables presentan contribuciones marginales (inferiores al 4%), lo que confirma que esta dimensión es específica del rol del Estado en la economía.

En conjunto, este componente complementa a los tres anteriores al capturar las diferencias en la intervención estatal, un aspecto que no estaba recogido ni por la inflación (PC1), ni por la vulnerabilidad externa (PC2), ni por el dinamismo real (PC3). Su contribución del 10% indica que la política fiscal es un factor relevante pero secundario en la diferenciación de los países de la OCDE.

Países agrupados por cluster

paises <- rownames(datos_escalados)
clusters <- modelo$cluster

c1 <- paises[clusters == 1]
c2 <- paises[clusters == 2]

# Dividir Cluster 1 en dos columnas
n1 <- ceiling(length(c2)/2)

c2a <- c2[1:n1]
c2b <- c2[(n1+1):length(c2)]

# Igualar tamaños
max_len <- max(length(c2a), length(c2b), length(c1))

rellenar <- function(x, n){
  c(x, rep("", n - length(x)))
}

c2a <- rellenar(c2a, max_len)
c2b <- rellenar(c2b, max_len)
c1  <- rellenar(c1, max_len)

tabla_clusters <- data.frame(
  Cluster1   = c1,
  Cluster2_A = c2a,
  Cluster2_B = c2b,
  check.names = FALSE
)

kable(
  tabla_clusters,
  align = "c",
  col.names = c("", "", "")
) %>%
  add_header_above(c(
    "Cluster 1" = 1,
    "Cluster 2" = 2
  )) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center",
    font_size = 14
  ) %>%
  row_spec(
    0,
    bold = TRUE,
    color = "white",
    background = "#1F4E79"
  ) %>%
  column_spec(
    1,
    background = "#EAF2F8"
  ) %>%
  column_spec(
    2:3,
    background = "#EAFAF1"
  )
Cluster 1
Cluster 2
Türkiye Australia Luxembourg
Argentina Austria Mexico
Belgium Netherlands
Canada New Zealand
Chile Norway
Colombia Poland
Czech Republic Portugal
Denmark Slovak Republic
Estonia Slovenia
Finland Spain
France Sweden
Germany Switzerland
Greece United Kingdom
Hungary United States
Iceland Brazil
Ireland Croatia
Israel India
Italy Peru
Japan Romania
Korea SouthAfrica

La segmentación obtenida confirma que la inflación y la estabilidad de precios son los principales factores que diferencian a los países de la OCDE. El Cluster 1 agrupa realidades económicas diversas, desde potencias industriales hasta economías en desarrollo, lo que indica que la estabilidad monetaria es un denominador común que trasciende el nivel de ingreso o la estructura productiva. En contraste, el Cluster 2 funciona como una categoría residual que aísla a los países que no logran mantener el control inflacionario.

Sin embargo, esta estructura debe interpretarse con cautela. El Cluster 1, al ser tan amplio, oculta diferencias importantes en términos de desarrollo económico, productividad y bienestar social que no están siendo capturadas por las variables seleccionadas. Asimismo, el Cluster 2 no necesariamente refleja una lógica económica compartida entre Argentina y Türkiye más allá de su condición de outliers inflacionarios. Sus contextos geopolíticos, niveles de desarrollo y estructuras productivas son profundamente diferentes, por lo que su agrupación responde más a un efecto estadístico (el algoritmo aísla observaciones extremas) que a una verdadera similitud estructural.

Desde una perspectiva de política económica, los resultados sugieren que la estabilización monetaria es un prerrequisito para la convergencia con las economías desarrolladas, mientras que el crecimiento real y el empleo, aunque importantes, no logran compensar los efectos de la inflación descontrolada. La segmentación en dos clusters evidencia que la pertenencia a la OCDE no garantiza automáticamente estabilidad macroeconómica, y que los países con crisis inflacionarias quedan excluidos de las dinámicas del grupo mayoritario.

Conclusiones

El presente trabajo permitió identificar patrones económicos diferenciados entre los países de la OCDE mediante técnicas de aprendizaje no supervisado, confirmando que la estabilidad de precios es el factor más relevante para explicar las diferencias estructurales entre las economías analizadas.

Hallazgos principales

La inflación como factor de diferenciación dominante. El primer componente principal concentra el 40.2% de la varianza total y está dominado por variables de precios y valores nominales (Crecimiento del PIB nominal, Deflactores y Nivel de precios), lo que indica que la estabilidad monetaria es el elemento que más separa a los países de la muestra. Este hallazgo explica por qué la segmentación en dos clusters separa a la gran mayoría de países con inflación controlada de Argentina y Türkiye, cuyas distorsiones inflacionarias los ubican en el extremo positivo del componente. La dominancia de variables nominales sobre variables reales sugiere que, para los países de la OCDE, las diferencias en crecimiento y empleo son secundarias frente a las disparidades en estabilidad monetaria.

Complementariedad de dimensiones económicas. El segundo componente (18.2% de varianza) captura las vulnerabilidades comerciales, separando a países con superávit externo de aquellos con déficit y alto crecimiento de importaciones. El tercer componente (12.4%) refleja el dinamismo real de la economía, vinculando crecimiento del PIB con desempeño exportador. El cuarto componente (10.0%) recoge la dinámica de la política fiscal, destacando el rol del gasto público. En conjunto, estos cuatro componentes explican el 80.8% de la varianza total, confirmando que la estructura de los datos puede resumirse eficientemente en un número reducido de dimensiones.

Segmentación polarizada en dos clusters. La validación mediante el método de silueta confirmó que la estructura óptima de agrupación corresponde a k=2. El Cluster 1 agrupa a la mayoría de los países, incluyendo economías desarrolladas y emergentes, caracterizados por estabilidad de precios e inflación controlada. El Cluster 2, compuesto exclusivamente por Argentina y Türkiye, se distingue por presentar distorsiones inflacionarias extremas que los aíslan del resto. Esta segmentación evidencia que la pertenencia a la OCDE no garantiza automáticamente estabilidad macroeconómica, y que los países con crisis inflacionarias quedan excluidos de las dinámicas del grupo mayoritario.

Limitaciones

El Cluster 1 agrupa a 40 países con realidades muy distintas, desde potencias como Alemania hasta economías emergentes como Colombia, ocultando diferencias importantes en desarrollo, productividad y bienestar. Por su parte, el Cluster 2 no refleja una verdadera similitud entre Argentina y Türkiye más allá de su condición de casos extremos en materia de inflación, ya que sus contextos geopolíticos y estructuras productivas son muy diferentes; su agrupación responde más a un efecto estadístico —el algoritmo aísla valores atípicos— que a una verdadera semejanza económica. Además, los resultados dependen de las variables elegidas y del período analizado, por lo que la división en dos grupos, aunque válida estadísticamente, simplifica demasiado una realidad económica que es más compleja.

Recomendaciones

Para futuros estudios se sugiere: (i) incluir más indicadores como productividad y calidad institucional; (ii) analizar datos de varios años para ver cómo evolucionan los grupos; (iii) probar con 3 o 4 clusters para ver si aparecen grupos intermedios; y (iv) complementar con estudios específicos sobre Argentina y Türkiye para entender las causas particulares de sus crisis inflacionarias.

Finalizando, el trabajo muestra que las técnicas no supervisadas son útiles para agrupar países según sus características económicas, pero también revela que la estructura de los datos está muy influenciada por la presencia de casos extremos y que la división en dos grupos, aunque válida estadísticamente, esconde una heterogeneidad importante que debería explorarse en futuras investigaciones.

Bibliografía

  • James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning: With Applications in R (2nd ed.). Springer.

  • Jolliffe, I. T., & Cadima, J. (2016). Principal Component Analysis: A Review and Recent Developments. Philosophical Transactions of the Royal Society A, 374(2065), 20150202.

  • MacQueen, J. (1967). Some Methods for Classification and Analysis of Multivariate Observations. En Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability (pp. 281-297).

  • Kaufman, L., & Rousseeuw, P. J. (2005). Finding Groups in Data: An Introduction to Cluster Analysis. Wiley.

  • Barandica, J. (2022). Joaqui Barandica - Unsupervised learning ‘credit card clients’. Recuperado de https://www.joaquibarandica.com/post/ansupervised/

  • OECD. (2026). Data Explorer — Economic Outlook. OECD. https://data-explorer.oecd.org