Introducción

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.

8.1. ¿Por qué utilizar HCPC?

La combinación de métodos de componentes principales y métodos de agrupamiento resulta útil en al menos tres situaciones.

  1. 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.

  2. 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.

  3. 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.

8. 2. Algoritmo del método HCPC

El método HCPC, implementado en el paquete FactoMineR, sigue los siguientes pasos:

  1. 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).

  2. 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.

  3. 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.

  4. Mejorar la partición inicial: Aplicar agrupamiento K-means para refinar la partición inicial obtenida del agrupamiento jerárquico.

  5. 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.

8. 3. Cómputo

8. 3. 1. Paquetes de R

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)

8. 3. 2. Función en R

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:

  1. res: Puede ser el resultado de un análisis factorial o un marco de datos (data frame).
  2. nb.clust: un número entero que especifica el número de grupos. Los valores posibles son:
  • El árbol se corta en el nivel en el que el usuario hace clic.
  • El árbol se corta automáticamente en el nivel sugerido.
  • Cualquier número entero positivo: el árbol se corta con nb.clusters grupos.
  1. min, max: el número mínimo y máximo de grupos a generar, respectivamente.
  2. graph: si es TRUE, se mostrarán los gráficos.

8. 3. 3. Caso de variables continuas

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

Resumen

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:

  1. 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.

  2. 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.