Publié le :
Statistique CREATION_INTERNE

Exemple 8 pour PROC GLMSELECT

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script illustre l'utilisation de la procédure GLMSELECT pour la sélection de variables. Il commence par générer un jeu de données de régresseurs via la macro `%makeRegressorData`. Ensuite, la macro `%AddDepVar` ajoute une variable dépendante `y` en fonction d'un modèle linéaire et d'une erreur aléatoire. Finalement, deux appels à `PROC GLMSELECT` sont effectués : le premier avec la méthode de sélection LASSO, et le second avec la méthode Group LASSO.
Analyse des données

Type : CREATION_INTERNE


Les données sont entièrement générées à l'intérieur du script. La macro `%makeRegressorData` crée les variables indépendantes (continues et de classification) avec des valeurs aléatoires. La macro `%AddDepVar` ajoute ensuite la variable dépendante `y` en se basant sur une formule linéaire appliquée aux variables précédemment créées.

1 Bloc de code
Macro Data
Explication :
Définition de deux macros. `%makeRegressorData` génère les variables explicatives (continues et catégorielles) en utilisant des fonctions de nombres aléatoires. `%AddDepVar` ajoute une variable dépendante `y` à un jeu de données en se basant sur une formule et une erreur aléatoire.
Copié !
1%macro makeRegressorData(DATA=,nObs=500,nCont=5,nClass=5,nLev=3);
2 DATA &DATA;
3 drop i j;
4 %IF &nCont>0 %THEN %DO; array x{&nCont} x1-x&nCont; %END;
5 %IF &nClass>0 %THEN %DO; array c{&nClass} c1-c&nClass;%END;
6 DO i = 1 to &nObs;
7 %IF &nCont>0 %THEN %DO;
8 DO j= 1 to &nCont;
9 x{j} = rannor(1);
10 END;
11 %END;
12 %IF &nClass > 0 %THEN %DO;
13 DO j=1 to &nClass;
14 IF mod(j,3) = 0 THEN c{j} = ranbin(1,&nLev,.6);
15 ELSE IF mod(j,3) = 1 THEN c{j} = ranbin(1,&nLev,.5);
16 ELSE IF mod(j,3) = 2 THEN c{j} = ranbin(1,&nLev,.4);
17 END;
18 %END;
19 OUTPUT;
20 END;
21 RUN;
22%mend;
23 
24%macro AddDepVar(DATA=,modelRHS =,errorStd = 1);
25 DATA &DATA;
26 SET &DATA;
27 y = &modelRHS + &errorStd * rannor(1);
28 RUN;
29%mend;
2 Bloc de code
DATA STEP Data
Explication :
Exécution des macros pour créer la table de travail `traindata`. La première macro génère les régresseurs et la seconde calcule et ajoute la variable dépendante `y`.
Copié !
1%makeRegressorData(DATA=traindata,nObs=500,nCont=5,nClass=5,nLev=3);
2 
3%AddDepVar(DATA = traindata,
4 modelRHS= x1 +
5 0.1*x2 - 0.1*x3 - 0.01* x4 -
6 c1,
7 errorStd= 1);
3 Bloc de code
PROC GLMSELECT
Explication :
Active les graphiques ODS, puis exécute la procédure `glmselect` pour effectuer une sélection de modèle par la méthode LASSO. Les variables de classification `c1-c5` peuvent être divisées (`split`). Un effet spline est créé pour `x1`. Le critère SBC est utilisé pour choisir le meilleur modèle parmi les 20 étapes de la sélection.
Copié !
1ods graphics on;
2 
3PROC GLMSELECT DATA=traindata plots=coefficients;
4 class c1-c5/split;
5 effect s1=spline(x1/split);
6 model y = s1 x2-x5 c:/
7 selection=lasso(steps=20 choose=sbc);
8RUN;
4 Bloc de code
PROC GLMSELECT
Explication :
Exécute `proc glmselect` une seconde fois, en utilisant la méthode de sélection Group LASSO. Les variables `x2`, `x3`, et `x4` sont groupées dans un effet de collection `s2`, forçant leur sélection ou leur exclusion en tant que bloc. Le paramètre `rho` ajuste la pénalité.
Copié !
1PROC GLMSELECT DATA=traindata plots=coefficients;
2 class c1-c5;
3 effect s1=spline(x1);
4 effect s2=collection(x2 x3 x4);
5 model y = s1 s2 x5 c:/
6 selection=grouplasso(steps=20 choose=sbc rho=0.8);
7RUN;
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 : S A S S A M P L E L I B R A R Y