|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 :
|
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
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.
|
|
|
10
|
|
|
#3 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
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). |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Si tu as la 9.1, voici comment tu dois procédé
Code :
|
||
|
|
00
|
|
|
#5 | |||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 :
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:
Code :
C'est un peu compliqué, j'espère que j'ai été assez clair... Merci |
|||||
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
Si je reprends sur un exemple, voilà où j'en suis pour le moment.
Code :
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 ! |
||
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
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 :
|
||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 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... |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
cet exemple ne ressemble pas à ce que tu souhaites obtenir?
Code :
|
||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 + ...) |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Il te faut un modèle sans la constante:
Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 :
|
||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
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?
|
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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 ? |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Au tant pour moi, j'ai omis le moins de l'exponentiel
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
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). |
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
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 :
|
||
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 12 ![]() |
Ok c'est parfait, merci !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com