L'un des piliers de la modélisation statistique est la capacité à justifier la complexité d'un modèle : une variable supplémentaire apporte-t-elle une amélioration significative ou n'est-elle que du bruit ? Ce script illustre parfaitement comment transformer cette question théorique en un processus industriel robuste grâce au langage macro de SAS.
Pourquoi cette approche est-elle celle d'un expert ?
L'élégance de cette solution repose sur l'extraction et le retraitement intelligent des statistiques de la PROC GLM :
Exploitation de la table OUTSTAT : Au lieu de lire manuellement des rapports, le script utilise les statistiques de sortie pour isoler les sommes des carrés (SS) et les degrés de liberté (df). C'est la base de tout système de reporting automatisé fiable.
Calcul dynamique du Test F : La macro %hw6problem2 ne se contente pas d'ajuster des modèles ; elle recrée mathématiquement le test de Fisher pour modèles imbriqués (Nested Models). L'usage de la fonction lag() pour comparer le modèle complet au modèle réduit au sein d'une étape DATA est une technique avancée qui garantit une comparaison rigoureuse.
Modularité et Portabilité : En encapsulant la logique dans des macros imbriquées, le code devient agnostique vis-à-vis des données. Vous pouvez tester des dizaines de combinaisons de variables simplement en changeant les paramètres d'appel, tout en générant un rapport PDF structuré.
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é !
ods pdf file="HW6NickLipanovich.pdf";
1
ods 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'.
Explication : Affiche le contenu de la table 'comp2010' dans la sortie de résultats.
Copié !
proc print data=comp2010;
run;
quit;
1
PROC PRINTDATA=comp2010;
2
RUN;
3
QUIT;
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').
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é !
%macro hw6problem2 (outcome,classx1,classx2,modelx1,modelx2,myoutstat1,myoutstat2,indata);
%hw6problem1 (&outcome,&classx1,&modelx1,&myoutstat1,&indata);
%hw6problem1 (&outcome,&classx2,&modelx2,&myoutstat2,&indata);
data fullvsreduced;
set &myoutstat1 &myoutstat2;
if _type_="ERROR";
run;
proc sort data=fullvsreduced;
by df;
run;
data fullvsreduced2;
set fullvsreduced;
fullss=lag(ss);
fulldf=lag(df);
num = (ss-fullss)/(df-fulldf);
den = fullss/fulldf;
f = num/den;
pvalue=1-cdf('f', f, df-fulldf, fulldf);
keep f pvalue;
if _n_=1 then delete;
run;
proc print data=fullvsreduced2;
run;
%mend;
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'.
Explication : Ferme la destination ODS PDF, finalisant ainsi la création du fichier.
Copié !
ods pdf close;
1
ods pdf close;
L'Astuce Pro
L'utilisation de cdf('f', ...) pour générer la p-value est cruciale. Elle permet de transformer une statistique brute en une probabilité actionnable. Si votre p-value est inférieure à votre seuil (généralement 0.05), vous avez la preuve statistique que votre modèle complexe est supérieur au modèle réduit. Attention toutefois : cette méthode suppose que vos modèles sont bien "imbriqués", c'est-à-dire que les prédicteurs du modèle réduit sont un sous-ensemble de ceux du modèle complet.
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.