Publié le :
Statistique CREATION_INTERNE

Comparaison de modèles de régression avec PROC GLM et macros

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script commence par créer un jeu de données 'comp2010' à partir de données en ligne (datalines/cards), en calculant des variables supplémentaires. Ensuite, il définit une macro `%hw6problem1` qui encapsule la procédure `PROC GLM` pour ajuster un modèle de régression linéaire. Une seconde macro, `%hw6problem2`, utilise la première pour ajuster deux modèles (un complet et un réduit), combine leurs statistiques de sortie, et calcule manuellement un test F pour comparer les deux modèles. Enfin, le script exécute cette comparaison de modèles à deux reprises avec des configurations différentes et génère un rapport PDF.
Analyse des données

Type : CREATION_INTERNE


Le jeu de données 'comp2010' est créé directement dans le code à l'aide d'une étape DATA avec une instruction 'cards' pour l'entrée des données.

1 Bloc de code
ODS
Explication :
Ouvre une destination ODS pour générer un fichier de sortie au format PDF.
Copié !
1ods pdf file="HW6NickLipanovich.pdf";
2 Bloc de code
DATA STEP Data
Explication :
Crée la table 'comp2010'. Lit les trois variables 'winper', 'score', et 'save' à partir des données en ligne (cards) et calcule trois variables supplémentaires : 'save2', 'scoresave', et 'differential'.
Copié !
1DATA comp2010;
2INPUT winper score save;
3 save2=save*save;
4 scoresave = score+save;
5 differential = 100*(save-(1-score));
6CARDS;
70.661016949 0.409090909 0.706730769
80.631578947 0.369158879 0.720379147
90.571428571 0.317596567 0.729613734
100.593220339 0.352040816 0.712871287
110.615384615 0.365714286 0.729885057
120.596153846 0.359605911 0.694581281
130.517241379 0.339622642 0.690821256
140.576923077 0.340909091 0.714285714
150.568627451 0.365979381 0.680412371
160.5625 0.388571429 0.649122807
170.519230769 0.349726776 0.650793651
180.465517241 0.256281407 0.705882353
190.446428571 0.293532338 0.668367347
200.568181818 0.404580153 0.65942029
210.510638298 0.315068493 0.68627451
220.436363636 0.308080808 0.663212435
230.442307692 0.337423313 0.62962963
240.5 0.283950617 0.707006369
250.55 0.324675325 0.70625
260.44 0.345945946 0.60989011
270.456521739 0.365853659 0.628930818
280.416666667 0.259259259 0.680851064
290.434782609 0.305389222 0.650887574
300.434782609 0.337423313 0.625
310.358490566 0.234972678 0.653631285
320.386363636 0.309859155 0.582733813
330.457142857 0.345132743 0.617391304
340.365853659 0.311258278 0.623287671
350.365853659 0.27480916 0.603053435
360.378378378 0.307692308 0.580357143
37;
38RUN;
3 Bloc de code
PROC PRINT
Explication :
Affiche le contenu de la table 'comp2010' dans la sortie de résultats.
Copié !
1PROC PRINT DATA=comp2010;
2RUN;
3QUIT;
4 Bloc de code
MACRO
Explication :
Définit une macro `%hw6problem1` qui exécute la procédure GLM (General Linear Model). La macro ajuste un modèle ('model') pour une variable dépendante ('outcome') en fonction de prédicteurs ('modelx'). Elle peut optionnellement inclure une variable de classification ('classx'). Les statistiques du modèle sont sauvegardées dans une table de sortie ('myoutstat').
Copié !
1%macro hw6problem1 (outcome,classx,modelx,myoutstat,indata);
2 %IF &classx=' ' %THEN
3 %DO;
4 PROC GLM noprint DATA=&indata outstat=&myoutstat;
5 model &outcome = &modelx;
6 RUN;
7 QUIT;
8 %END;
9 %ELSE
10 %DO;
11 PROC GLM noprint DATA=&indata outstat=&myoutstat;
12 class &classx;
13 model &outcome = &modelx;
14 RUN;
15 QUIT;
16 %END;
17 
18%mend;
5 Bloc de code
MACRO Data
Explication :
Définit une macro `%hw6problem2` pour comparer deux modèles (un complet et un réduit). Elle appelle deux fois la macro `%hw6problem1` pour ajuster chaque modèle. Ensuite, via des étapes DATA, elle combine les résultats, calcule la statistique du test F et la p-valeur associée pour évaluer si le modèle complet est significativement meilleur que le modèle réduit. Le résultat du test F est ensuite affiché.
Copié !
1%macro hw6problem2 (outcome,classx1,classx2,modelx1,modelx2,myoutstat1,myoutstat2,indata);
2 %hw6problem1 (&outcome,&classx1,&modelx1,&myoutstat1,&indata);
3 %hw6problem1 (&outcome,&classx2,&modelx2,&myoutstat2,&indata);
4 DATA fullvsreduced;
5 SET &myoutstat1 &myoutstat2;
6 IF _type_="ERROR";
7 RUN;
8 PROC SORT DATA=fullvsreduced;
9 BY df;
10 RUN;
11 DATA fullvsreduced2;
12 SET fullvsreduced;
13 fullss=lag(ss);
14 fulldf=lag(df);
15 num = (ss-fullss)/(df-fulldf);
16 den = fullss/fulldf;
17 f = num/den;
18 pvalue=1-cdf('f', f, df-fulldf, fulldf);
19 keep f pvalue;
20 IF _n_=1 THEN delete;
21 RUN;
22 PROC PRINT DATA=fullvsreduced2;
23 RUN;
24%mend;
6 Bloc de code
MACRO CALL
Explication :
Appelle la macro de comparaison de modèles `%hw6problem2` à deux reprises. Le premier appel compare un modèle avec 'score' et 'save' comme prédicteurs à un modèle plus simple avec 'differential'. Le second appel inverse l'ordre de la comparaison. Les résultats sont écrits dans les tables 'ssout' et 'dout'.
Copié !
1%hw6problem2(winper,,,score save,differential,ssout,dout,comp2010);
2%hw6problem2(winper,,,differential,score save,dout,ssout,comp2010);
3 
7 Bloc de code
ODS
Explication :
Ferme la destination ODS PDF, finalisant ainsi la création du fichier.
Copié !
1ods pdf close;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.