La base de datos LifeCycleSavings contiene datos macroeconómicos de 50 países, recopilados para analizar el ahorro de los hogares en función del ciclo de vida como un promedio entre los años 1960 y 1970. Cada observación representa un país y las variables incluyen aspectos económicos como la tasa de ahorro nacional, el ingreso per cápita, la tasa de crecimiento demográfico, y otros indicadores relevantes.
Las variables principales de la base de datos son:
ahorro_agr: tasa de ahorro nacional (porcentaje del ingreso disponible).
pct_pob_menor_15: porcentaje de la población menor de 15 años.
pct_pob_mayor_75: porcentaje de la población mayor de 75 años.
ingreso_disponible_percapita: ingreso per cápita disponible ajustado.
tasa_crecimiento_ingreso: tasa de crecimiento anual del ingreso per cápita.
# Cargar datos y librerías
data("LifeCycleSavings")
datos <- scale(LifeCycleSavings)
colnames(datos) <- c("ahorro_agr","pct_pob_menor_15", "pct_pob_mayor_75", "ingreso_disponible_percapita", "tasa_crecimiento_ingreso")
library(factoextra)
# Método del codo
fviz_nbclust(x = datos, FUNcluster = kmeans, method = "wss",
diss = dist(datos, method = "euclidean")) +
geom_vline(xintercept = 3, linetype = 2)
En el gráfico de codo generado a partir de la base de datos LifeCycleSavings, se observa una disminución pronunciada en la suma total de cuadrados internos al incrementar el número de clusters desde 1 hasta 3. A partir de k = 4, la reducción se vuelve considerablemente más lenta, mostrando una tendencia a estabilizarse.
# Clustering k-means con 3 grupos
set.seed(123)
km_clusters <- kmeans(x = datos, centers = 3, nstart = 25)
# Visualización de clusters
fviz_cluster(object = km_clusters, data = datos, show.clust.cent = TRUE,
ellipse.type = "euclid", star.plot = TRUE, repel = TRUE) +
theme_bw() +
theme(legend.position = "none")
En el gráfico obtenido se evidencia una clara división en tres clusters, lo cual coincide con el resultado del gráfico de codo, que indicó un valor óptimo de k = 3.
El cluster azul agrupa principalmente a países desarrollados de distintos continentes, cuya similitud radica en perfiles económicos estables y consolidados, reflejados en las variables de la base de datos.
El cluster rojo, por su parte, está conformado mayormente por países subdesarrollados, que presentan niveles económicos más bajos, particularmente en indicadores como el PIB per cápita y su crecimiento.
Finalmente, el cluster verde representa a países en vías de desarrollo, los cuales se posicionan en un punto intermedio. Estos países muestran valores atípicos en algunas variables económicas, lo que los distingue tanto de los países desarrollados como de los subdesarrollados.
En conjunto, el análisis permitió evidenciar una segmentación coherente entre los países, agrupándolos según similitudes en sus características económicas.
Para el clustering jerárquico primero se crea una matriz de distancias entre todas las observaciones (países) y se usa la distancia euclidiana, que mide “qué tan lejos están” dos puntos en un espacio n-dimensional.
# Matriz de distancias euclídeas
mat_dist <- dist(x = datos, method = "euclidean")
Ahora se crearan dos dendrogramas, el primero completo es decir usa la distancia máxima entre elementos de grupos y el otro average el cual usa la distancia promedio entre todos los elementos. Ambos intentan agrupar países por similitud, pero con diferentes formas de medirla.
# Dendrogramas con linkage complete y average
hc_complete <- hclust(d = mat_dist, method = "complete")
hc_average <- hclust(d = mat_dist, method = "average")
A continuación se compara la matriz original de distancias con las distancias en el dendrograma a esto se llama correlación cophenética.
# Comparación de correlación cophenética
cor(x = mat_dist, cophenetic(hc_complete))
## [1] 0.7138887
cor(x = mat_dist, cophenetic(hc_average))
## [1] 0.8035913
Cuanto más cerca de 1 esté el valor, mejor representa el dendrograma las distancias reales entre países, en este caso hc_average sera el que mejor lo represente.
Ahora se escala los datos, se calcular distancias euclidianas y se procede a hacer el clustering jerárquico con el método complete.
# Dendrograma con corte en k = 2 y k = 3
library(dplyr)
datos1 <- LifeCycleSavings
hc_completo <- datos1 %>% scale() %>% dist(method = "euclidean") %>%
hclust(method = "average")
Se visualizan dos dendrogramas con k = 2 y k = 3 clusters y se traza una línea horizontal punteada donde se hace el corte que forma dos grupos.
fviz_dend(x = hc_average, k = 2, cex = 0.6) +
geom_hline(yintercept = 4, linetype = "dashed")
fviz_dend(x = hc_average, k = 3, cex = 0.6) +
geom_hline(yintercept = 3.3, linetype = "dashed")
Para finalizar, se visualiza la distribución de los clusters resultantes en un gráfico mediante la función fviz_cluster, donde se muestran los grupos formados junto con elipses que limitan cada cluster, lo cual permitira observar cómo se agrupan los países en función de sus similitudes.
# Visualización de clusters jerárquicos
fviz_cluster(object = list(data = datos, cluster = cutree(hc_completo, k = 3)),
ellipse.type = "convex",
repel = TRUE,
show.clust.cent = FALSE) +
theme_bw()
El clustering jerárquico permitió identificar grupos de países con características económicas similares, como se observo en el anterior gráfico, el método de enlace “average” mostró mejor ajuste (mayor correlación cophenética). Al cortar el dendrograma en 2 o 3 clusters, esto mostro agrupaciones coherentes, diferenciando países con alto ahorro e ingreso de aquellos con menor desarrollo.
El modelo CLARA es especialmente útil cuando se trabaja con grandes volúmenes de datos y se busca robustez frente a valores atípicos, ya que utiliza medoides en lugar de medias y permite elegir diferentes métricas de distancia, como Manhattan. A diferencia del k-medias, que es más rápido pero sensible a outliers y solo funciona con variables numéricas, CLARA ofrece mayor flexibilidad y estabilidad. En comparación con el clustering jerárquico, que es útil para visualizar estructuras de datos pero ineficiente en grandes bases y muy sensible al ruido, CLARA es más escalable y eficiente. Por tanto, CLARA resulta una mejor opción cuando se necesita un equilibrio entre robustez, escalabilidad y flexibilidad, especialmente en contextos como el análisis de países con múltiples indicadores socioeconómicos.
Se instalan las librerías “cluster” y “factorextra” útiles y necesarias para realizar cluster, y en este caso, para la aplicación del algoritmo Clara.
library(cluster)
library(factoextra)
Se toma la muestra de 50 datos y se usan 3 clusters (K = 3) para encontrar el mejor agrupamiento, además de la distancia Manhattan (metric = “manhattan”) la cual es más robusta frente a valores extremos que la euclidiana.
# Aplicación de CLARA
clara_clusters <- clara(x = datos, k = 3, metric = "manhattan", stand = TRUE,
samples = 50, pamLike = TRUE)
clara_clusters
## Call: clara(x = datos, k = 3, metric = "manhattan", stand = TRUE, samples = 50, pamLike = TRUE)
## Medoids:
## ahorro_agr pct_pob_menor_15 pct_pob_mayor_75
## Norway 0.1292293 -0.9986749 1.0668039
## Nicaragua -0.5291930 1.0872702 -0.8390332
## Portugal 0.6291839 -0.6697752 0.4315249
## ingreso_disponible_percapita tasa_crecimiento_ingreso
## Norway 1.1346321 -0.04794641
## Nicaragua -0.7884175 -0.44517686
## Portugal -0.5321071 1.29706196
## Objective function: 2.755418
## Clustering vector: Named int [1:50] 1 1 1 2 2 1 2 2 2 2 1 2 1 1 1 3 2 2 ...
## - attr(*, "names")= chr [1:50] "Australia" "Austria" "Belgium" "Bolivia" "Brazil" "Canada" "Chile" ...
## Cluster sizes: 19 23 8
## Best sample:
## [1] Austria Belgium Bolivia Brazil Canada
## [6] Chile China Colombia Costa Rica Ecuador
## [11] Finland France Germany Greece Guatamala
## [16] Honduras Iceland India Ireland Italy
## [21] Japan Korea Luxembourg Malta Norway
## [26] Netherlands New Zealand Nicaragua Panama Paraguay
## [31] Peru Philippines Portugal South Africa South Rhodesia
## [36] Spain Sweden Switzerland Turkey United Kingdom
## [41] Venezuela Zambia Jamaica Uruguay Libya
## [46] Malaysia
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
Cada cluster fue representado por un medoide, que actúa como el país más representativo del grupo: Noruega para el primer cluster, Nicaragua para el segundo y Portugal para el tercero. Esta elección sugiere que el primer grupo agrupa a países desarrollados con altos niveles de ingreso per cápita y bajo nivel de pobreza; el segundo contiene países con condiciones socioeconómicas más críticas; y el tercero representa economías intermedias o emergentes.
# Visualización
fviz_cluster(object = clara_clusters, ellipse.type = "t", geom = "point") +
theme_bw() +
theme(legend.position = "none")
La distribución de los países fue de 19 en el grupo de Noruega, 8 en el de Nicaragua y 23 en el de Portugal.
En el caso en que se usan 3 cluster (K = 3) podemos notar como se solapan estos, denotando que hay una similitud o transición gradual entre algunos países, brindando más diversidad a la información. Por tanto, se realizara el análisis con CLARA k=2 para determirar mejor las caracteristicas de cada grupo.
Se toma la misma muestra de 50 datos y se usan 2 clusters (K = 2) para encontrar el mejor agrupamiento y la distancia Manhattan (metric = “manhattan”).
# Aplicación de CLARA
clara_clusters <- clara(x = datos, k = 2, metric = "manhattan", stand = TRUE,
samples = 50, pamLike = TRUE)
clara_clusters
## Call: clara(x = datos, k = 2, metric = "manhattan", stand = TRUE, samples = 50, pamLike = TRUE)
## Medoids:
## ahorro_agr pct_pob_menor_15 pct_pob_mayor_75
## Norway 0.1292293 -0.9986749 1.0668039
## Nicaragua -0.5291930 1.0872702 -0.8390332
## ingreso_disponible_percapita tasa_crecimiento_ingreso
## Norway 1.1346321 -0.04794641
## Nicaragua -0.7884175 -0.44517686
## Objective function: 3.140985
## Clustering vector: Named int [1:50] 1 1 1 2 2 1 2 2 2 2 1 2 1 1 1 1 2 2 ...
## - attr(*, "names")= chr [1:50] "Australia" "Austria" "Belgium" "Bolivia" "Brazil" "Canada" "Chile" ...
## Cluster sizes: 25 25
## Best sample:
## [1] Austria Belgium Bolivia Brazil Canada
## [6] China Colombia Costa Rica Ecuador Finland
## [11] France Germany Greece Guatamala Honduras
## [16] Iceland India Ireland Italy Japan
## [21] Korea Luxembourg Malta Norway Netherlands
## [26] New Zealand Nicaragua Paraguay Peru Philippines
## [31] Portugal South Africa South Rhodesia Spain Sweden
## [36] Switzerland Turkey United Kingdom Venezuela Zambia
## [41] Jamaica Uruguay Libya Malaysia
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
Los medoides ayudan a entender el perfil típico de cada cluster, en este caso los representantes de cada uno reflejan dos perfiles socioeconómicos extremos en los datos. Siendo Noruega el representante de ingresos altos, baja pobreza y alto desarrollo, y Nicaragua siendo todo lo contrario.
# Visualización
fviz_cluster(object = clara_clusters, ellipse.type = "t", geom = "point") +
theme_bw() +
theme(legend.position = "none")
Se ven 2 clusters balanceados con 25 países en cada grupo.
Además, al usar K=2, es posible ver que los cluster generados no se solapan, dando una mejor segmentación del comportamiento de ahorro de los hogares por paises.
El uso de K = 3 en los métodos de clustering aplicados (K-means, jerárquico y CLARA) permitió inicialmente identificar tres grupos distintos de países según su comportamiento de ahorro. De estos, dos clusters principales mostraron una clara segmentación basada en el nivel de ingreso disponible: uno compuesto por países desarrollados, con altos niveles de ahorro personal, y otro por países en vías de desarrollo, caracterizados por menores tasas de ahorro.
Sin embargo, el tercer cluster agrupó países sin patrones económicos o sociales consistentes, reflejando una dispersión de datos que no se ajusta a dinámicas globales reconocidas. Esta falta de cohesión sugiere que su inclusión no aporta valor interpretativo al análisis.
Por lo tanto, se concluye que el enfoque más apropiado es el uso del algoritmo CLARA con K = 2, el cual logra una segmentación más coherente y útil. Bajo esta configuración, los países se agrupan adecuadamente en función de sus dinámicas de ahorro personal y su nivel de desarrollo económico, permitiendo así una interpretación más clara y fundamentada de los resultados.
Base de datos encontrada con ayuda de ChatGPT.