Les données d'entraînement et de test sont générées synthétiquement à l'aide d'une étape DATA, en utilisant la fonction 'RAND' pour créer des variables 'x' (uniforme) et 'y' (sinusoïdale avec bruit gaussien).
1 Bloc de code
Macros externes
Explication : Ce bloc définit des références 'FILENAME' vers des emplacements URL et utilise '%INCLUDE' pour télécharger et intégrer des définitions de macros SAS externes essentielles à l'implémentation du Super Learner et de ses estimateurs supplémentaires. Ces macros ne sont pas définies localement dans ce script.
FILENAME el URL "https://cirl-unc.github.io/SuperLearnerMacro/extralearners/sas_superlearner_extra_learners.sas";
5
%INCLUDE el;
2 Bloc de code
DATA STEP Data
Explication : Cette étape DATA génère deux jeux de données, 'train' (100 observations) et 'test' (10000 observations), utilisés pour l'entraînement et la prédiction. La variable 'x' est tirée d'une distribution uniforme, et la variable cible 'y' est créée à partir d'une fonction sinusoïdale de 'x' avec un bruit gaussien ajouté. 'my' et 'i' sont des variables temporaires utilisées pour la génération et sont supprimées des jeux de données finaux.
Copié !
DATA train(DROP=i my) test(DROP=i my);
CALL STREAMINIT(1229);
DO i = 1 to 10100;
x = rand('uniform')*8-4;
my = 2.83*SIN(CONSTANT('PI')/2*x);
y = my + RAND('gaussian');
IF i<=100 THEN OUTPUT train;
ELSE OUTPUT test;
END;
RUN;
1
DATA train(DROP=i my) test(DROP=i my);
2
CALL STREAMINIT(1229);
3
DO i = 1 to 10100;
4
x = rand('uniform')*8-4;
5
my = 2.83*SIN(CONSTANT('PI')/2*x);
6
y = my + RAND('gaussian');
7
IF i<=100THENOUTPUT train;
8
ELSEOUTPUT test;
9
END;
10
RUN;
3 Bloc de code
Macro externe : _SuperLearner
Explication : Cet appel à la macro externe '_SuperLearner' exécute l'algorithme Super Learner. Il prend en entrée les jeux de données 'train' et 'test', utilise 'y' comme variable cible et 'x' comme prédicteur continu. Plusieurs algorithmes d'apprentissage individuels (spécifiés dans 'library') sont utilisés et combinés par la méthode 'NNLS' (Non-Negative Least Squares) pour produire un modèle agrégé. Les prédictions et d'autres résultats sont stockés dans le jeu de données 'sl_outdata'.
Copié !
%_SuperLearner(y=y,
continuous_predictors=x,
indata=train,
preddata=test,
outdata=sl_outdata,
library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10,
folds=10,
method=NNLS,
dist=GAUSSIAN,
quietwarning=TRUE, /* suppress some warnings being printed to the log */
quietnotes=TRUE, /* suppress notes being printed to the log */
timer=FALSE,
printres=TRUE
);
quietwarning=TRUE, /* suppress some warnings being printed to the log */
11
quietnotes=TRUE, /* suppress notes being printed to the log */
12
timer=FALSE,
13
printres=TRUE
14
);
4 Bloc de code
Macro-définition : rsq
Explication : Cette macro 'rsq' est conçue pour calculer le coefficient de détermination R-carré pour chaque modèle spécifié dans le paramètre 'library', ainsi que pour le Super Learner combiné. Elle utilise une boucle '%DO' pour itérer sur les noms de modèles, construisant dynamiquement des expressions SQL pour calculer les résidus et les sommes des carrés. 'PROC SQL' est ensuite utilisée pour créer les tables intermédiaires 'dev' et la table finale 'rsq' contenant les R-carrés.
Copié !
%MACRO rsq(library = );
%LET j = 1;
%LET res = (y-p_sl_full)**2 AS res_sl,;
%LET rsq = 1-MEAN(res_sl)/MEAN(devsq) AS rsq_sl, ;
%DO %WHILE(%SCAN(&library, &j)^=);
%LET book = %SCAN(&library, &j);
%LET res = &res (y-p_&book._full)**2 AS res_&book,;
%LET rsq = &rsq 1-MEAN(res_&book.)/MEAN(devsq) AS rsq_&book,;
%LET j = %EVAL(&j+1);
%END;
%PUT &res;
%PUT &rsq;
PROC SQL;
CREATE TABLE dev AS SELECT &res (Y-MEAN(Y))**2 AS devsq FROM sl_outdata(WHERE=(__train=0));
SELECT &rsq MEAN(devsq) as den FROM DEV;
CREATE TABLE rsq AS SELECT &rsq MEAN(devsq) as den FROM DEV;
QUIT;
%MEND;
1
%MACRO rsq(library = );
2
%LET j = 1;
3
%LET res = (y-p_sl_full)**2 AS res_sl,;
4
%LET rsq = 1-MEAN(res_sl)/MEAN(devsq) AS rsq_sl, ;
5
%DO %WHILE(%SCAN(&library, &j)^=);
6
%LET book = %SCAN(&library, &j);
7
%LET res = &res (y-p_&book._full)**2 AS res_&book,;
8
%LET rsq = &rsq 1-MEAN(res_&book.)/MEAN(devsq) AS rsq_&book,;
9
%LET j = %EVAL(&j+1);
10
%END;
11
%PUT &res;
12
%PUT &rsq;
13
PROC SQL;
14
CREATE TABLE dev AS SELECT &res (Y-MEAN(Y))**2 AS devsq FROM sl_outdata(WHERE=(__train=0));
15
SELECT &rsq MEAN(devsq) as den FROM DEV;
16
CREATE TABLE rsq AS SELECT &rsq MEAN(devsq) as den FROM DEV;
17
QUIT;
18
%MEND;
5 Bloc de code
Macro : rsq et PROC PRINT Data
Explication : Le premier appel exécute la macro 'rsq' définie précédemment, en lui passant la liste des modèles pour lesquels le R-carré doit être calculé. Cette exécution génère la table 'rsq' contenant les coefficients de détermination. Le second bloc utilise 'PROC PRINT' pour afficher le contenu de la table 'rsq', présentant ainsi les performances de chaque modèle en termes de R-carré.
Copié !
%rsq(library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10);
PROC PRINT DATA = rsq;
TITLE 'r squared';
RUN;
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.
Informations de Copyright : Simplified version of simulation example 3 from: A. P. Keil. Super Learning in the SAS system. ArXiv e-prints, May 2018. https://arxiv.org/abs/1805.08058. Adapted from : E. C. Polley and M. J. van der Laan. Super learner in prediction. Report, Division of Biostatistics, University of California, Berkeley, 2010.
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.