Publié le :
Statistique CREATION_INTERNE

Analyse Super Learner

En attente de validation
Le script commence par inclure des macros SAS© externes pour l'implémentation du Super Learner et des estimateurs additionnels. Il génère ensuite un jeu de données de simulation (train et test) avec une relation non linéaire entre la variable 'x' et la variable cible 'y', plus un bruit gaussien. La macro '_SuperLearner' est appelée pour appliquer divers algorithmes d'apprentissage (régression linéaire, forêts aléatoires, GAM, boosting, réseaux neuronaux, MARS, LOESS) et combiner leurs prédictions. Une macro personnalisée, 'rsq', est définie pour calculer le R-carré de chaque modèle et du Super Learner sur les données de test. Enfin, les résultats du R-carré sont affichés.
Analyse des données

Type : CREATION_INTERNE


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.
Copié !
1FILENAME slgh URL "https://cirl-unc.github.io/SuperLearnerMacro/super_learner_macro.sas";
2%INCLUDE slgh;
3 
4FILENAME 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é !
1DATA 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<=100 THEN OUTPUT train;
8 ELSE OUTPUT 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é !
1%_SuperLearner(y=y,
2 continuous_predictors=x,
3 indata=train,
4 preddata=test,
5 outdata=sl_outdata,
6 library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10,
7 folds=10,
8 method=NNLS,
9 dist=GAUSSIAN,
10 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é !
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é !
1%rsq(library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10);
2 
3PROC PRINT DATA = rsq;
4 TITLE 'r squared';
5RUN;
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.