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 :

régression logistique et graphiques


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut régression logistique et graphiques
    Bonjour,
    Je suis nouveau sur ce site et actuellement étudiant en stat.
    Je voudrais si possible avoir des éclaircissements au sujet de la régression logistique car je débute dessus.
    Je possède une table que je nomme table_ghq:
    GHQ Sexe NCas NNonCas
    0 F 4 80
    1 F 4 29
    2 F 8 15
    3 F 6 3
    4 F 4 2
    5 F 6 1
    6 F 3 1
    7 F 2 0
    8 F 3 0
    9 F 2 0
    10 F 1 0
    0 M 1 36
    1 M 2 25
    2 M 2 8
    3 M 1 4
    4 M 3 1
    5 M 3 1
    6 M 2 1
    7 M 4 2
    8 M 3 1
    9 M 2 0
    10 M 2 0
    par la suite j'ai créé une variable prcas =Ncas/(Ncas+NNoncas) qui est la probabilité de détecter la maladie sachant que Ncas est le nombe de fois où l'on detecte la maladie et Nnoncas le nomre de fois que l'on ne detecte rien.
    GHQ est un score issu d'un questionnaire.
    Dans un premier temps ,je voudrais faire une régression logistique entre les variables prcas et GHQ pour prévoir prcas et aussi tracer la représentation de l régression avec le nuage de points. Il se trouve que en général cela se fait pour une variable dépendante binaire ,ce qui n'est pas le cas
    Voici le code que j'ai effectué sans résultat satisfaisant et je me doute bien q'il y a des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc logistic data=table_ghq ;
    model prcas = ghq ;
    output out=sortie p=prob xbeta=logit; 
    run;
    Merci d'avance pour vos réponses et conseils

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Salut,

    Rapidement, ca ne va pas car comme tu le dis la régression logistique n'accepte qu'une variable binaire (0/1) comme variable à expliquer. Donc déjà, à ce niveau là, SAS bloque.
    Une solution, si tu veux vraiment faire une régression logistique, serait d'utiliser des données sans regroupement, comme ceci :

    IdentifiantIndividu GHQ Sexe TopMalade
    1 0 F 0
    2 0 F 0
    3 0 F 1
    ...
    85 1 F 0
    86 1 F 1
    87 1 F 0
    88 1 F 0
    89 1 F 0
    90 1 F 0
    91 1 F 0
    ...etc
    Dans ce cas là ton programme devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc logistic DATA=table_ghq ;
    model TopMalade = ghq ;
    output out=sortie p=prob xbeta=logit; 
    run;
    Sinon tu peux partir de ta base actuelle et faire simplement une régression linéaire classique de prcas par ghq.(en n'oubliant pas de pondérés par les effectif (NCas + NNonCas) ).

    En espérant avoir pu t'aider,

    Will.

  3. #3
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    L'écriture avec le Top que propose MackyMax n'est valable que si tes données sont individuelles. Dans ton cas, comme ce sont des données agrégées, il faudrait les transformer pour reconstruire une table où chaque observation correspond à un cas ou à un non-cas.
    Mais pour les données agrégées, la proc Logistic accepte une seconde écriture, rarement mise en avant dans les docs : MODEL nbCas / nbIndividus = variablesExplicatives ;
    Dans ton cas, il faut juste créer la somme de cas+non-cas pour faire le dénominateur dans cette écriture.
    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
    27
    28
    29
    30
    31
    DATA work.test ;
    	INPUT GHQ Sexe $  NCas NNonCas ;
    	total = Ncas + NNonCas ;
    CARDS ;
    0 F 4 80
    1 F 4 29
    2 F 8 15
    3 F 6 3
    4 F 4 2
    5 F 6 1
    6 F 3 1
    7 F 2 0
    8 F 3 0
    9 F 2 0
    10 F 1 0
    0 M 1 36
    1 M 2 25
    2 M 2 8
    3 M 1 4
    4 M 3 1
    5 M 3 1
    6 M 2 1
    7 M 4 2
    8 M 3 1
    9 M 2 0
    10 M 2 0 
    ;
    RUN ;
    PROC LOGISTIC DATA=work.test ;
    	MODEL Ncas / total = ghq ;
    RUN ;
    Pour le nuage de points, tu peux le faire "brut" en croisant la proba que tu as construite, croisée avec ghq, mais le motif à repérer n'est pas une droite (au contraire de la régression linéaire classique). Ici, comme on transforme avec un lien logit, il faudrait repérer un motif en forme de S très étiré : pas forcément facile. On peut utiliser la fonction réciproque du logit en amont et la croiser avec ta variable explicative : là on cherchera un motif linéaire. Cette quantité log(NbCas/NbNonCas) est un log(cote) ou log-odds en anglais, qu'on appelle aussi Weight of Evidence en étude de risque. J'ai l'habitude de le forcer à 3 ou à -3 (qui sont des valeurs rarement atteintes naturellement) dans les cas où ce n'est pas calculable (LOG(0) ou division par zéro).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA work.log_odds ;
    	SET work.test ;
    	SELECT ;
    		WHEN (Ncas=0) logOdds = 3 ;
    		WHEN (NNonCas=0) logOdds = -3 ;
    		OTHERWISE logOdds = LOG(Ncas/NNonCas) ;
    	END ;
    RUN ;
    PROC GPLOT DATA=work.log_odds ;
    	BUBBLE logOdds * ghq = total ;
    RUN ; QUIT ;
    Dans ton cas, le modèle s'annonce super bon (c=0,882), même si graphiquement ça ne saut pas aux yeux.
    Bon courage.
    Olivier

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut régresion logistique et graphique
    Merci pou vos réponses qui m'ont éclaircies les idées cependant même en utilisant une proc gplot et symbol i=join je n'arrive pas à obtenir la courbe attendue( en S étirée) car je compte par la suite rajouter la variable sexe dans mon modèle et ensuite visualiser la courbe.

    Merci d'avance et bonne soirée.

  5. #5
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Je ne pense pas qu'on puisse faire un BUBBLE avec une droite de régression. Il faut revenir au PLOT classique pour pouvoir superposer des courbes.
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SYMBOL i=sm v=plus ;
    PLOT prcas * ghq ;
    on devrait essayer de repérer la forme de S allongé.
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SYMBOL i=rl v=plus ;
    PLOT logOdds * ghq ;
    on regardera une droite de régression linéaire essayer de s'ajuster aux points, mais sans tenir compte des effectifs.
    Dans PLOT, tu pourras en plus faire un PLOT y * ghq = sexe ; pour voir les deux groupes différenciés.
    Bon courage.
    Olivier

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/07/2012, 18h07
  2. tracer régression logistique
    Par joyeux_lapin13 dans le forum SAS STAT
    Réponses: 2
    Dernier message: 28/04/2010, 17h07
  3. Régression logistique avec intéractions
    Par joyeux_lapin13 dans le forum SAS STAT
    Réponses: 1
    Dernier message: 27/04/2010, 11h43
  4. régression logistique SAS
    Par sandrine_87 dans le forum SAS STAT
    Réponses: 1
    Dernier message: 09/02/2009, 21h01
  5. Réponses: 1
    Dernier message: 17/04/2007, 16h47

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