Re: classification

From: Daniel Chessel (chessel@biomserv.univ-lyon1.fr)
Date: Wed Jan 05 2005 - 17:31:51 MET


At 14:33 04/01/2005 +0100, Charline LAURENT wrote:

>Bonjour,
>
>Je suis à la recherche d'aides à l'interprétation de classifications automatiques. J’ai trouvé dans une fiche de stage “périmée” (Fiche stage7 du 20/06/02, http://pbil.univ-lyon1.fr/R/archives/stage7.pdf) un paragraphe intitulé “aides à l’interprétation” (page 16). Celui ci explique comment calculer la contribution d’une variable à la formation d’une classe et réciproquement. Je n’ai pas retrouvé de paragraphe similaire traitant de ce sujet dans la nouvelle fiche de stage (http://pbil.univ-lyon1.fr/R/stage/stage7.pdf) (ou je ne l’ai pas vu). Ces aides à l’interprétation ont-elles été intégrées dans des fonctions sous R?

Pas le moins du monde puisque R contient des fonctions classiques et des librairies spécialisées de classification. Il faut bien distinguer les classifications hiérarchiques qui fabriquent des hiérarchies de partitions (hclust) à partir d'une matrice de distances et les algorithmes de partitionnement (kmeans) qui fabriquent des partitions à partir d'un tableau. La confusion entre les deux a créé des problèmes dans ADE-4. Il n'y a donc plus de fonctions de ce type dans ade4.

>Il me semble également que ces aides étaient présentes sous ADE4 classique: Cf. réponse de J. Thioulouse à S.Messad (http://pbil.univ-lyon1.fr/ADE-4/adelisthtmlannuel/98/0078.html) en 1998:
>“L'option "Clusters : Inertia analysis - partition" permet de faire l'analyse
>d'inertie d'une partition, c'est à dire de décomposer l'inertie totale en
>contributions dues aux variables pour les différents groupes et réciproquement.”

Il n'y a pas à proprement parler de contributions d'une variable à la définition d'une classe comme on en connaît en ordination (contributions absolues, relatives, et cumulées). Mais si on cherche à mesurer après partition le lien de la partition obtenue avec chacune des variables, ce n'est pas difficile. Pour illustrer ce point dans hclust, prenons un exemple.

library(MASS)
x1=rbind(mvrnorm(50,1:3,diag(1,3)),mvrnorm(50,c(1,-3,1),diag(1,3)),mvrnorm(50,3:1,diag(1,3)))
x2=matrix(rnorm(450),ncol=3)
x3=cbind(x1,x2)

On a 6 variables, 3 participent à la définition des classes, trois brouillent l'information.
On fait une partition en trois classes en partant de centres aléatoires :

cl <- kmeans(x3, 3, 20)

On trouve la partition dans

fac= as.factor (cl$cluster)

La méthode minimise la somme des carrés des écarts intra-classe (ce n'est pas forcément un minimum absolu). On trouve ces inerties intraclasses (pondération unitaire) dans c1$withinss

 cl$withinss
[1] 234.9 305.3 354.0

Pour décomposer ce critère entre les variables faire le calcul de la somme des carrés des écarts par classe et par variable :

 toto=apply(x3,2,function(x) tapply(x,fac,function(y) sum((y-mean(y))^2)))
 toto
   [,1] [,2] [,3] [,4] [,5] [,6]
1 27.33 52.59 26.26 37.25 62.48 28.99
2 42.90 51.54 58.03 46.93 46.82 59.06
3 59.82 55.55 35.21 68.33 93.97 41.13

Vérifier que la somme par ligne est le critère affiché :
 apply(toto,1,sum)
    1 2 3
234.9 305.3 354.0

Faire la somme par colonne pour avoir le critère par variable :

 apply(toto,2,sum)
[1] 130.0 159.7 119.5 152.5 203.3 129.2

Ce n'est pas très parlant car il faut le ramener à un pourcentage d'inertie :

  apply(toto,2,sum)/ apply(x3,2,function(x) sum((x-mean(x))^2))
[1] 0.4971 0.1824 0.4326 0.9786 0.9883 0.9953

49%, 18% et 43% de variance intra pour les 3 premières et 98 %, 99% et 99% pour les trois dernières.

En fait toute pratique descriptive du lien entre les variables et la partition permet de se faire une idée.
Venables et Ripley (Moderne apply statistics with S-PLUS, seconde edition p. 391) font une ACP pour représenter les classes. La fonction clusplot de la libraririe cluster a systématisé cette approche. On peut aussi utiliser ade4 pour faire un biplot :

 x4 = dudi.pca(x3,scann=F,scale=F)
 s.class(x4$li,fac)
 s.arrow(3*x4$c1,add.plot=T)

Observer les 3 premières variables qui définissent le plan des centres de gravité et les trois dernières qui sont perpendiculaires. A la page citée, observer comme une coupe de dendrogramme permet de choisir une partition initiale pour kmeans. Dans la librairie mclust on a des classifications au maximum de vraisemblance. clara dans lea librairie cluster accepte les données manquantes :
cla1=clara(x3,3)
table(cl$cluster,cla1$clustering)
   
    1 2 3
  1 6 41 0
  2 53 0 0
  3 0 0 50

...

Il y a de quoi s'occuper.

Daniel Chessel - chessel@biomserv.univ-lyon1.fr



This archive was generated by hypermail 2b30 : Tue Oct 18 2005 - 10:35:39 MEST