El clustering es un método fundamental de minería de datos para descubrir conocimiento en conjuntos de datos multivariables. Su objetivo es identificar grupos de objetos similares dentro de un conjunto de datos. En este contexto, existen dos estrategias comunes: el clustering jerárquico, que busca agrupar observaciones similares, y el clustering por partición, como el algoritmo k-means, que divide un conjunto de datos en múltiples grupos. El enfoque HCPC (Agrupamiento Jerárquico en Componentes Principales) combina métodos de componentes principales, agrupamiento jerárquico y agrupamiento por partición, como k-means. En este capítulo, exploraremos la combinación de componentes principales y métodos de clustering, y aprenderemos cómo calcular y visualizar HCPC utilizando el software R.
La combinación de métodos de componentes principales y métodos de agrupamiento resulta útil en al menos tres situaciones.
Caso 1: Variables continuas: Si tienes datos con múltiples variables continuas, puedes usar PCA para reducir la dimensionalidad y luego realizar análisis de agrupamiento en los resultados del PCA.
Caso 2: Datos categóricos: Para datos categóricos, se pueden utilizar CA y MCA para transformar las variables en componentes principales continuos y luego aplicar análisis de agrupamiento.
Caso 3: Datos mixtos: Si tienes una combinación de variables continuas y categóricas, puedes realizar FAMD o MFA antes de aplicar el análisis de agrupamiento.
En resumen, HCPC combina métodos de componentes principales y métodos de agrupamiento para reducir la dimensionalidad de los datos, mejorar la estabilidad del agrupamiento y realizar análisis en diferentes tipos de variables.
El método HCPC, implementado en el paquete FactoMineR, sigue los siguientes pasos:
Calcular métodos de componentes principales: Dependiendo de los tipos de variables y la estructura del conjunto de datos, se calcula PCA, (M)CA o MFA. Puedes especificar el número de dimensiones a retener utilizando el argumento “nop” (valor predeterminado es 5).
Realizar agrupamiento jerárquico: Utilizar el criterio de Ward para realizar agrupamiento jerárquico en los componentes principales seleccionados. Se elige el criterio de Ward porque se basa en la varianza multidimensional, similar al análisis de componentes principales.
Determinar el número de grupos: Elegir el número de grupos basado en el árbol jerárquico. Se realiza una partición inicial al cortar el árbol jerárquico.
Mejorar la partición inicial: Aplicar agrupamiento K-means para refinar la partición inicial obtenida del agrupamiento jerárquico.
Consolidar la partición final: Consolidar la partición obtenida del agrupamiento K-means con los resultados de los pasos anteriores para obtener la solución de particionamiento final.
El método HCPC combina la reducción de dimensionalidad a través del análisis de componentes principales con técnicas de agrupamiento para identificar grupos significativos en los datos.
Vamos a utilizar dos paquetes de R: 1. FactoMineR para realizar los cálculos del HCPC 2. Factoextra para visualizar los resultados. Para instalar los paquetes, ejecuta el siguiente comando (sin añadir el #):
#install.packages(c("FactoMineR", "factoextra"))
Una vez instalados, carga los paquetes de la siguiente manera:
library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
La función HCPC (del paquete FactoMineR) se puede utilizar para calcular el agrupamiento jerárquico en componentes principales. Un formato simplificado es el siguiente:
# HCPC(res, nb.clust = 0, min = 3, max = NULL, graph = TRUE)
En donde:
Comenzamos calculando nuevamente el análisis de componentes principales (PCA). Se utiliza el argumento ncp=3 en la función PCA() para conservar solo los primeros tres componentes principales. A continuación, se aplica el HCPC al resultado del PCA.
library (FactoMineR)
# Compute PCA with ncp = 3
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
# Compute hierarchical clustering on principal components
res.hcpc <- HCPC(res.pca, graph = FALSE)
library(ggsci)
fviz_dend(res.hcpc,
cex = 0.7, # Label size
palette = "jco", # Color palette see ?ggpubr::ggpar
rect = TRUE, rect_fill = TRUE, # Add rectangle around groups
rect_border = "jco", # Rectangle color
labels_track_height = 0.8 # Augment the room for labels
)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <]8;;https://github.com/kassambara/factoextra/issueshttps://github.com/kassambara/factoextra/issues]8;;>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Es posible visualizar a los individuos en el mapa de componentes principales y colorearlos según el clúster al que pertenezcan. La función fois_cluster() en factocztra puede utilizarse para visualizar los clústeres de individuos de forma más explicativa.
fviz_cluster(res.hcpc,
repel = TRUE, # Avoid label overlapping
show.clust.cent = TRUE, # Show cluster centers
palette = "jco", # Color palette see ?ggpubr::ggpar
ggtheme = theme_minimal(),
main = "Factor map"
)
# Principal components + tree
plot(res.hcpc, choice = "3D.map")
head(res.hcpc$data.clust, 10)
## Murder Assault UrbanPop Rape clust
## Alabama 13.2 236 58 21.2 3
## Alaska 10.0 263 48 44.5 4
## Arizona 8.1 294 80 31.0 4
## Arkansas 8.8 190 50 19.5 3
## California 9.0 276 91 40.6 4
## Colorado 7.9 204 78 38.7 4
## Connecticut 3.3 110 77 11.1 2
## Delaware 5.9 238 72 15.8 2
## Florida 15.4 335 80 31.9 4
## Georgia 17.4 211 60 25.8 3
res.hcpc$desc.var$quanti
## $`1`
## v.test Mean in category Overall mean sd in category Overall sd
## UrbanPop -3.898420 52.07692 65.540 9.691087 14.329285
## Murder -4.030171 3.60000 7.788 2.269870 4.311735
## Rape -4.052061 12.17692 21.232 3.130779 9.272248
## Assault -4.638172 78.53846 170.760 24.700095 82.500075
## p.value
## UrbanPop 9.682222e-05
## Murder 5.573624e-05
## Rape 5.076842e-05
## Assault 3.515038e-06
##
## $`2`
## v.test Mean in category Overall mean sd in category Overall sd
## UrbanPop 2.793185 73.87500 65.540 8.652131 14.329285
## Murder -2.374121 5.65625 7.788 1.594902 4.311735
## p.value
## UrbanPop 0.005219187
## Murder 0.017590794
##
## $`3`
## v.test Mean in category Overall mean sd in category Overall sd
## Murder 4.357187 13.9375 7.788 2.433587 4.311735
## Assault 2.698255 243.6250 170.760 46.540137 82.500075
## UrbanPop -2.513667 53.7500 65.540 7.529110 14.329285
## p.value
## Murder 1.317449e-05
## Assault 6.970399e-03
## UrbanPop 1.194833e-02
##
## $`4`
## v.test Mean in category Overall mean sd in category Overall sd
## Rape 5.352124 33.19231 21.232 6.996643 9.272248
## Assault 4.356682 257.38462 170.760 41.850537 82.500075
## UrbanPop 3.028838 76.00000 65.540 10.347798 14.329285
## Murder 2.913295 10.81538 7.788 2.001863 4.311735
## p.value
## Rape 8.692769e-08
## Assault 1.320491e-05
## UrbanPop 2.454964e-03
## Murder 3.576369e-03
res.hcpc$desc.axes$quanti
## $`1`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 -5.175764 -1.964502 -5.639933e-16 0.6192556 1.574878
## p.value
## Dim.1 2.269806e-07
##
## $`2`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.2 3.585635 0.7428712 -5.369316e-16 0.6137936 0.9948694
## p.value
## Dim.2 0.0003362596
##
## $`3`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 2.058338 1.0610731 -5.639933e-16 0.5146613 1.5748783
## Dim.3 2.028887 0.3965588 3.535366e-17 0.3714503 0.5971291
## Dim.2 -4.536594 -1.4773302 -5.369316e-16 0.5750284 0.9948694
## p.value
## Dim.1 3.955769e-02
## Dim.3 4.246985e-02
## Dim.2 5.717010e-06
##
## $`4`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 4.986474 1.892656 -5.639933e-16 0.6126035 1.574878
## p.value
## Dim.1 6.149115e-07
res.hcpc$desc.ind$para
## Cluster: 1
## Idaho South Dakota Maine Iowa New Hampshire
## 0.3674381 0.4993032 0.5012072 0.5533105 0.5891145
## ------------------------------------------------------------
## Cluster: 2
## Ohio Oklahoma Pennsylvania Kansas Indiana
## 0.2796100 0.5047549 0.5088363 0.6039091 0.7100820
## ------------------------------------------------------------
## Cluster: 3
## Alabama South Carolina Georgia Tennessee Louisiana
## 0.3553460 0.5335189 0.6136865 0.8522640 0.8780872
## ------------------------------------------------------------
## Cluster: 4
## Michigan Arizona New Mexico Maryland Texas
## 0.3246254 0.4532480 0.5176322 0.9013514 0.9239792
# Loading data
library(FactoMineR)
data(tea)
# Performing MCA
res.mca <- MCA(tea,
ncp = 20, # Number of components kept
quanti.sup = 19, # Quantitative supplementary variables
quali.sup = c(20:36), # Qualitative supplementary variables
graph=FALSE)
#res.hcpc <- HCPC (res.mca, graph = FALSE, max = 3)
# Dendrogram
fviz_dend(res.hcpc, show_labels = FALSE)
# Individuals facor map
fviz_cluster(res.hcpc, geom = "point", main = "Factor map")
# Description by variables
res.hcpc$desc.var$test.chi2
## NULL
# Description by variable categories
res.hcpc$desc.var$category
## NULL
res.hcpc$desc.axes
##
## Link between the cluster variable and the quantitative variables
## ================================================================
## Eta2 P-value
## Dim.1 0.8814658 2.585319e-21
## Dim.2 0.6010524 2.862247e-09
## Dim.3 0.1687608 3.522618e-02
##
## Description of each cluster by quantitative variables
## =====================================================
## $`1`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 -5.175764 -1.964502 -5.639933e-16 0.6192556 1.574878
## p.value
## Dim.1 2.269806e-07
##
## $`2`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.2 3.585635 0.7428712 -5.369316e-16 0.6137936 0.9948694
## p.value
## Dim.2 0.0003362596
##
## $`3`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 2.058338 1.0610731 -5.639933e-16 0.5146613 1.5748783
## Dim.3 2.028887 0.3965588 3.535366e-17 0.3714503 0.5971291
## Dim.2 -4.536594 -1.4773302 -5.369316e-16 0.5750284 0.9948694
## p.value
## Dim.1 3.955769e-02
## Dim.3 4.246985e-02
## Dim.2 5.717010e-06
##
## $`4`
## v.test Mean in category Overall mean sd in category Overall sd
## Dim.1 4.986474 1.892656 -5.639933e-16 0.6126035 1.574878
## p.value
## Dim.1 6.149115e-07
res.hcpc$desc.ind$para
## Cluster: 1
## Idaho South Dakota Maine Iowa New Hampshire
## 0.3674381 0.4993032 0.5012072 0.5533105 0.5891145
## ------------------------------------------------------------
## Cluster: 2
## Ohio Oklahoma Pennsylvania Kansas Indiana
## 0.2796100 0.5047549 0.5088363 0.6039091 0.7100820
## ------------------------------------------------------------
## Cluster: 3
## Alabama South Carolina Georgia Tennessee Louisiana
## 0.3553460 0.5335189 0.6136865 0.8522640 0.8780872
## ------------------------------------------------------------
## Cluster: 4
## Michigan Arizona New Mexico Maryland Texas
## 0.3246254 0.4532480 0.5176322 0.9013514 0.9239792
En este estudio estudio, se pudo explicar cómo realizar el clustering jerárquico en componentes principales (HCPC), una técnica que resulta útil en diferentes situaciones:
Cuando tienes un conjunto de datos grande con variables continuas, puedes utilizar un análisis de componentes principales para reducir la dimensionalidad de los datos antes de realizar el análisis de clustering jerárquico. Esto te permite obtener una representación más compacta y significativa de tus datos antes de aplicar el algoritmo de clustering.
Cuando trabajas con un conjunto de datos que contiene variables categóricas, puedes emplear un análisis de correspondencia (múltiple) para transformar esas variables categóricas en unos pocos componentes principales continuos. Estos componentes pueden luego utilizarse como entrada para el análisis de clusters, lo cual te permite agrupar los individuos de manera más adecuada.
En este caso, utilizamos el paquete FactoMinet para llevar a cabo el cálculo del HCPC, y el paquete factoextra en R para generar visualizaciones elegantes de los resultados utilizando la librería ggplot2. Esta combinación de herramientas nos permitió realizar un análisis completo y visualmente atractivo de nuestros datos.