Dans le cadre d’une classification hiérarchique, il n’est pas toujours aisée de déterminer le nombre adéquat de classes à retenir.
Le package FactoMineR, dans le cadre de sa fonction HCPC, suggère d’utiliser la partition ayant la plus grande perte relative d’inertie. La fonction best.cutree
ci-dessous permet de calculer ce critère à partir de n’importe quel dendrogramme, qu’il ait été calculé avec hclust
ou agnes
.
best.cutree <- function(hc, min=3, max=20, loss=FALSE, graph=FALSE, ...){
if (class(hc)!="hclust") hc <- as.hclust(hc)
max <- min(max, length(hc$height))
inert.gain <- rev(hc$height)
intra <- rev(cumsum(rev(inert.gain)))
relative.loss = intra[min:(max)]/intra[(min - 1):(max - 1)]
best = which.min(relative.loss)
names(relative.loss) <- min:max
if (graph) {
temp <- relative.loss
temp[best] <- NA
best2 <- which.min(temp)
pch <- rep(1, max-min+1)
pch[best] <- 16
pch[best2] <- 21
plot(min:max, relative.loss, pch=pch, bg="grey75", ...)
} else {
if (loss)
relative.loss
else
best + min - 1
}
}
-
hc
: dendrogramme renvoyé parhclust
ouagnes
-
min
: nombre minimum de classes -
max
: nombre maximum de classes -
loss
: si égal àTRUE
, renverra la liste des pertes d’inertie relatives plutôt que la meilleure partition -
graph
: si égal àTRUE
, affichera un graphique des pertes d’inertie relatives, la meilleure partition étant représentée par un point noir et la seconde par un point gris
Exemples :
R> best.cutree(arbre)
[1] 5
R> best.cutree(arbre,loss=TRUE)
3 4 5 6 7
0.9112290 0.9046093 0.8985344 0.9081087 0.9131271
8 9 10 11 12
0.9223434 0.9542413 0.9569882 0.9626851 0.9667498
13 14 15 16 17
0.9744444 0.9751951 0.9808652 0.9813681 0.9814403
18 19 20
0.9818613 0.9819599 0.9819514
R> best.cutree(arbre,graph=TRUE)
