Classification Hiérarchique sur Composantes Principales: L'Essentiel
La classification hiérarchique (ou hierarchical clustering en anglais) est l’une des approches les plus importantes pour l’exploration des données multivariées. L’objectif est d’identifier des groupes (i.e., clusters) d’objets similaires dans un jeu de données. Pour en savoir plus sur le clustering, vous pouvez lire notre livre intitulé “Practical Guide to Cluster Analysis in R” (https://goo.gl/DmJ5y5).
Brièvement, les deux stratégies de classification les plus courantes sont:
- La classification ascendante hiérarchique (CAH), utilisée pour identifier des groupes d’observations similaires dans un jeu de données.
- Le Partitionnement en K-moyennes (k-means en anglais), utilisé pour diviser un jeu de données en plusieurs groupes.
L’approche HCPC (Hierarchical Clustering on Principal Components ou Classification Hiérarchique sur Composantes Principales) nous permet de combiner les trois méthodes standards utilisées dans les analyses de données multivariées (Husson, Josse, and J. 2010):
- Les Méthodes des composantes principales (ACP, AFC, ACM, AFDM, AFM),
- La classification ascendante hiérarchique et
- Le partitionnement en k-moyennes.
Ce chapitre décrit POURQUOI et COMMENT combiner les méthodes des composantes principales avec la classification hiérarchique. Enfin, nous démontrons comment calculer et visualiser le HCPC à l’aide du logiciel R et le package FactoMineR.
Contents:
Livre (en anglais):

Practical Guide to Principal Component Methods in R
Pourquoi HCPC??
Le HCPC est utile dans au moins trois situations.
Cas 1: variables continues
Dans la situation où vous disposez d’un grand jeu de données multivariées contenant plusieurs variables continues, l’analyse en composantes principales (ACP) peut être utilisée pour réduire la dimension des données en quelques variables continues contenant les informations les plus importantes dans les données. Ensuite, vous pouvez effectuer la classification sur les résultats de l’ACP.
L’étape ACP peut être considérée comme une étape réduisant le bruit de fond dans les données, ce qui peut conduire à une classification plus stable.
Cas 2: Classification des données catégorielles
Afin d’effectuer une classification sur des données catégorielles, il faudrait d’abord appliquer:
- L’analyse Factorielle des Correspondances (AFC) dans le cas d’un tableau de contingence formé par deux variables catégorielles.
- L’analyse des Correspondances Multiples (ACM), pour les données à plus de deux variables catégorielles.
L’AFC et l’ACM permettent, dans ce cas, de transformer les variables qualitatives en variables quantitatives (axes principaux).
Ensuite, la classification est appliquée sur le résultat de l’AFC ou de l’ACM en fonction du type de données.
Cas 3: Classification sur données mixtes
Lorsque vous disposez de données mixtes de variables continues et catégorielles, vous pouvez d’abord effectuer l’AFDM (analyse factorielle des données mixtes) ou l’AFM (analyse factorielle multiple). Ensuite, vous pouvez appliquer la classification sur les résultats de l’AFDM / l’AFM.
Algorithme de la méthode HCPC
Effectuez une ACP, AFC, ACM, AFDM ou AFM en fonction du type de données. Choisissez le nombre de dimensions à retenir en spécifiant l’argument
ncp
. La valeur par défaut est 5.Appliquez la classification hiérarchique sur le résultat de l’étape 1.
Choisissez le nombre de groupes en fonction du dendrogramme obtenu à l’étape 2. Un partitionnement initial est effectué.
Effectuez le k-means pour améliorer le partitionnement initiale obtenu à l’étape 3.
Calcul
Packages R
Installation:
install.packages(c("FactoMineR", "factoextra"))
Chargez les packages:
library("FactoMineR")
library("factoextra")
Fonction R
Fonction HCPC()
[dans le package FactoMineR
]
Format simplifié:
HCPC (res, nb.clust = 0, graph = TRUE)
res
: Résultat d’une analyse factorielle ou un data frame.nb.clust
: Le nombre de clusters (groupes) à générer.graph
: si TRUE, les graphiques sont affichés
Cas de variables continues
- Faire une ACP
- Appliquer la classification hiérarchique sur le résultat de l’ACP
library(FactoMineR)
# 1. ACP
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
# 2. HCPC
res.hcpc <- HCPC(res.pca, graph = FALSE)
- Visualiser le dendrogramme généré par la classification. Fonction R:
fviz_dend()
[factoextra]:
fviz_dend(res.hcpc,
cex = 0.7, # Taille du text
palette = "jco", # Palette de couleur ?ggpubr::ggpar
rect = TRUE, rect_fill = TRUE, # Rectangle autour des groupes
rect_border = "jco", # Couleur du rectangle
labels_track_height = 0.8 # Augment l'espace pour le texte
)
Le dendrogramme suggère une solution à 4 groupes.
- Visualiser les individus et colorer par groupes. Fonction R:
fviz_cluster()
[factoextra].
fviz_cluster(res.hcpc,
repel = TRUE, # Evite le chevauchement des textes
show.clust.cent = TRUE, # Montre le centre des clusters
palette = "jco", # Palette de couleurs, voir ?ggpubr::ggpar
ggtheme = theme_minimal(),
main = "Factor map"
)
- Graphique 3D combinant la classification hiérarchique et le plan des facteurs. Fonction R:
plot()
.
# Principal components + tree
plot(res.hcpc, choice = "3D.map")
- Contenu du résultat de la fonction
HCPC()
:
data.clust
: Données d’origine avec une colonne supplémentaire appeléeclust
contenant les groupes.desc.var
: les variables décrivant les groupesdesc.ind
: les individus les plus typiques de chaque groupesdesc.axes
: les axes décrivant les groupesDonnées d’origine avec la colonne
class
:
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
- Variables quantitatives décrivant le plus chaque cluster:
res.hcpc$desc.var$quanti
Ici, nous ne montrons que quelques colonnes d’intérêt: “Moyenne dans la catégorie”, “Moyenne globale”, “p.value”
## $`1`
## Mean in category Overall mean p.value
## UrbanPop 52.1 65.54 9.68e-05
## Murder 3.6 7.79 5.57e-05
## Rape 12.2 21.23 5.08e-05
## Assault 78.5 170.76 3.52e-06
##
## $`2`
## Mean in category Overall mean p.value
## UrbanPop 73.88 65.54 0.00522
## Murder 5.66 7.79 0.01759
##
## $`3`
## Mean in category Overall mean p.value
## Murder 13.9 7.79 1.32e-05
## Assault 243.6 170.76 6.97e-03
## UrbanPop 53.8 65.54 1.19e-02
##
## $`4`
## Mean in category Overall mean p.value
## Rape 33.2 21.23 8.69e-08
## Assault 257.4 170.76 1.32e-05
## UrbanPop 76.0 65.54 2.45e-03
## Murder 10.8 7.79 3.58e-03
De le résultat ci-dessus, on constate que:
-
les variables UrbanPop, Murder, Rape et Assault sont les plus significativement associées au cluster 1. Par exemple, la valeur moyenne de la variable Assault dans le cluster 1 est de 78.53, ce qui est inférieure à la moyenne globale (170.76) dans tous les clusters. Par conséquent, on peut conclure que le cluster 1 se caractérise par un faible taux de la variable Assault par rapport à tous les autres clusters.
-
les variables UrbanPop et Murder sont les plus significativement associées au cluster 2.
…etc …
- Axes principaux associées aux clusters:
res.hcpc$desc.axes$quanti
## $`1`
## Mean in category Overall mean p.value
## Dim.1 -1.96 -5.64e-16 2.27e-07
##
## $`2`
## Mean in category Overall mean p.value
## Dim.2 0.743 -5.37e-16 0.000336
##
## $`3`
## Mean in category Overall mean p.value
## Dim.1 1.061 -5.64e-16 3.96e-02
## Dim.3 0.397 3.54e-17 4.25e-02
## Dim.2 -1.477 -5.37e-16 5.72e-06
##
## $`4`
## Mean in category Overall mean p.value
## Dim.1 1.89 -5.64e-16 6.15e-07
Les résultats ci-dessus indiquent que les individus dans les groupes 1 et 4 ont des coordonnées élevées sur l’axes 1. Les individus du groupe 2 ont des coordonnées élevées sur le deuxième axe. Les individus appartenant au troisième groupe ont des coordonnées élevées sur les axes 1, 2 et 3.
- Individus représentatifs de chaque groupe:
res.hcpc$desc.ind$para
## Cluster: 1
## Idaho South Dakota Maine Iowa New Hampshire
## 0.367 0.499 0.501 0.553 0.589
## --------------------------------------------------------
## Cluster: 2
## Ohio Oklahoma Pennsylvania Kansas Indiana
## 0.280 0.505 0.509 0.604 0.710
## --------------------------------------------------------
## Cluster: 3
## Alabama South Carolina Georgia Tennessee Louisiana
## 0.355 0.534 0.614 0.852 0.878
## --------------------------------------------------------
## Cluster: 4
## Michigan Arizona New Mexico Maryland Texas
## 0.325 0.453 0.518 0.901 0.924
Pour chaque groupe, les 5 meilleurs individus les plus proches du centre du cluster sont affichés. Ces individus sont appelés paragones. La distance entre chaque individu et le centre du groupe est fournie. Par exemple, les individus représentatifs pour le groupe 1 inclus: Idaho, South Dakota, Maine, Iowa et New Hampshire.
Cas des variables catégorielles
- Calculer l’AFC ou l’ACM en fonction du type de données
- Appliquer la classification hierarchique
Jeu de données utilisé: tea
[FactoMineR]. Les lignes représentent les individus et les colonnes représentent des variables catégorielles.
Nous commençons, par effectuer une ACM. Nous conservons les 20 premiers axes de l’ACM qui capturent 87% de l’information.
# Chargement des données
library(FactoMineR)
data(tea)
# ACM
res.mca <- MCA(tea,
ncp = 20, # Nombre de composants gardés
quanti.sup = 19, # Variables quantitatives supplémentaires
quali.sup = c(20:36), # Variables qualitative supplémentaires
graph=FALSE)
Classification hiérarchique:
res.hcpc <- HCPC (res.mca, graph = FALSE, max = 3)
Visualisation des résultats:
# Dendrogramme
fviz_dend(res.hcpc, show_labels = FALSE)
# Individus
fviz_cluster(res.hcpc, geom = "point", main = "Factor map")
Comme mentionné ci-dessus, les groupes peuvent être décrits par i) les variables et / ou catégories, ii) les axes principaux et iii) les individus. Dans l’exemple ci-dessous, nous affichons uniquement une partie des résultats.
- Description par les variables et les catégories
# Description par les variables
res.hcpc$desc.var$test.chi2
## p.value df
## where 8.47e-79 4
## how 3.14e-47 4
## price 1.86e-28 10
## tearoom 9.62e-19 2
# Description par les catégories
res.hcpc$desc.var$category
## $`1`
## Cla/Mod Mod/Cla Global p.value
## where=chain store 85.9 93.8 64.0 2.09e-40
## how=tea bag 84.1 81.2 56.7 1.48e-25
## tearoom=Not.tearoom 70.7 97.2 80.7 1.08e-18
## price=p_branded 83.2 44.9 31.7 1.63e-09
##
## $`2`
## Cla/Mod Mod/Cla Global p.value
## where=tea shop 90.0 84.4 10.0 3.70e-30
## how=unpackaged 66.7 75.0 12.0 5.35e-20
## price=p_upscale 49.1 81.2 17.7 2.39e-17
## Tea=green 27.3 28.1 11.0 4.44e-03
##
## $`3`
## Cla/Mod Mod/Cla Global p.value
## where=chain store+tea shop 85.9 72.8 26.0 5.73e-34
## how=tea bag+unpackaged 67.0 68.5 31.3 1.38e-19
## tearoom=tearoom 77.6 48.9 19.3 1.25e-16
## pub=pub 63.5 43.5 21.0 1.13e-09
Les variables qui caractérisent la plupart des groupes/clusters sont les variables “where” et “how”. Chaque cluster est caractérisé par une catégorie des variables “where” et “how”. Par exemple, les individus qui appartiennent au premier cluster achètent du thé en sachet dans les “chaînes de magasins”chain stores“. Span>
- Description par les axes principaux
res.hcpc$desc.axes
- Description par les individus
res.hcpc$desc.ind$para
Résumé
Nous avons décrit comment calculer la classification hiérarchique sur composantes principales (HCPC). Cette approche est utile dans plusieurs situations:
Lorsque vous disposez d’un grand jeu de données contenant des variables continues, une ACP peut être utilisée pour réduire la dimension des données avant la classification hiérarchique des données.
Lorsque vous disposez d’un jeu de données contenant des variables catégorielles, une AFC ou une ACM peut être utilisée pour transformer les variables catégorielles en quelques composantes principales continues, qui peuvent être utilisées ensuite pour la classification.
Nous avons utilisé le package FactoMineR pour faire la classification HCPC et le package factoextra pour la visualisation des données.
References
Husson, François, J. Josse, and Pagès J. 2010. “Principal Component Methods - Hierarchical Clustering - Partitional Clustering: Why Would We Need to Choose for Visualizing Data?” Unpublished Data. http://www.sthda.com/english/upload/hcpc_husson_josse.pdf.