Nou în 
BIC pentru penalizarea selecției lasou
Selectarea parametrului penalizării este fundamentală pentru analiza lasou. Alegeți un mic parametru de penalizare și riscați să includeți prea multe variabile în modelul dumneavoastră. Alegeți una mare și s-ar putea să excludeți variabile importante.
Acum, putem folosi criteriul Bayesian de informații (BIC) pentru a selecta parametrii penalizării în comenzile legate de lazo atât pentru predicție, cât și pentru inferență.
Pentru predicție, putem alege parametrii penalizării prin minimizarea BIC în lasso, elasticnet și sqrtlasso. Pentru inferență, putem alege, de asemenea, parametrii de penalizare prin minimizarea BICîn dsregress, dslogit, dspoisson, poregress, pologit, popoisson, poivregress, xporegress, xpologit, xpopoisson, xpoivregress și telasso.
După selectarea parametrului de penalizare Basso cu lasou, putem trasa funcția BIC, care arată valorile criteriului BIC peste grila parametrilor de penalizare. Trasajul arată, de asemenea, BIC minim, care este valoarea parametrului de penalizare selectat.
Pentru a alege parametrii de penalizare pe baza BIC, trebuie doar să specificați opțiunea selection(bic).
type Pentru un model liniar pentru y, cu covariabile candidate x1-x100, pentru a utiliza BIC pentru selecție, tastăm
. lasso linear y x1-x100, selection(bic)
Pentru a privi graficul funcției BIC montat, tastăm
. bicplot
Utilizarea selecției duble pentru a estima și testa efectul lui d1 asupra y, cu variabilele de control de la x1 la x100, este la fel de simplu; noi tastăm
. dsregress y d1, controls(x1-x100) selection(bic)
Din nou, putem folosi bicplot după.
Repere
- Selectarea parametrilor de penalizare BIC pentru predicție cu lasou
- Lasou
- Lasou cu rădăcină pătrată
- Plasă elastică
- Selectarea parametrilor de penalizare BIC pentru inferență cu lasou
- Estimatori parțiali
- Estimatori de partajare încrucișată
- Estimatori de dublă selecție
- Parametru de penalizare BIC cu estimarea efectului tratamentului cu lazo
- Se trasează funcția BIC
Să vedem cum funcționează
Utilizarea BIC în lasou pentru predicție
Seturile de date utilizate cu lasou au de obicei multe variabile. Pentru a începe, folosim instrumentul de gestionare a variabilelor vl pentru a ne salva de la tastarea manuală a multor nume de variabile.
. 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 creat un set de macro-uri globale, fiecare cu un set de variabile pe care le putem folosi în timpul estimării. vl face viața mai ușoară atunci când aveți de-a face cu seturi mari de covariabile.
Apoi, folosim splitsample pentru a împărți datele în date de antrenament și date de testare. Datele de antrenament vor fi utilizate pentru a se potrivi modelului lasso, iar datele de testare vor fi utilizate pentru a evalua performanța de predicție a modelului montat.
. set seed 12345671 . splitsample, generate(sample) nsplit(2) . label define svalues 1 "Training" 2 "Testing" . label values sample svalues
Acum, suntem pregătiți să potrivim un model lazo folosind BIC pentru a selecta parametrul penalizării. Pentru a face acest lucru, trebuie să specificăm opțiunea de 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 | |
Parametrul de penalizare selectat de criteriul minim BIC a fost 0,42.
Putem privi graficul funcției BIC montat tastând bicplot.
. bicplot

Funcția BIC scade rapid înainte de minim la λ = 0,42.
Utilizarea BIC în dsregress pentru inferență
Să presupunem că suntem interesați să cunoaștem efectul poluării aerului (no2_class) asupra timpului de reacție al copiilor (react), controlând covariabilele. Cu toate acestea, nu suntem siguri cu privire la variabilele de control pe care să le includem în model. Putem folosi dsregress pentru a estima în mod constant coeficientul pe no2_class în timp ce folosim lasso pentru a selecta variabilele de control.
Specificăm opțiunea de selection(bic) pentru a utiliza bic pentru a selecta parametrul de penalizare în fiecare lasou efectuat de dsregress. Includem un set de 32 de controale stocate în macrocomenzile globale cc și 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 | |
Vedem că 11 din 32 de controale sunt selectate. Estimarea noastră punctuală pentru efectul dioxidului de azot asupra timpului de reacție este de 2,3, ceea ce înseamnă că ne așteptăm ca timpul de reacție să crească cu 2,3 milisecunde pentru fiecare creștere a microgramei pe metru cub a dioxidului de azot. Această valoare este statistic diferită de 0.
dsregress a rulat de fapt două lasouri, unul pentru react și unul pentru no2_class. Putem trasa funcția BIC pentru ambele lassos tastând
. bicplot, for(react)
și
. bicplot, for(no2_class)