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 :

Courbe ROC à l'envers


Sujet :

SAS STAT

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Points : 35
    Points
    35
    Par défaut Courbe ROC à l'envers
    Bonjour à tous,

    J'ai un petit souci en affichant la courbe ROC issue d'une régression logistique : elle s'affiche à l'envers (graphique attaché). Pourtant, j'ai suivi tout simplement les instructions données par SAS, à savoir exporter les données avec l'instruction SCORE, puis afficher la sensibilité en fonction de (1 - la spécificité).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Le modèle avec la proba de défaut comme endogène */
    proc logistic data=apprent;
    model defaut(ref='0')= ... /SELECTION=stepwise;
    score data=apprent out=app_score outroc=app_roc;
    run;
     
    /* Traçage de la courbe selon la procédure donnée par SAS */
    proc gplot data=app_roc;
    title 'ROC Curve';
    symbol1 i=join v=none c=blue;
    plot _sensit_*_1mspec_=1 / vaxis=0 to 1 by .1 cframe=ligr;
    run;
    Mon modèle est a priori discriminant avec une aire sous la courbe ROC de 0.742. De plus, j'ai bien spécifié que je souhaite modéliser la proba de défaut (defaut='1') dans la régression logistique. C'est certainement une petite bêtise, mais laquelle ?

    Merci d'avance,
    Mark
    Images attachées Images attachées  

  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 : 51
    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
    tu as un jeu de données pour tester ?

    Là encore tu es en 6.1 ?
    je te demande car ROC fait partie de l'ODS graphics.
    (http://support.sas.com/documentation...ic_sect058.htm)
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Le jeu de données est assez gros, je veux bien tout t'envoyer par mail si tu es chaud pour tester. Mais on peut certainement régler ça simplement.

    Oui, je suis en 6.1 (c'est une version si vieille que ça ?) et la syntaxe avec "plots(only)" ne fonctionne pas chez moi. De toutes façons, il faut que j'aie la possibilité de tracer pour la courbe ROC pour l'échantillon d'apprentissage mais aussi pour l'échantillon de validation (que je n'ai pas précisé dans le code ci-dessus). Donc l'export des sensibilités avec l'instruction "score" pour chaque échantillon me convenait très bien.

    Comme tu peux le voir, j'ai repris exactement le code donné dans l'aide de SAS pour tracer la courbe ROC. Ce que je ne comprends pas, c'est qu'une courbe à l'envers sous-entend que mon modèle discrimine moins bien que le hasard (représenté par la diagonale). Pourtant, l'aire sous la courbe ROC (indice c dans SAS) est élevée...

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    Mark, je pense que Stéphane/Datametric te charrie avec la version de SAS. C'est 9.1, car sinon tu n'aurais pas d'instruction SCORE.
    La version 6.12 a rendu son dernier soupir vers 2002, je crois. Donc avoir une 6.1 semble totalement impossible (ou alors on ne parle pas de SAS).

    Moi aussi je suis intrigué par ton problème parce que je n'arrive pas à le reproduire. Mes courbes ROC sont dans le bon sens avec ta syntaxe.
    Bon courage.
    Olivier

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Oups, au temps pour moi, je voulais bien entendu dire 9.1 ! Mais je sais que la version 9.2 a apporté pas mal de fonctionnalités dont je ne dispose pas.

    Sinon, je viens de redémarrer SAS, de réexécuter le code, et j'ai le même problème. Tu penses que ça peut être un bug lié à la 9.1 ? Au pire, je peux utiliser la macro de Tufféry pour tracer la courbe ROC...

  6. #6
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    Un bug de la 9.1 ? Ce serait surprenant et je ne l'ai jamais rencontré.
    Est-ce que tu peux transporter ton option OUTROC dans l'instruction MODEL, juste après le SELECTION=FORWARD ? Ça doit rendre le même service et ça nous dira si c'est un souci dans les données.

    PS : si tu veux m'expédier les données en PJ d'un mail je veux bien tester de mon côté sur ma 9.2.
    Bon courage.
    Olivier

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Bien vu, lorsque je transpose l'option OUTROC au niveau de l'instruction MODEL et que j'exécute la macro d'affichage, ma courbe s'affiche dans le bon sens. Après, plusieurs courbes s'affichent, je ne sais pas trop comment les interpréter.

    J'ai inspecté les données exportées dans les 2 cas et elles sont différentes. Je n'ai pas du tout les mêmes niveaux de probabilité associées aux sensibilités. Tu as essayé chez toi de tracer la courbe dans les 2 cas ? Sinon, ok, je peux t'envoyer la base et le code.
    Images attachées Images attachées  

  8. #8
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    En 9.2 les deux courbes sont les mêmes. Ma 9.1 ne fonctionne plus donc je ne peux pas tester (peut-être demain chez un client, j'essaye d'y penser).

    Pour la superposition des courbes ROC, c'est dû à la présence simultanée du FORWARD. Tu peux conserver la courbe de chaque étape du FORWARD grâce à OUTROC au niveau de MODEL. En théorie, dans SCORE, OUTROC ne te renvoie que les courbes ROC du dernier choix de FORWARD.
    Un WHERE en plus dans ta proc GPLOT te restreindra à un seul modèle.

    L'hypothèse de ton problème serait donc : en 9.1, quand tu utilises l'instruction SCORE, SAS fait à son idée sur la modalité "évènement" de Y. Et ignore ce qu'on lui indique dans MODEL. En tout cas ça n'arrive plus en 9.2.
    Les contournements possibles seraient de spécifier autrement quelle est la valeur à modéliser dans ton Y : soit une option DESC dans l'instruction PROC LOGISTIC (avec DATA et compagnie), soit un (EVENT="1") à côté de ta variable Y, à gauche du = dans MODEL.
    Peut-être qu'une des deux solutions te conservera ta syntaxe d'origine, avec OUTROC dans SCORE qui est bien pratique (puisqu'on peut ainsi comparer la courbe ROC sur entraînement et validation).

    Quant au bug, je retire mes propos après réflexion. Il y avait en 9.1 des bugs dans l'instruction SCORE si le modèle faisait appel à des variables quali (CLASS) utilisant des formats utilisateurs. Donc si ça se trouve il y avait d'autres problèmes au niveau de cette instruction.

    Bon courage.
    Olivier
    Bon courage.
    Olivier

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Bien joué, ta première solution (l'option DESC) a fonctionné ! J'ai maintenant ma courbe ROC dans le bon sens. J'avais peur que ça crée un conflit avec (ref='0') mais mes coefficients estimés sont restés les mêmes.

    Donc ce serait bel et bien un bug de la 9.1 : l'instruction SCORE ne prendrait pas en compte le bon événement modélisé dans MODEL. Le tout est de le savoir...

    Merci (encore) beaucoup pour ton aide !
    Mark

  10. #10
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    Bon, on aurait dû commencer par là : il est documenté, le bug. Ça parle de l'option EVENT mais c'est la même chose que ton REF, à l'envers.
    Bon courage.
    Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Courbes roc, seuil et comparaison
    Par mathis86 dans le forum R
    Réponses: 1
    Dernier message: 26/08/2011, 11h14
  2. Courbe roc et seuil
    Par mathis86 dans le forum SAS STAT
    Réponses: 1
    Dernier message: 25/08/2011, 18h18
  3. Courbe ROC pour KNN
    Par cobaltsixty dans le forum R
    Réponses: 0
    Dernier message: 07/09/2010, 18h23
  4. Tracer un courbe roc
    Par elfidream dans le forum SAS STAT
    Réponses: 2
    Dernier message: 18/06/2009, 19h20
  5. Courbes ROC dans une image segmentée
    Par yasminsila dans le forum Images
    Réponses: 10
    Dernier message: 18/02/2009, 16h24

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