Nouveau dans

BIC pour la sélection de la pénalité lasso

La sélection du paramètre de pénalité est fondamentale pour l’analyse lasso. Choisissez un petit paramètre de pénalité, et vous risquez d’inclure trop de variables dans votre modèle. Choisissez-en un grand, et vous risquez d’exclure des variables importantes.
Maintenant, nous pouvons utiliser le critère d’information bayésien (BIC) pour sélectionner les paramètres de pénalité dans les commandes liées à lasso pour la prédiction et l’inférence.
Pour la prédiction, nous pouvons choisir les paramètres de pénalité en minimisant le BIC dans lasso, elasticnet et sqrtlasso. Pour l’inférence, nous pouvons également choisir les paramètres de pénalité en minimisant le BIC dans dsregress, dslogit, dspoisson, poregress, pologit, popoisson, poivregress, xporegress, xpologit, xpopoisson, xpoivregress et telasso.
Après la sélection du lasso avec le paramètre de pénalité BIC, nous pouvons tracer la fonction BIC, qui montre les valeurs du critère BIC sur la grille des paramètres de pénalité. Le graphique montre également le BIC minimum, qui correspond à la valeur du paramètre de pénalité sélectionné.
Pour choisir les paramètres de pénalité en fonction du BIC, il suffit de spécifier l’option selection(bic).
Pour un modèle linéaire pour y, avec des covariables candidates x1-x100, pour utiliser le BIC pour la sélection, nous tapons

. lasso linear y x1-x100, selection(bic)

To look at the fitted BIC function plot, we type

. bicplot

Utiliser la double sélection pour estimer et tester l’effet de d1 sur y, avec les variables de contrôle x1 à x100, est tout aussi simple ; nous tapons

. dsregress y d1, controls(x1-x100) selection(bic)

Encore une fois, nous pouvons utiliser bicplot après.

Points forts

  • Sélection des paramètres de pénalité BIC avec lasso pour la prédiction
    • Lasso
    • Lasso à racine carrée
    • Réseau élastique
  • Sélection des paramètres de pénalité BIC avec lasso pour l’inférence
    • Estimateurs à sortie partielle
    • Estimateurs partiels à ajustement croisé
    • Estimateurs à double sélection
  • Paramètre de pénalité BIC avec estimation de l’effet de traitement avec lasso
  • Tracez la fonction BIC

Voyons comment cela fonctionne

Utilisation du BIC dans le lasso pour la prédiction

Les jeux de données utilisés avec lasso comportent généralement de nombreuses variables. Pour commencer, nous utilisons l’outil de gestion des variables vl pour nous éviter de taper manuellement de nombreux noms de variables.

. use https://www.stata-press.com/data/r17/fakesurvey_vl
(Fictitious survey data with vl)

. vl rebuild
Rebuilding vl macros ...

Macro's contents
Macro # Vars Description
System
$vldummy 98 0/1 variables
$vlcategorical 16 categorical variables
$vlcontinuous 29 continuous variables
$vluncertain 16 perhaps continuous, perhaps categorical variables
$vlother 12 all missing or constant variables
User
$demographics 4 variables
$factors 110 variables
$idemographics factor-variable list
$ifactors factor-variable list

vl a créé un ensemble de macros globales, chacune avec un ensemble de variables que nous pouvons utiliser pendant l’estimation. vl facilite la vie lorsque vous avez affaire à de grands ensembles de covariables.
Ensuite, nous utilisons splitsample pour diviser les données en données d’entraînement et en données de test. Les données d’entraînement seront utilisées pour ajuster le modèle lasso, et les données de test seront utilisées pour évaluer les performances de prédiction du modèle ajusté.

. set seed 12345671
. splitsample, generate(sample) nsplit(2)
. label define svalues 1 "Training" 2 "Testing"
. label values sample svalues

Maintenant, nous sommes prêts à ajuster un modèle lasso en utilisant le BIC pour sélectionner le paramètre de pénalité. Pour ce faire, nous devons spécifier l’option selection(bic).

. lasso linear q104 ($idemographics) $ifactors $vlcontinuous
> if sample == 1, selection(bic)
Evaluating up to 100 lambdas in grid ...
Grid value 1:     lambda = 1.059075   no. of nonzero coef. =       4
                  BIC =  2653.83
Grid value 2:     lambda =   .96499   no. of nonzero coef. =       5
                  BIC = 2654.907
        ...(output omitted)...
Grid value 17:    lambda = .2390354   no. of nonzero coef. =      44
                  BIC = 2663.639
... selection BIC complete ... minimum found

Lasso linear model                          No. of obs        =        458
                                            No. of covariates =        273
Selection: Bayesian information criterion

No. of
nonzero Out-of-sample
ID Description lambda coef. R-squared BIC
1 first lambda 1.059075 4 0.0339 2653.83
10 lambda before .4584484 17 0.2552 2614.289
* 11 selected lambda .4177211 18 0.2806 2604.524
12 lambda after .3806119 21 0.3066 2606.103
17 last lambda .2390354 44 0.4220 2663.639
* lambda selected by Bayesian information criterion

Le paramètre de pénalité sélectionné par le critère BIC minimum était de 0,42.
Nous pouvons regarder le graphique de la fonction BIC ajustée en tapant bicplot.

. bicplot

La fonction BIC diminue rapidement avant le minimum à λ=0.42.

Utilisation du BIC dans dsregress pour l’inférence

Supposons que nous souhaitions connaître l’effet de la pollution atmosphérique (no2_class) sur le temps de réaction des enfants (react), en contrôlant les covariables. Cependant, nous ne sommes pas certains des variables de contrôle à inclure dans le modèle. Nous pouvons utiliser dsregress pour estimer de manière cohérente le coefficient sur no2_class tout en utilisant lasso pour sélectionner les variables de contrôle.
Nous spécifions l’option selection(bic) pour utiliser bic afin de sélectionner le paramètre de pénalité dans chaque lasso effectué par dsregress. Nous incluons un ensemble de 32 contrôles stockés dans les macros globales cc et fc.

. dsregress react no2_class, controls($cc i.($fc)) selection(bic)

Estimating lasso for react using BIC
Estimating lasso for no2_class using BIC

Double-selection linear model         Number of obs               =      1,036
                                      Number of controls          =         32
                                      Number of selected controls =         11
                                      Wald chi2(1)                =      22.18
                                      Prob > chi2                 =     0.0000

Robust
react Coefficient std. err. z P>|z| [95% conf. interval]
no2_class 2.315295 .4916547 4.71 0.000 1.35167 3.278921

Nous voyons que 11 des 32 contrôles sont sélectionnés. Notre estimation ponctuelle de l’effet du dioxyde d’azote sur le temps de réaction est de 2,3, ce qui signifie que nous nous attendons à ce que le temps de réaction augmente de 2,3 millisecondes pour chaque microgramme par mètre cube d’augmentation du dioxyde d’azote. Cette valeur est statistiquement différente de 0.
dsregress a en fait exécuté deux lassos, un pour react et un pour no2_class. Nous pouvons tracer la fonction BIC pour les deux lassos en tapant

. bicplot, for(react)

and

. bicplot, for(no2_class)