Bonjour,
Il y a t'il une procédure qui détermine si une distribution est multimodale ?
La proc means permet de calculer le Mode mais c'est tout ce que j'ai trouvé.
Merci pour votre aide !
Bonjour,
Il y a t'il une procédure qui détermine si une distribution est multimodale ?
La proc means permet de calculer le Mode mais c'est tout ce que j'ai trouvé.
Merci pour votre aide !
Je tombe dans un piège si je te propose de lancer une proc FREQ et de ne conserver que les modalités ayant les N plus forts nombre de répétitions?
Il n'est pas évident de déterminer si une distribution est multimodale: à partir de quelle moment faut-il considérer une fréquence élevée (dans le cas discret) comme un mode, et deux modes proches peuvent-ils être considérés comme un seul?
Je ne connais pas de procédures sous SAS qui permette de déterminer si une procédure est mutimodale. J'ai suivi un cours sur les problèmes de mixtures (ce qui est très souvent sous jacent à ce que tu décris). La détection des mixtures de distributions (en se servant de la "forme" du graphique, en particulier des bosses, i.e. des potentiels modes) utilisait un outil disponible de tout le monde: l'oeil
On passait par le soft C.A.MAN qui tourne sous dos pour les modélisations. Il existe cependant l'option normal dans la proc univariate qui te permettra de déterminer si la distribution est gaussiene. Si c'est le cas prends le mode et le tour est joué, ta distribution est unimodale..
une distribution de poisson n'est pas unimodale ?
A partir du moment ou tu réussis à prouver qu'une distribution est gaussiène, tu sais qu'elle est unimodale. Mais ce n'est pas parce que tu prouves qu'une distribution est unimodale qu'elle est nécéssairement gaussiène.
Le test de normalité peut permettre de répondre à la question d'aurrutia sur la détermination du nombre de modes. Mais ce qui prime à mon avis c'est de se laisser inspirer par la forme de la distribution. La normalité n'est qu'un cas, possible certes (donc inutile de s'en priver), parmi d'autres.
C'est vrai que si un paramètre satisfaisant à un test de normalité il est uni-modal, on est d'accord
Pour les autres l'analyse des mélanges de gaussiennes est une piste.
Les fréquences ne nous permettront pas de faire une bonne détection car autour du mode on sera très sensible à la largeur des classes ...
Une autre piste à laquelle j'avais pensé mais qui n'est pas simple à implémenter est de faire un smoothing assez gros de notre distribution et à partir de là détecter les modes.
Même si l'estimation ne sera pas forcément super, le nombre de modes détécté devrait être correct.
pas uniquement! ca peut être un mélange entre une distribution gaussienne et une distribution d'un autre type, deux distributions non gaussiènnes, voire encore un mélange plus de deux distributions...Pour les autres l'analyse des mélanges de gaussiennes est une piste.
Ok j'en déduit que ta variable est de type continue. J'essaierai de plotter ma distribution directement (A première vue je ne vois pas comment le faire sous SAS dans le cas continu..). Effectivement si tu crées des intervalles pour obtenir les fréquences de ces intervalles tu risques de masquer une partie de la réalité dans ton histogramme. Une première approche passe selon moi par un scatter plot.Les fréquences ne nous permettront pas de faire une bonne détection car autour du mode on sera très sensible à la largeur des classes ...
En ce qui concerne le lissage, la encore il ya risque de masquer une partie de la réalité.
Peux tu communiquer les données dans une étape data ou dataset?
Oui on parle ici de paramètres continus.
J'ai un peu trafiqué une data du support SAS pour ajouter un deuxième mode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 data Trans; input Thick @@; label Thick = 'Plating Thickness (mils)'; datalines; 3.468 3.428 3.509 3.516 3.461 3.492 3.478 3.556 3.482 3.512 3.490 3.467 3.498 3.519 3.504 3.469 3.497 3.495 3.518 3.523 3.458 3.478 3.443 3.500 3.449 3.525 3.461 3.489 3.514 3.470 3.561 3.506 3.444 3.479 3.524 3.531 3.501 3.495 3.443 3.458 3.481 3.497 3.461 3.513 3.528 3.496 3.533 3.450 3.516 3.476 3.512 3.550 3.441 3.541 3.569 3.531 3.468 3.564 3.522 3.520 3.505 3.523 3.475 3.470 3.457 3.536 3.528 3.477 3.536 3.491 3.510 3.461 3.431 3.502 3.491 3.506 3.439 3.513 3.496 3.539 3.469 3.481 3.515 3.535 3.460 3.575 3.488 3.515 3.484 3.482 3.517 3.483 3.467 3.467 3.502 3.471 3.516 3.474 3.500 3.466 3.570 3.570 3.572 3.574 3.576 3.571 3.571 3.570 3.576 3.577 3.600 3.600 3.700 3.800 3.700 3.700 3.700 3.700 3.700 3.700 3.650 3.650 3.650 3.650 3.700 3.700 3.750 3.700 3.750 3.700 3.710 3.715 3.699 3.698 3.74 ; run; ods select Plots SSPlots; proc univariate data=Trans plot; var Thick; run;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Stem Leaf # Boxplot 380 0 1 0 378 376 374 000 3 0 372 370 0000000000005 13 0 368 89 2 | 366 | 364 0000 4 | 362 | 360 00 2 | 358 | 356 14900011245667 14 +-----+ 354 106 3 | | 352 023345881135669 15 | + | 350 001224566902233455666789 24 *-----* 348 1122348901125566778 19 | | 346 01111677788990014567889 23 +-----+ 344 133490788 9 | 342 819 3 | ----+----+----+----+---- Multiply Stem.Leaf by 10**-2
On peut voir la distribution avec lissage en tournant ces instructions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 proc univariate data=Trans plot modes; histogram Thick / kernel (c=.5 color = red); var thick; run;
Je reste sur mon point de vue, au regard de l'histogramme la binormalité de la distribution est claire. L'utilisation d'un lissage passe des méthodes plus compliquées - je ne connais pas la méthodologie dans le détail (tu sais comment ca marche?), et donc je ne le passerais pas par cette méthode sans onvestigation. Une fois cele ci réalisée, rien n'empèche d'utiliser les deux méthodes.
Deuxième point: l'option mode: ces résultats sont étranges!! Il ne détecte qu'un mode!
CFhttp://support.sas.com/documentation/cdl/en/procstat/63104/HTML/default/viewer.htm#procstat_univariate_sect027.htm
et example approprié. Tu comprends pourquoi il obtient 4 modes?
J'ai essayé la syntaxe suivante:
La, il y a deux modes, on peut pas le nier... L'output est bizarre. La encore, il y a qqc que je ne vois pas, sur la méthodologie utilisée pour la détermination du nombre de modes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 data TEST; set TRANS; if THICK >=3.65 then THICK=THICK+10; run; proc univariate data = TEST plot modes; var THICK; run;
Je suis d'accord avec Manoutz, que l'inspection visuelle de l'histogramme permet de conclure.
Le problème est que l'on n'a pas toujours le temps d'inspecter des milliers de variables ... D'ou mon but qui est de mettre en place une méthode qui va faire de la détection et on pourra ensuite aller inspecter les cas suspects.
POur ce qui est de la méthode de lissage, c'est une estimation par la méthode des noyaux :
http://fr.wikipedia.org/wiki/Estimation_par_noyau
http://support.sas.com/documentation...de_sect012.htm
Je ne sais pas si on peut d'ailleurs avoir accès en SAS aux points constituants la courbe lissée.
En ce qui concerne l'option modes de la proc univariate, d'après ce que j'ai compris ça ne s'applique que dans le cas discret, c'et basé sur les fréquences. Je crois même que quand la variable est vraiment "continue", sas lisant un grand nombre de valeurs distinctes pour la variable ne calculera pas les modes.
@+
C'est clair que cette question n'est pas évidente!
Il faut déjà se poser la question du test : existe t-il un test statistique permettant de conclure à une distribution bi-modale (ou multimodale) des données!
La réponse étant très certainement oui tu dois ensuite te poser la question du développement de la méthode sur SAS .... et là je ne suis pas certain de cela!
Concernant les méthodes à noyaux, là encore une autre difficulté apparait : en fonction de ton paramètre de lissage ta densité sera plus ou moins bruité et aura donc plus ou moins plusieurs bosses ... donc plusieurs modes possibles!
Intuitivement pour tester ton hypothèse de départ j'aurai tendance à prendre un paramètre de lissage donnant une forme très lisse aux densités puis ensuite je calculerais les dérivées de la courbe obtenue pour ainsi déterminer les modes .... toutes ces questions rejoignent ensuite les notions de gradients ....
Bref, comme indiqué dans les précédents posts il faut savoir ce que tu veux : soit une solution simple (c'est-à-dire visuelle) soit une solution plus complexe avec les problèmes sous jacents à celle-ci!
Je suis d'accord avec fafabzh6, il que tu trouves une parcimonie, et l'intensité du paramètre de lissage aura un impact visuel sur la forme de ta distribution. Le choix de sas pour résoudre le problème peut se poser.
Mais trop lisser risque de masquer des effets, pas assez en mettre trop en évidence.
J'ai réalisé une simulation rapide, deux distributions normales, avec moyennes et écart type différent de sorte à ce que les deux les distributions viennent se rencontrer pour créer une troisième bosse: une sorte de techtonique des distributions..
J'ai pris un nombre "moyen" d'observations et testé différents lissages.
J'en tire les conclusions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 data test; do i=1 to 200; VAL=10+sqrt(10)*rannor(-3); output; end; do i=201 to 400; VAL=12+sqrt(3)*rannor(-3); output; end; run; proc univariate DATA=test plot modes normal; histogram VAL / kernel (c=.1 color = red); var VAL; run; proc univariate DATA=test plot modes normal; histogram VAL / kernel (c=.5 color = red); var VAL; run; proc univariate DATA=test plot modes normal; histogram VAL / kernel (c=5 color = red); var VAL; run;
- L'intensité du lissage à un impact sur diagnostic
- Trop lisser masque des phénomènes, je partirais plutôt sur un lissage modéré
- Ce n'est pas parce que la distribution est binormale qu'elle est bimodale (enfin dans ce cas le nombre de modes est discutable: 2 ou 3?)
- Un point est difficilement considérable par un diagnostic "logiciel": le contexte de l'étude, les résultats d'études similaires: publications, études préalables...Y a-t-il possibilité de le considérer?
-Une solution simple et visuel est ce qui est le plus adapté pour une étude qui porte sur un nombre restreint de paramètres.
-Maintenant quand on a une analyse portant sur des milliers de paramètres qui tourne tous les jours et qu'on veut avoir une détection rapide des paramètres non "normaux" et en plus multi-modaux, on a besoin d'un diagnostic grossier à haut niveau.
-Pour le lissage j'ai pour habitude d'utiliser c=.5, donc un lissage moyen.
En plus du facteur de lissage, l'algo de détection pourra être un peut plus intelligent et ne pas tenir compte des "faux minimums".
-Si on reprend l'exemple de Manoutz, pour moi c'est un cas ou on reste sur quelque chose d'à peu près unimodal.
La on a clairement quelque chose de bimodal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 DATA test; do i=1 TO 200; VAL=10+sqrt(10)*rannor(-3); output; end; do i=201 TO 300; VAL=32+sqrt(3)*rannor(-3); output; end; run; proc univariate DATA=test plot modes normal; histogram VAL / kernel (c=.5 color = red); var VAL; run;
Je pense qu'il faut utiliser un test statistique formel tant que possible, et on peut le faire pour tester une distribution normale.
C'est des données simulées, donc les valeurs sont différentes à chaque fois!
Etant le nombre d'observations, pas d'ambiguité, kolmogorov smirnov..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 %macro test; %do i=1%to 15; DATA test; do i=1 TO 200; VAL=10+sqrt(10)*rannor(-3); output; end; do i=201 TO 400; VAL=12+sqrt(3)*rannor(-3); output; end; run; proc univariate DATA=test plot modes normal; histogram VAL / kernel (c=.5 color = red); var VAL; run; %end; %mend; %test;
le test de normalité est rejeté 13 fois sur 15, donc j'ai raison 13 fois sur 15!! (le nombre de 15 est choisi arbitrairement..). Bon j'ai essayé qu'une fois, j'avoue..
Encore une fois, se méfier des apparences... Je pense qu'il y a "un truc à sentir", qui te fait dire, au regard du graphique, si la distribution est gaussiène, ou si un phénomène caché se manifeste sournoisement...
En tout cas, c'est clair, pour tester l'uninormalité, pas de doute possible: le test statistique.
Le test stat peut également te permettre d'affiner la valeur de ton kernel
Partager