Enveloppes convexes de groupes d'individus

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

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Enveloppes convexes de groupes d'individus

Messagepar Héléna Castermant » 11 Juin 2007, 09:32

Bonjour à tous,

Mon problème d'aujourd'hui est que j'aimerais représenter sur le premier plan factoriel issu d'une ACP non pas les individus (car j'en ai 115399 dans mon tableau !) mais les enveloppes convexes de mes groupes d'individus issus d'une classification...Je n'ai aucune idée de comment faire cela...J'ai trouvé sur le site

http://www.lsp.ups-tlse.fr/Carlier/.Hyp ... de160.html

une certaine programmation mais c'est avec le logiciel Splus je crois....

Si quelqu'un peut m'aider ou m'apporter des pistes, ce serait super ! :D

Merci d'avance !

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 11 Juin 2007, 09:48

Bonjour,

Avec la librairie ade4 tu fais ça avec s.chull(acp$li,tesgroupes,optchull=1).

Maxime

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 11 Juin 2007, 10:28

Voir aussi la fonction chull du package graphics.

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 11 Juin 2007, 12:28

Merci à vous pour vos réponses !
Par contre, je n'arrive pas à faire marcher la fonction s.chull :oops:
Je l'ai testé sur un petit exemple...Bref, voici mon programme :
>library(ade4)
>donnees<-read.table("................txt",header=TRUE,sep=" ")
>cl<-kmeans(donnees,2)
>cl$cluster
[1] 1 1 2 2 2 2
>acp<-prcomp(donnees)
>s.chull(acp$li,cl$cluster,optchull=1)
Erreur dans scatterutil.base(dfxy = dfxy, xax = xax, yax = yax, xlim = xlim, :
Non convenient selection for xax

Peut-être que je fais une erreur toute bête.... :cry: Je ne sais pas, mais je cherche depuis ce matin après vos posts...Peut-être que cl$cluster ne va pas comme factor...

Encore merci d'avance !

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 11 Juin 2007, 12:44

Re,


Le problème ne vient pas je pense de cl$cluster. Il vient de acp$li. Dans mon exemple acp$li faisait référence à une acp faite avec la fonction dudi.pca de ade4. Avec princomp il te faut utiliser acp$scores. Les deux étant identiques au signe près. Personnellement je suis plus habitué à ade4 que a princomp. Après tu peux rajouter d'autres arguments dans s.chull pour ajouter ou non les points modifier les couleurs le texte, etc ... voir ?s.chull.

Maxime

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

Messagepar Nicolas Péru » 11 Juin 2007, 12:57

je pense qu'il faut aussi que ton facteur soit de longueur égal au nombre de ligne du tableau fournit dans le s.chull afin que R ait l'information de groupe pour chacune des lignes de ton tableau.

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 11 Juin 2007, 13:35

Encore merci à vous !
Euh...il se passe quelque chose de bizarre quand je fais :
>donnees<-read.table("........txt",header=TRUE,sep=" ")
>library(ade4)
>cl<-kmeans(donnees,2)
>cl$cluster
[1] 1 1 2 2 2 2
>acp<-dudi.pca(donnees)
Select the number of axes :2
>s.chull(acp$li,cl$cluster,optchull=1)

Tout marche sans aucune erreur et mon factor (cl$cluster) est bien de longueur égale au nombre de lignes de acp$li. MAIS le graphique qui apparait est vide !!! y a que les axes de dessinés et rien d'autre ! :shock:
J'ai essayé sur un autre petit exemple et ca me donne la même chose...

Une idée sur le pourquoi :?:

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 11 Juin 2007, 13:44

Re,

c'est parce que cl$cluster n'est pas un facteur. Essaie s.chull(acp$li,as.factor(cl$cluster),optchull=1,cpoint=1)

Maxime

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 11 Juin 2007, 13:57

Re,

Bravo Maxime ! C'était bien ca ! là ca marche maintenant sur mon petit exemple ! Je pense que quand je l'appliquerai sur mes 115399 individus, je mettrai plutôt cpoint=0 :wink:
En tout cas, encore merci, je peux continuer à avancer dans mon travail !

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 12 Juil 2007, 11:46

Bonjour à tous,

J'ai un petit problème au niveau de mes enveloppes convexes.
Voici mon code :

Code : Tout sélectionner

> donnees<-read.table("N:/G_GRD/RESERVE/Z_CASTERMANT/donnees.txt",header=FALSE,sep="\t")
> donnees2<-scale(donnees,center=TRUE,scale=TRUE)
> cl<-kmeans(donnees2,5,algorithm="MacQueen")
Warning message:
did not converge in 10 iterations
> cl$size
[1] 25841 39402 31413 39095 38873
> library(ade4)
> acp<- dudi.pca(donnees, scan = FALSE) # a normed PCA
> #s.corcircle(acp$co)
> coul<-c("red","green","black","blue","orange")
> s.chull(acp$li,as.factor(cl$cluster),optchull=1,cpoint=0,col=coul)


Et voici ce que j'obtiens :
Image

Je ne comprends pas pourquoi la classe orange superpose les autres... :cry: Une classification est censé donner des classes les plus éloignées possibles !?
Quelqu'un a-t-il une idée sur le pourquoi? Ai-je fait une erreur de programmation?

Merci d'avance.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 12 Juil 2007, 12:00

Bonjour,

Peut-être la différence se fait sur le 3ème axe, as-tu essayé de représenter le plan factoriel 1-3 ?

Maxime

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 12 Juil 2007, 12:54

Bonjour Maxime,

Et bien je n'ai pas de troisième axe avec dudi.pca...Il ne me demande d'ailleurs pas de sélectionner le nombre d'axes comme d'habitude. Et quand je fais acp$li, je n'ai que deux colonnes... :shock:
De plus, je sais que le plan 1 X 3 peut être intéressant, mais normalement c'est bien le plan 1 X 2 le plus interprétable puisque ce sont les deux axes les plus importants...

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 12 Juil 2007, 13:03

Re,

tu n'as pas de 3ème axe car ayant mis scannf=FALSE tu ne choisis pas le nombre d'axe et par défaut nf=2 donc que les deux premiers axes. Sois tu vires scannf=FALSE et après tu rentres 3 quand il te pose la question soit tu gardes scannf=F, mais derrière tu rajoutes nf=3. Pour ce qui est du troisième axe ce n'est pas sur qu'il explique moins que le deuxième (regarder inertia.dudi) et peut être que c'est sur cette axe la qu'il sépare ta modalité 5 ce n'est qu'une supposition ... en aucun cas une explication. Pour ploter l'axe 1-3 il te faut rajouter dans s.chull, xax=1 et yax=3.

Maxime

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

Messagepar Nicolas Péru » 12 Juil 2007, 13:05

il faut que tu aies sélectionné 3 axes au moment où tu fais ton ACP.

mais normalement c'est bien le plan 1 X 2 le plus interprétable puisque ce sont les deux axes les plus importants...


c'est le plan qui représente au mieux la variabilité du nuage selon 2 axes après pour ce qui est de l'interprétation c'est autre chose...
Mais je ne suis pas sûr que tu arrives à mettre en évidence tes classes issues d'un algorithme dans un plan d'ACP mais je ne peux pas vraiment donner d'éléments de réponses.
Il faudrait faire le kmeans sur le $li non ? (je ne sais pas trop là mais ça me parait étrange à première vue alors je préfère poser la question)

Héléna Castermant
Messages : 39
Enregistré le : 08 Juin 2007, 07:40

Messagepar Héléna Castermant » 12 Juil 2007, 13:36

Merci pour vos réponses.
Alors, mon 1er axe explique 45% de l'info, le 2ème axe 30%, et donc le 3ème axe 25%, donc il est vrai qu'il a son importance.
La représentation est encore moins bien je trouve :
Image

Sinon, représenter les classes dans un plan d'ACP, j'ai vu cela dans plusieurs livres...Mais il est vrai, Nicolas, que ce n'est peut-être pas le meilleur graphique à faire (surtout dans mon cas) . Alors avez-vous une idée sur le graphique à réaliser? J'aimerais un graphique où l'on peut juger de la séparabilité des classes, visualiser les classes les plus proches, identifier des individus hors-normes...

Merci d'avance.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité