Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/06/2011, 15h00   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
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 :
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
Type de fichier : png roc.png (11,7 Ko, 6 affichages)
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h31   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

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

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
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é !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h10   #3
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
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...
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h37   #4
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h02   #5
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
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...
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h36   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h52   #7
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
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
Type de fichier : png roc_model.png (16,4 Ko, 0 affichages)
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 17h13   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 17h40   #9
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
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
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 17h50   #10
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h49.


 
 
 
 
Partenaires

Hébergement Web