IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Calcul du nombre de modes d'une distribution (unimodal/bimodal/etc)


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Calcul du nombre de modes d'une distribution (unimodal/bimodal/etc)
    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 !

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    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?

  3. #3
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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..

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    une distribution de poisson n'est pas unimodale ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    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.

  7. #7
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Pour les autres l'analyse des mélanges de gaussiennes est une piste.
    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...

    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 ...
    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.

    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?

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    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;

  9. #9
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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:

    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;
    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...

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    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.

    @+

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 294
    Points
    16 294
    Par défaut
    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!

  12. #12
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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.
    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;
    J'en tire les conclusions:
    • 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?

  13. #13
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    -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.

    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;
    La on a clairement quelque chose de bimodal

  14. #14
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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!

    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;
    Etant le nombre d'observations, pas d'ambiguité, kolmogorov smirnov..

    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.

  15. #15
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Le test stat peut également te permettre d'affiner la valeur de ton kernel

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/12/2006, 13h35
  2. Réponses: 4
    Dernier message: 07/09/2006, 16h02
  3. [TSQL] calculer le nombre de mot dans une cellule
    Par ricachu dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/07/2006, 12h12
  4. Réponses: 4
    Dernier message: 11/06/2006, 13h05
  5. Réponses: 4
    Dernier message: 16/12/2005, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo