Les posteurs les plus actifs de la semaine
gg
 
niaboc
 
droopy
 
joyeux_lapin13
 
c@ssoulet
 
jeremyJ
 
momotoulouse
 
egondragon
 
fourize
 
jiji
 


Comparaison de classification sous R

Voir le sujet précédent Voir le sujet suivant Aller en bas

Comparaison de classification sous R

Message par Gueguett le Jeu 19 Avr 2012 - 11:58

Bonjour,

Après avoir réalisé une ACM, je souhaite réaliser une classification pour une population de 50000 individus. Mais R ne pouvant calculer les distances pour autant d'individus, j'ai créé un échantillon aléatoire de 3000 individus (dont les résultats de l'ACM sont semblables à la population totale). J'utilise donc les résultats de mon ACM pour la classification de cet échantillon.

Mon probleme est que je n'obtiens pas les mêmes résultats de classification avec la fonction hclust et la fonction HCPC (du package FactomineR) pour le même échantillon, quelqu'un aurait une idée pourquoi ?

Mon code:
Code:
#ACM
res<-MCA(data.MCA.samp, ncp=6, graph = FALSE)

# fonction HCPC
clus<-HCPC(res, nb.clust=-1, consol=TRUE, iter.max=10, min=3, max=NULL,
metric="euclidean", method="ward", order=TRUE, graph.scale="inertia",
nb.par=5, graph=TRUE)

# fonction hclust
dist<-dist(res$ind$coord,method="euclidian")
hclust.ward<-hclust(dist,method="ward")
hclas.ward<-cutree(hclust.ward,k=4)
plot(hclust.ward)

D'autre part, je souhaite ensuite appliquer cette classification à ma population totale, mais je ne sais pas trop comment m'y prendre ... ?

Gaëtan


Dernière édition par Gueguett le Jeu 26 Avr 2012 - 9:40, édité 2 fois

Gueguett

Nombre de messages: 7
Age: 25
Localisation: Rennes
Date d'inscription: 21/02/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Hadrien35 le Jeu 19 Avr 2012 - 12:50

Bonjour,

cela peut venir de la consolidation des groupes dans la fonction HCPC.
Je m'étais déjà posé la question il y a quelques années...
Sans trop m'investir, mais du coup sans trop avoir de réponse.

Tu peux toujours envoyer un message aux développeurs de FactoMineR, qui te répondront surement.
Ils sont rennais comme toi... donc tu pourrais même aller les voir...

Cordialement

Hadrien35

Nombre de messages: 166
Date d'inscription: 31/03/2011

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Gueguett le Jeu 19 Avr 2012 - 15:58

J'ai contacté un des développeurs qui m'a indiqué que la fonction hclust ne prend pas les bonnes distances, mais qu'il faut prendre les distances au carré. Mais je ne retrouve toujours pas les mêmes résultats ...

Gueguett

Nombre de messages: 7
Age: 25
Localisation: Rennes
Date d'inscription: 21/02/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Hadrien35 le Ven 20 Avr 2012 - 9:01

Bonjour,

Ayant moi-même été formé par les développeurs de FactoMineR (comme toi peut être), ils sont a priori mieux placé pour te répondre...
Leur as-tu fait part de tes résultats?

Cordialement

Hadrien35

Nombre de messages: 166
Date d'inscription: 31/03/2011

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Gueguett le Ven 20 Avr 2012 - 9:15

Je vais continuer à fouiller le code de la fonction HCPC pour essayer de trouver par moi même, et dans quel cas je recontacterai un des développeurs de FactoMineR.

Et d'autre part, une fois ma classification effectuée (sur mon échantillon), je fais une description de chaque classe, mais comment attribuer une classe au reste de ma population ?

Gueguett

Nombre de messages: 7
Age: 25
Localisation: Rennes
Date d'inscription: 21/02/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Yonyon le Ven 20 Avr 2012 - 9:30

Bonjour!

Au final c'est simple:

Code:
dist <- as.dist(1-cor(t(table[,c(...)]))) # calcul des distances
hc <- hclust(dist,method="ward") # création de la classification (pour faire un dendogramme par la suite)
 
table_temp <- cutree(hc,k=4) # on indique le nombre de groupes que l'on veut
table$classif <- table_temp # attribution du numéro de groupe à chaque individu/ligne

Je n'utilise pas la même méthode que toi(méthode par le hclust, avec une distance de 1-corrélation), mais le principe reste le même je pense pour attribuer une classe à chaque individu)

En espérant t'avoir aidé Smile

Yonyon

Nombre de messages: 6
Date d'inscription: 06/04/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Gueguett le Ven 20 Avr 2012 - 9:59

Mon problème est que j'ai ma classfication pour mon échantillon (3000 individus), j'attribue donc une classe pour chaque individu mais j'aimerai appliquer cette classification pour ma population totale (50000 individus).


Code:
dist<-dist(res$ind$coord,method="euclidian")
hclust.ward<-hclust(dist^2,method="ward")
class.ward<-cutree(hclust.ward,k=3)

Cordialement,

Gueguett

Nombre de messages: 7
Age: 25
Localisation: Rennes
Date d'inscription: 21/02/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comparaison de classification sous R

Message par Gueguett le Mar 24 Avr 2012 - 10:56

Bonjour,

Pour ceux que ça interresse, il s'agissait bien d'un problème de consolidation et de choix de distance, il faut simplement prendre la distance au carré pour la fonction 'hclust' et désactiver la consolidation (k-means) pour la fonction 'HCPC'.

Code:
X<-res.mca$ind$coord  # on récupère les coordonnées des individus sur l'ACM
dist<-dist(X,method="euclidian")  # calcule des distances eunclidiennes
hclust<-hclust(dist^2,method="ward")  # création de la classification
clus<-cutree(hclust,k=3)    # on choisit le nombre de classes
plot.MCA(res.mca, axes=c(1, 2),col.ind=as.integer(clus),invisible=c("var"),label="")  # représentation graphique
table(clus)

Qui est équivalent à :
Code:
hcpc<-HCPC(res.mca,order=F,consol=F)
tree<-hcpc$call$t$tree   
clus2<-cutree(tree,k=3)
plot.MCA(res.mca, axes=c(1, 2),col.ind=as.integer(clus2),invisible=c("var"),label="")
table(clus2)

Et on peut également retrouver les mêmes résultats avec la fonction 'agnes' du package 'cluster' :
Code:
ag2<-agnes(X,diss=F,method="ward")
ag<-as.hclust(ag2)
clus3<-cutree(ag2,k=3)
plot.MCA(res.mca, axes=c(1, 2),col.ind=as.integer(clus3),invisible=c("var"),label="")
table(clus3)

Maintenant que j'ai retrouvé les bons résultats, je souhaiterai appliquer cette classification à l'ensemble de ma population. Je réalise alors une description de chaque classe grâce à la fonction 'catdes'. Mais comment attribuer une classe pour le reste de ma population ? (autre que mon échantillon). Il me semble qu'il y a une histoire de v-test des modalités, si quelqu'un a une idée je suis preneur !

Gaëtan,

Gueguett

Nombre de messages: 7
Age: 25
Localisation: Rennes
Date d'inscription: 21/02/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum