Re: classification

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

  • Next message: Jean Thioulouse: "Classic ADE4"

    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 : Wed Jan 05 2005 - 17:36:03 MET