Classification ascendante hiérarchique avec R

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.

Exemple :

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