CAH :Sortir les caractéristiques des classes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Schmidt Aurélie
Messages : 4
Enregistré le : 27 Aoû 2009, 14:50

CAH :Sortir les caractéristiques des classes

Messagepar Schmidt Aurélie » 31 Aoû 2009, 09:49

Bonjour,
J'ai réalisé une CAH suite à une ACM. Je crée donc des groupes d'individus mais je n'arrive pas à sortir clairement les caractéristiques des groupes. J'ai déjà trouvé quelques réponses sur le forum mais il me faudrait aussi le nombre d'individus par classe.

Voici le code pour l'instant:

Code : Tout sélectionner

#Calcul des distances entre individus
tabli=read.table('tabli.txt',header=TRUE,sep=';')
dc=dist(tabli,method='euclidian',diag=FALSE,upper=FALSE)

#Choix du critère d'aggrégation
hier=hclust(dc,"ward")
plot(hier)

#Création des classes
cl4=cutree(hier,4)

#caractéristiques des classes
by(tab,
    list(classe=cl4),
    FUN=function(x){
          apply(x,2,function(x){
                      table(x)/length(x)
                   })
          }
 )


De plus, les caractéristiques de mes classes ne sont pas très exploitables car je ne peux pas les exporter ensuite.

Quelqu'un peut-il m'aider à clarifier tout ça ?

merci par avance
Aurélie Schmidt

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

Messagepar Tillard » 31 Aoû 2009, 13:14

Bonjour
pour l'effectif par classe voir
?table

pour la signification des classes
voir la fonction vtest dans le package ttool disponible ici

http://forums.cirad.fr/logiciel-R/viewtopic.php?t=1143

Cordialement
Emmanuel Tillard
UMR ERRC (Elevage des Ruminants en Regions Chaudes)
CIRAD - St PIERRE (La Réunion)
tel: 02 62 49 92 54

Schmidt Aurélie
Messages : 4
Enregistré le : 27 Aoû 2009, 14:50

Messagepar Schmidt Aurélie » 01 Sep 2009, 14:15

Merci
le problème c'est que pour l'effectif par classe, je n'ai pas de table listant mes variables par classe et donc je ne peux pas utiliser la fonction table. Je ne sais pas trop comment faire pour relier ma table initiale avec les groupes que je trouve au final.

En utilisant by() (cf code de mon message précedent), j'obtient ce que je veux mais pas moyen de l'exporter sous forme de tableau, je suis obligée de tout reprendre à la main
Aurélie Schmidt

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 01 Sep 2009, 14:27

Bonjour,

le problème c'est que pour l'effectif par classe, je n'ai pas de table listant mes variables par classe et donc je ne peux pas utiliser la fonction table. Je ne sais pas trop comment faire pour relier ma table initiale avec les groupes que je trouve au final.


Je ne comprend pas où est le problème. Ce qu'indique Emmanuel Tillard est tout à fait executable sur la sortie de cutree :

Code : Tout sélectionner

table(cutree(hclust(mamatricedistance),k=4))


Cela s'exporte directement avec write.csv je crois ou même un copié/collé dans un tableur.
Si ce n'est pas ça il faut repréciser "ce qu'est l'effectif par classe"

Nicolas

Schmidt Aurélie
Messages : 4
Enregistré le : 27 Aoû 2009, 14:50

Messagepar Schmidt Aurélie » 01 Sep 2009, 14:40

Oui effectivement je ne me suis pas bien faite comprendre.
En réalité, je cherche à obtenir les effectifs de mes classes pour chaque variables.

Classe1
variable 1_modalité1 : 10%
variable1_modalité2 : 90%
variable 2_modalité1 : 5%
variable2_modalité2 : 95%

Classe 2 :
variable 1_modalité1 : 100%
variable1_modalité2 : 0%
variable 2_modalité1 : 50%
variable2_modalité2 : 50%
...

J'arrive à les obtenir avec la fonction by() mais je n'arrive pas à exporter le résultat avec write.table()
Aurélie Schmidt

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 01 Sep 2009, 17:27

oui c'est normal, by() produit un objet de classe list qui, je crois, n'est pas directement exportable via write.table. Il faut le retransformer en matrix ou data.frame via do.call par exemple si tous les éléments de la sortie de by() ont bien au moins une dimension en commun qui peut permettre de les accoler. voir l'aide de la fonction ?do.call

Sinon il existe aggregate() qui produit la même chose que by (ou presque)et qui donne un data.frame en sortie. Il y a aussi la possibilité d'utiliser le couple apply()-tapply() qui est bien plus rapide sur un jeu de donnée important.

Nicolas


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité