Classification Hiérarchique sur Composantes Principales
On va réaliser une classification hiérarchique sur les composantes principales d'une analyse factorielle. Le tableau de données utilisé est le tableau "tea" utilisé pour illustrer l'Analyse des Correspondances Multiples.
Objectifs
On veut regrouper les 300 individus du tableau de données en quelques classes qcorrespondant à différents profils de consommation.
Les variables étant qualitatives, un ACM sera d'abord réalisée puis les coordonnées des individus sur les composantes principales seront utilisées pour la classification hiérarchique. l'ACM est utilisée en amont de la classification pour transformer des variables qualitatives en variables continues.
HCPC
La première étape consiste à réaliser l'ACM du tableau de données.
Comme précédemment (voir la page ACM), on réalise l'ACM en n'utilisant comme variables actives que celles qui correspondant à une attitude de consommation.
On n'utilise pas les derniers axes de l'ACM car on les considère comme du bruit qui rendrait la classification moins stable. On ne garde donc que les 20 premiers axes de l'ACM qui résument 87% de l'information.
Tapez :
library(FactoMineR)
data(tea)res.mca = MCA(tea, ncp=20, quanti.sup=19, quali.sup=c(20:36), graph=FALSE)
#tea: le tableau de donnée utilisé
#ncp: le nombre de dimensions gardé dans les résultats
#quanti.sup: vecteur des index des variables continues illustratives
#quali.sup: vecteur des index des variables qualitatives illustratives
#graph: TRUE ou FALSE selon que l'on veut ou non afficher les graphes
On réalise ensuite la classification hiérarchique :
res.hcpc = HCPC(res.mca)
#res.mca: le résultat d'une ACM
L'arbre hiérarchique suggère une partition en trois classes :
On obtient un arbre hiérarchique tridimensionnel et un plan factoriel où les individus sont coloriés en fonction de la classe à laquelle ils appartiennent.
Description des classes
Les classes peuvent être décrites par :
- Les variables et/ou des modalités
- Les axes factoriels
- Les individus
Description par Variables et/ou modalités
res.hcpc$desc.var$test.chi2
res.hcpc$desc.var$category
Les variables "where" et "how" sont celles qui caractérisent le plus la partition en trois classes.
Chaque classe est caractérisée par une modalité des variables "where" et "how". Seules les modalités dont la probabilité critique est inférieure à 0.02 sont utilisées. Par exemple, les individus qui appartiennent à la troisième classe achètent du thé en sac et en vrac dans des chaînes de magasins et dans des magasins de thé.
description par les composantes principales
res.hcpc$desc.axes
Les individus de la classe 1 possèdent de faibles coordonnées sur les deux premiers axes. Ceux de la classe 2 possèdent des coordonnées élevées sur le deuxième axe et les individus de la classe 3 possèdent des coordonnées élevées sur le premier axe. Ici, une dimension est gardée uniquement si sa valeur test est supérieure à 3.
description par les individus
Il existe deux types d'individus spécifiques pour décrire les classes :
- Les individus les plus proches du centre de classe
- Les individus les plus éloignés des centres des autres classes
res.hcpc$desc.ind
L'individu 285 appartient à la classe 1 et est le plus proche du centre de cette classe.
L'individu 82 appartient à la classe 1 et est le plus éloigné des centres des classes 2 et 3.
Pour aller plus loin
Transformation de variables continues en variables qualitatives
Pour découper une variable continue en classes :
vari = tea[,19]
res.hcpc = HCPC(vari, iter.max=10)
max.cla=unlist(by(res.hcpc$data.clust[,1], res.hcpc$data.clust[,2], max))
breaks = c(min(vari), max.cla)
aaQuali = cut(vari, breaks, include.lowest=TRUE)
summary(aaQuali)#iter.max: Le nombre maximal d'itérations pour la consolidation
Pour découper plusieurs variables continues en classes :
data.cat = data
for (i in 1:ncol(data.cat)){
vari = data.cat[,i]
res.hcpc = HCPC(vari, nb.clust=-1, graph=FALSE)
maxi = unlist(by(res.hcpc$data.clust[,1], res.hcpc$data.clust[,2], max))
breaks = c(min(vari), maxi)
aaQuali = cut(vari, breaks, include.lowest=TRUE)
data.cat[,i] = aaQuali
}#data: tableau de données avec les variables continues à découper en classes