La réalisation d'une classification ascendante hiérarchique est réalisée à partir d'un tableau de distances. Un tel tableau peut être obtenu à l'aide de la commande dist du package stats. La commande hclust (même package) permet alors de produire les résultats de la classification, dont le dendrogramme.
Reprenons l'exemple "Elections Régionales 2004 en Ile de France" déjà utilisé dans la page consacrée à l'AFC avec R. Supposons qu'après avoir réalisé l'AFC, nous souhaitions faire une classification ascendante hiérarchique des départements, à partir de leurs coordonnées selon les axes factoriels.
La variable regionales.coa contient les résultats de l'AFC réalisée en se limitant à 3 axes factoriels :
regionales.coa$li
Axis1 Axis2 Axis3
PARI -0.10498 0.002721 0.101621
SMAR 0.08206 -0.118056 -0.033233
...
VDOI 0.08536 -0.051274 -0.020569
On calcule les distances euclidiennes entre les points :
dept.dist <- dist(regionales.coa$li)
dept.dist
PARI SMAR YVEL
ESSO HTSS STDE
VDMA
SMAR
0.26030
YVEL
0.16301
0.19580
...
VDOI 0.23254 0.06805 0.18504 0.08825 0.28345 0.21971 0.12319
On réalise la classification
dept.cah <- hclust(dept.dist)
print(dept.cah)
Call:
hclust(d = dept.dist)
Cluster method : complete
Distance : euclidean
Number of objects: 8
Le dendrogramme peut être obtenu par :
plot(dept.cah)
D'autres distances et d'autres indices d'agrégation peuvent aussi être utilisés. Ainsi :
- Par défaut, dist() utilise la distance euclidienne. Mais on peut utiliser les méthodes suivantes : euclidian, maximum, manhattan, canberra, binary,minkowski
- Par défaut, l'indice d'agrégation correspond au paramétrage method="complete". Les autres méthodes disponibles sont : average, mcquitty, median, centroid, ward, single.
Par exemple, pour obtenir la classification des départements en utilisant tous les axes factoriels, le carré des distances euclidiennes et la méthode d'agrégation de Ward :
regionales.coa2 <- dudi.coa(regionales.data,nf=8)
Select the number of axes:
8
dept.dist2 <- (dist(regionales.coa2$li))^2
dept.cah2 <- hclust(dept.dist, method="ward")
plot(dept.cah2)
On peut alors dessiner des rectangles autour des deux classes de l'avant-dernière étape par :
rect.hclust(dept.cah2, k=2)
Page rédigée le 28 mai 2007