Neu in 
BIC für die Auswahl der Lasso-Strafe
Die Auswahl des Strafparameters ist für die Lasso-Analyse von grundlegender Bedeutung. Wenn Sie einen kleinen Penalty-Parameter wählen, riskieren Sie, zu viele Variablen in Ihr Modell aufzunehmen. Wählen Sie einen großen, und Sie könnten wichtige Variablen ausschließen.
Jetzt können wir das Bayes’sche Informationskriterium (BIC) verwenden, um die Strafparameter in Lasso-bezogenen Befehlen sowohl für die Vorhersage als auch für die Inferenz auszuwählen.
Für die Vorhersage können wir die Strafparameter durch Minimierung des BIC in lasso, elasticnet und sqrtlasso wählen. Für die Inferenz können wir auch Strafparameter durch Minimierung des BIC in dsregress, dslogit, dspoisson, poregress, pologit, popoisson, poivregress, xporegress, xpologit, xpopoisson, xpoivregress und telasso auswählen.
Nach der Auswahl des Lassos mit BIC-Strafparametern kann die BIC-Funktion geplottet werden, die die Werte des BIC-Kriteriums über das Raster der Strafparameter anzeigt. Das Diagramm zeigt auch den minimalen BIC, der der Wert des ausgewählten Strafparameters ist.
Um die Strafparameter auf der Basis von BIC auszuwählen, geben Sie einfach die Option selection(bic) an.
Für ein lineares Modell für y mit den Kandidatenkovariaten x1-x100, um BIC für die Auswahl zu verwenden, geben wir ein
. lasso linear y x1-x100, selection(bic)
Um das Diagramm der angepassten BIC-Funktion zu betrachten, geben Sie ein
. bicplot
Die Verwendung der Doppelselektion zum Schätzen und Testen des Effekts von d1 auf y, mit den Kontrollvariablen x1 bis x100, ist ebenso einfach; wir geben ein
. dsregress y d1, controls(x1-x100) selection(bic)
Auch hier können wir danach Bicplot verwenden.
Highlights
- BIC-Strafparameterauswahl mit Lasso für die Vorhersage
- Lasso
- Quadratwurzel-Lasso
- Elastisches Netz
- BIC-Penalty-Parameterauswahl mit Lasso für die Inferenz
- Partialing-Out-Schätzer
- Cross-Fit-Partialing-Out-Schätzer
- Double-Selection-Schätzer
- BIC-Strafparameter mit Behandlungseffekt-Schätzung mit Lasso
- Plotten der BIC-Funktion
Zeigen Sie, wie es funktioniert
Verwendung von BIC im Lasso für die Vorhersage
Datensätze, die mit Lasso verwendet werden, haben typischerweise viele Variablen. Für den Anfang verwenden wir das Variablenverwaltungs-Tool vl, um uns das manuelle Eintippen vieler Variablennamen zu ersparen.
. 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 eine Reihe von globalen Makros erstellt, jedes mit einem Satz von Variablen, die wir während der Schätzung verwenden können. vl macht das Leben einfacher, wenn Sie mit großen Sätzen von Kovariaten zu tun haben.
Als nächstes verwenden wir splitsample, um die Daten in Trainingsdaten und Testdaten aufzuteilen. Die Trainingsdaten werden verwendet, um das Lasso-Modell anzupassen, und die Testdaten werden verwendet, um die Vorhersageleistung des angepassten Modells zu bewerten.
. set seed 12345671 . splitsample, generate(sample) nsplit(2) . label define svalues 1 "Training" 2 "Testing" . label values sample svalues
Jetzt sind wir bereit, ein Lassomodell anzupassen, indem wir BIC verwenden, um den Strafparameter auszuwählen. Dazu müssen wir die Option selection(bic) angeben.
. 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 | |
Der durch das minimale BIC-Kriterium ausgewählte Strafparameter war 0,42.
Wir können uns den Plot der angepassten BIC-Funktion ansehen, indem wir bicplot eingeben.
. bicplot

Die BIC-Funktion nimmt vor dem Minimum bei λ=0,42 schnell ab.
Verwendung von BIC in dsregress zur Inferenz
Angenommen, wir sind daran interessiert, den Effekt der Luftverschmutzung (no2_class) auf die Reaktionszeit der Kinder (react) zu kennen, wobei für Kovariaten kontrolliert wird. Wir sind uns jedoch nicht sicher, welche Kontrollvariablen wir in das Modell aufnehmen sollen. Wir können dsregress verwenden, um den Koeffizienten für no2_class konsistent zu schätzen, während wir Lasso verwenden, um Kontrollvariablen auszuwählen.
Wir geben die Option selection(bic) an, um bic zur Auswahl des Strafparameters in jedem von dsregress durchgeführten Lasso zu verwenden. Wir schließen einen Satz von 32 Kontrollen ein, die in den globalen Makros cc und fc gespeichert sind.
. 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 | |
Wir sehen, dass 11 von 32 Kontrollen ausgewählt sind. Unsere Punktschätzung für den Effekt von Stickstoffdioxid auf die Reaktionszeit ist 2,3, was bedeutet, dass wir erwarten, dass sich die Reaktionszeit um 2,3 Millisekunden für jedes Mikrogramm pro Kubikmeter Anstieg des Stickstoffdioxids erhöht. Dieser Wert ist statistisch unterschiedlich von 0.
dsregress hat tatsächlich zwei Lassos ausgeführt, eines für react und eines für no2_class. Wir können die BIC-Funktion für beide Lassos darstellen, indem wir eingeben
. bicplot, for(react)
und
. bicplot, for(no2_class)