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 d'un score après une regression logistique


Sujet :

SAS STAT

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Calcul d'un score après une regression logistique
    Bonjour,

    Je cherche à automatiser le calcul d'un score après une régression logistique.
    Dans un 1er temps je récupère les estimations des paramètres sur un échantillon d'apprentissage.
    Ensuite je veux calculer un score sur un jeu de données test à partir des estimations de l’échantillon d"apprentissage.

    Sur un exemple, voilà comment je procède actuellement :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    data covar;
    input aaa bbb ccc ;
    cards;
    0 0 1
    1 1 1
    1 1 0
    0 1 1
    1 1 1
    0 0 2
    1 0 0
    1 0 1
    1 1 0
    0 1 2
    run;
     
    data estim;
    input name$ estim;
    cards;
    aaa1 0.879
    bbb1 0.578
    ccc1 0.937
    ccc2 0.376
    run;
     
    /* Création macro-variables avec l'estimation associée à chq variable */
    DATA _null_;
    SET estim;
    call symputx(name , estim);
    run;
     
    /* Attribution des valeurs des estimations */
    data tmp;
    set covar;
    if aaa=0 then V_1=0; if aaa=1 then V_1=&aaa1;
    if bbb=0 then V_2=0; if bbb=1 then V_2=&bbb1;
    if ccc=0 then V_3=0; if ccc=1 then V_3=&ccc1; if ccc=2 then V_3=&ccc2;
    run;
     
    /* Calcul d'un score pr chq individu */
    DATA score;
    set tmp;
    ARRAY V_col[3] V_1-V_3 ;
    score=0;
    DO i = 1 TO 3 ;
    	score=score+V_col[i];
    end;
    drop i;
    RUN;
    Le nombre de variables et le nombre de modalités par variables étant variables, je cherche donc à automatiser cette procédure. Est-ce que vous auriez quelques pistes à me conseiller ? Merci d'avance !

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    L'instruction outmodel te permet de valider le modèle sur un autre èchantillon que celui qui a servi à construire le modèle. C'est plus simple, cela t'évite de passer par des macros.

  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 : 46
    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
    Il y a (au moins) 2 solutions en plus de OUTMODEL/INMODEL proposé par Brice :
    1) créer une table en empilant les données qui ont servi à construire le modèle, et les données à scorer. Pour ces dernières, remplacer les valeurs de Y par des valeurs manquantes. Mettre cette table en entrée de la proc LOGISTIC et récupérer les scores avec OUTPUT OUT. C'est bête et méchant, mais ça marche sur toutes les versions de SAS.
    2) à partir de SAS 9, il y a une instruction SCORE dans la proc LOGISTIC qui permet d'indiquer une table à scorer (séparément de DATA qui reste la table pour construire le modèle).

    Et puis si tu es très courageux (courageuse), il y a la récupération des coefficients, suivie d'une proc SCORE ou d'une macro pour faire la combinaison linéaire, puis d'une étape DATA pour appliquer le lien logit inverse.

    Bref, les solutions de manquent pas, à toi de voir ce qui est le plus simple selon ta version de SAS (a priori, comme Brice, INMODEL/OUTMODEL).
    Bon courage.
    Olivier

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Si tu as la 9.1, voici comment tu dois procédé

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    data apprent;
    input Y x;
    cards;
    1 415
    0 48 
    0 5
    1 89
    0 78
    0 69
    1 104
    1 36
    ;
    run;
     
    data valid;
    input Y x;
    cards;
    1 4
    0 4 
    0 50
    1 9
    0 115
    0 899
    1 904
    1 31
    ;
    run;
     
    proc logistic data=apprent;
    model Y(event="1") =x;
    score data=apprent out=apprent_score;
    score data=valid out=valid_score;
    run;
     
    /* cette macro te permet de calculer l'aire sous la courbe sur les données de validation à comparer avec avec celle d'apprentissage pour estimer la robustesse du modèle*/
     
    %MACRO auc (TABLE=, variableScore=, variableY=, out=, event=) ;
    	PROC SQL ;
    		%IF &out NE %THEN %DO ;
    			CREATE TABLE &out AS
    		%END ;
    		SELECT (SUM(t1.&variableScore > t0.&variableScore) 
                     + 0.5*SUM(t1.&variableScore = t0.&variableScore))
                   / COUNT(*) AS aire FORMAT = 5.3
    		FROM &table (WHERE = (&variableY NE &event)) AS t0,
    			 &table (WHERE = (&variableY =  &event)) AS t1
    		;
    	QUIT ;
    %MEND auc ;
     
    %auc(TABLE=valid_score, variableScore=P_1, variableY=Y, out=aire_courbe_valid, event=1);
    %auc(TABLE=apprent_score, variableScore=P_1, variableY=Y, out=aire_courbe_apprent, event=1);

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Tout d'abord désolé pour le temps de réponse... Je vous remercie de vos réponses. Je ne connaissais pas les instructions outmodel/inmodel et c'est en effet beaucoup plus simple !

    Cela dit, avec cette syntaxe je bute encore sur quelques points.

    1- Si je veux construire une échelle de score, avec des sous-scores "ronds" pour chacune des modalités (et ainsi faciliter le calcul d'un score total pour chaque individu), il existe plusieurs méthodes que j'applique comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Multiplication par 4 du coefficient et arrondi à l'entier le + proche */
    data estim;
    set estim;
    Y=round(4*Y,1);
    run;
    /* OU division par le + petit coeff et arrondi à l'entier le + proche */
    proc sql;
    CREATE TABLE estim AS SELECT _NAME_, _LABEL_, round(Y/min(Y),1) as devenir FROM estim;
    quit;
    Pour effectuer ces opérations, je ne vois pas d'autre moyen que de passer par le code que j'ai mis dans mon premier post, d'où la question de l'automatisation...


    2- Je cherche à calculer un facteur de correction de mes coefficients de régression (comme la qualité apparente d’un modèle est généralement meilleure dans l’échantillon ayant servi à la construction du modèle que dans un autre échantillon), via le bootstrap.
    Pour ce faire, j'applique la méthode suivante :
    Citation Envoyé par http://www.yaroslavvb.com/papers/steyerberg-application.pdf
    1. Take a random bootstrap sample from the original sample, with the same size and
    patient records drawn with replacement (see e.g. EFRON, 1993).
    2. Estimate the logistic regression coefficients in the bootstrap sample.
    3. Calculate the PI for each patient in the original sample. The PI is the linear
    combination of the regression coefficients as estimated in the bootstrap sample
    with the values of the covariables in the original sample.
    4. Estimate the slope of the PI with logistic regression, using the outcomes of the
    patients in the original sample and the PI as a single covariable.
    J'ai donc besoin de récupérer la "pente" du score dans un modèle de régression logistique du résultat (variable Y) des individus de l’échantillon d’origine en fonction du score. Ce que je fais via la syntaxe suivante (à la suite du code de mon premier post) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc logistic data=valid outest=slope;
    model Y(event="1") = score ;
    score data=valid out=valid_score;
    run;
    Est-il possible de récupérer ce paramètre via la syntaxe inmodel/outmodel ?

    C'est un peu compliqué, j'espère que j'ai été assez clair... Merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Si je reprends sur un exemple, voilà où j'en suis pour le moment.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    DATA valid;
    input aaa bbb ccc ;
    cards;
    0 0 1
    1 1 1
    1 1 0
    0 1 1
    1 1 1
    0 0 2
    1 0 0
    1 0 1
    1 1 0
    0 1 2
    run;
     
    DATA estim_apprent;
    input name$ estim;
    cards;
    aaa1 0.879
    bbb1 0.578
    ccc1 1.235
    ccc2 0.376
    run;
     
    data estim_apprent2;
    set estim_apprent;
    estim=round(4*estim,1);
    run;
     
    /* Création macro-variables avec l'estimation associée à chq variable */
    DATA _null_;
    SET estim_apprent2;
    call symputx(name , estim);
    run;
    %put _user_;
     
    %let liste_var=aaa bbb ccc;
    %LET nb_var=%EVAL(%SYSFUNC(count(%cmpres(&liste.),%STR( )))+1);
     
    %macro score();
    data tmp1;
    set valid;
    %do i = 1 %to &nb_var;
    	%let liste = &liste;
    	%let sous_score&i = %scan(&liste,&i);
    	%let estim&i=&%scan(&liste,&i)1;
    		if &&sous_score&i=0 then sous_score&i=0 ;
    		else sous_score&i=&&estim&i;
    %end;
    run;
     
    %end;
    run;
     
    DATA tmp2;
    set tmp1;
    ARRAY sum[&nb_var] sous_score1-sous_score&nb_var ;
    score=0;
    %DO i = 1 %TO &nb ;
    	score=score+sum[&i];
    %end;
    RUN;
     
    %mend score;
     
    %score();
    Je n'arrive pas à voir comment gérer le cas où une variable a plus de 2 modalités et donc plusieurs coefficients de régression associés.
    Sur l'exemple, la variable ccc a 3 modalités : 0,1,2.
    Si ccc=0 -> sous_score = 0 c'est ok
    Si ccc=1 -> sous_score = &ccc1 = 5 ok
    Si ccc=2 -> sous score = &ccc1 = 5 ce n'est pas bon, il faudrait &ccc2

    Si quelqu'un voit une solution, merci d'avance !

  7. #7
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Je n'ai pas trop compris ce que tu cherches à faire mais je te propose ça pour automatiser avant d'avoir plus de détails


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    DATA valid;
    input aaa bbb ccc ;
    cards;
    0 0 1
    1 1 1
    1 1 0
    0 1 1
    1 1 1
    0 0 2
    1 0 0
    1 0 1
    1 1 0
    0 1 2
    run;
     
    DATA estim_apprent;
    input name$ estim;
    cards;
    aaa1 0.879
    bbb1 0.578
    ccc1 1.235
    ccc2 0.376
    run;
     
    DATA estim_apprent2;
    SET estim_apprent;
    estim=round(4*estim,1);
    run;
     
    /* Création macro-variables avec l'estimation associée à chq variable */
     
    proc contents data=valid out=out;
    run;
     
    proc sort data=out;
    by varnum;
    run;
    proc sql;
    select name into: liste separated by " " from out;
    select estim into: estim separated by " " from estim_apprent2;
    select count(*) into:nb_var from out;
    quit;
     
     
    %put liste=&liste.;
    %put estim =&estim .;
    %put nb_var=&nb_var.;

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Je cherche à calculer un score pour chaque individu de ma table "valid", qui est la combinaison des coefficients de régression estimés dans la table "estim_apprent2" selon la valeur des covariables de la table "valid".

    Plus clairement, pour l'individu 10 par exemple, on a :
    aaa=0, bbb=1, ccc=2
    Sachant que les estimations des paramètres sont :
    aaa1=4, bbb1=2, ccc1=5, ccc2=2
    J'obtiens un score pour cet individu égal à :
    (0*aaa1 + bbb1 + ccc2) = 0+2+2 = 4

    La table "estim_apprent" est une sortie d'une régression logistique. Dans cette table les noms des estimations des coefficients sont de la forme nom_variablenum_modalite, soit aaa1 pour la variable aaa qui a 2 modalités 0 (classe de référence) ou 1, et ccc1 et ccc2 pour la variable ccc qui a 3 modalités 0,1 et 2.

    Le code dans mon précédent message permet de calculer correctement le score pour chaque individu dans le cas où je n'ai que des variables à 2 modalités, donc des noms des estimations des coefficients de la forme "nom_var1", d'où la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %let estim&i=&%scan(&liste,&i)1;
    Je coince dans le cas où j'ai des variables à j modalités (j>2), donc des noms des estimations des coefficients de la forme "nom_varj".

    J'espère que je suis un peu plus clair...

  9. #9
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    cet exemple ne ressemble pas à ce que tu souhaites obtenir?

    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
     Data Neuralgia;
          input Treatment $ Sex $ Age Duration Pain $ @@;
          datalines;
       P  F  68   1  No   B  M  74  16  No  P  F  67  30  No
       P  M  66  26  Yes  B  F  67  28  No  B  F  77  16  No
       A  F  71  12  No   B  F  72  50  No  B  F  76   9  Yes
       A  M  71  17  Yes  A  F  63  27  No  A  F  69  18  Yes
       B  F  66  12  No   A  M  62  42  No  P  F  64   1  Yes
       A  F  64  17  No   P  M  74   4  No  A  F  72  25  No
       P  M  70   1  Yes  B  M  66  19  No  B  M  59  29  No
       A  F  64  30  No   A  M  70  28  No  A  M  69   1  No
       B  F  78   1  No   P  M  83   1  Yes B  F  69  42  No
       B  M  75  30  Yes  P  M  77  29  Yes P  F  79  20  Yes
       A  M  70  12  No   A  F  69  12  No  B  F  65  14  No
       B  M  70   1  No   B  M  67  23  No  A  M  76  25  Yes
       P  M  78  12  Yes  B  M  77   1  Yes B  F  69  24  No
       P  M  66   4  Yes  P  F  65  29  No  P  M  60  26  Yes
       A  M  78  15  Yes  B  M  75  21  Yes A  F  67  11  No
       P  F  72  27  No   P  F  70  13  Yes A  M  75   6  Yes
       B  F  65   7  No   P  F  68  27  Yes P  M  68  11  Yes
       P  M  67  17  Yes  B  M  70  22  No  A  M  65  15  No
       P  F  67   1  Yes  A  M  67  10  No  P  F  72  11  Yes
       A  F  74   1  No   B  M  80  21  Yes A  F  69   3  No
       ;
    proc logistic data=Neuralgia outest=estim;
          class Treatment Sex;
          model Pain= Treatment Sex Treatment*Sex Age Duration ;
    	output out=pred p=phat ;
       run;

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Oui, la probabilité estimée "phat" de la table "pred" est calculée à partir des estimations de la table "estim" suivant les covariables de la table "Neuralgia" (suivant la formule phat=1/[1+exp-(beta0 + beta1 * TreatmentA + beta2 * TreatmentB + beta3 * SexeF + ...)])

    C'est aussi ce que je cherche à faire, mais "à la main" et le calcul que je fais est un peu plus simple :
    score = (beta1 * TreatmentA + beta2 * TreatmentB + beta3 * SexeF + ...)

  11. #11
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Il te faut un modèle sans la constante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proc logistic data=Neuralgia outest=estim;
          class Treatment Sex;
          model Pain= Treatment Sex Treatment*Sex Age Duration/NOINT ;
    	output out=pred p=phat ;
    run;
    
    data pred;
    	set pred;
    	score= log((1-phat)/phat);
    run;

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci pour la réponse, j'avais déjà pensé passer via cette solution (puis je ne sais plus pourquoi j'avais du bloquer et je me suis embarqué dans les macros...).
    Par contre les estimations des paramètres ne sont pas les mêmes entre les modèles avec et sans constante, hors je veux calculer mon score à partir des estimations des coefficients du modèle AVEC constante.

    Si je ne me trompe pas, ça donne donc ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    proc logistic data=Neuralgia outest=estim;
          class Treatment Sex;
          model Pain= Treatment Sex Treatment*Sex Age Duration ;
    	output out=pred p=phat ;
    run;
     
    proc sql noprint;
    SELECT Intercept INTO: int FROM estim;
    quit;
     
    data pred;
    	set pred;
    	score= -log((1-phat)/phat)-∫
    run;
    Ça devrait pouvoir s'adapter à ce que je veux faire par la suite. Merci bien !

  13. #13
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    J'y ai pensé après avoir posté, par contre il faudrait que tu enlèves l'option NOINT afin d'avoir la constante. Et pourquoi ya un moins devant la log?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Ok pour le NOINT (j'ai édité le message précédent).

    Pour le moins devant le log, si on cherche à isoler le score à partir de l'équation :
    phat=1/[1+exp-(beta0 + beta1 * X1)] avec score = (beta1 * X1)

    Ca donne bien :

    score = -log((1-phat)/phat)-beta0, non ?

  15. #15
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Au tant pour moi, j'ai omis le moins de l'exponentiel

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    En fait je crois que cette solution ne résout pas vraiment mon problème... Je m'explique :
    Avec cette solution, on arrive à calculer le score voulu (beta1 * X1 + beta2 * X2 + ... ) pour chacun des individus de l'échantillon d'apprentissage.
    (autrement dit : le score est calculé à partir des estimations de l'ech d'apprentissage suivant les covariables l'ech d'apprentissage)

    Hors je voudrais calculer ce score pour les individus d'un autre échantillon (éch de validation).
    (autrement dit : le score doit être calculé à partir des estimations de l'ech d'apprentissage suivant les covariables l'ech de validation).

  17. #17
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Ce sont les estimations calculées sur l'échantillon d'apprentissage qui est appliqué sur l'échantillon de validation, ça ne devait pas poser de problèmes.

    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
     
     
     
    %let seed=123;
    data apprent valid;
    set neuralgia;
    if ranuni(&seed.)<0.66 then output apprent;
    else output valid;
    run;
     
    proc logistic DATA=apprent outest=estim;
    class Treatment Sex;
    model Pain(event="yes")= Treatment Sex Treatment*Sex Age Duration ;
    score DATA=apprent out=apprent_score;
    score DATA=valid out=valid_score;
    run;
     
    proc sql noprint;
    SELECT Intercept INTO: int FROM estim;
    quit;
     %put intercept=&int.;
     
    DATA valid_score;
    	SET valid_score;
    	score= -log((1-P_yes)/P_yes)-&int;
    run;

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Ok c'est parfait, merci !

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 12
    Points
    12
    Par défaut score de risque
    Bonjour à tous,

    je travaille sur les scores en regression logistique et j'ai vu votre discussion très intéressante,

    Pistol22 je n'arrive pas à comprendre cmt ta pu isoler score dans ton équation pour obtenir score = -log((1-phat)/phat)-beta0 ?

    je croyais que c 'est score= log( phat/(1-phat)) !!!

    merci pour votre aide

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

Discussions similaires

  1. Scoring avec une regression linéaire
    Par n3mrod dans le forum SAS STAT
    Réponses: 7
    Dernier message: 10/06/2015, 15h48
  2. Variables significatives dans une regression logistique
    Par cococmoi dans le forum SAS STAT
    Réponses: 0
    Dernier message: 26/04/2013, 15h22
  3. Pertinence du modèle apres une regression logistique
    Par koulifanya dans le forum SAS STAT
    Réponses: 1
    Dernier message: 09/08/2011, 21h31
  4. Score sur une regression logistique
    Par Just07 dans le forum SAS STAT
    Réponses: 0
    Dernier message: 19/05/2011, 11h14
  5. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12

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