Новое в

BIC для выбора штрафа Лассо

Выбор штрафного параметра является основополагающим в анализе Лассо. Выберите маленький штрафной параметр, и вы рискуете включить в модель слишком много переменных. При выборе большого параметра вы можете исключить важные переменные.

Теперь мы можем использовать Байесовский информационный критерий (BIC) для выбора штрафных параметров в командах, связанных с лассо, как для прогнозирования, так и для вывода.

Для предсказания мы можем выбрать штрафные параметры путем минимизации BIC в lasso, elasticnet и sqrtlasso. Для вывода мы также можем выбрать штрафные параметры путем минимизации BIC вdsregress, dslogit, dspoisson, poregress, pologit, popoisson, poivregress, xporegress, xpologit, xpopoisson, xpoivregress и telasso.

После выбора штрафных параметров лассо с BIC мы можем построить график функции BIC, который показывает значения критерия BIC по сетке штрафных параметров. График также показывает минимальное значение BIC, которое является значением выбранного штрафного параметра.

Чтобы выбрать штрафные параметры на основе BIC, просто укажите опцию selection(bic).

Для линейной модели для y, с кандидатными ковариатами x1-x100, чтобы использовать BIC для выбора, мы вводим

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

Чтобы посмотреть на график подогнанной функции BIC, набираем

. bicplot

Использование двойного отбора для оценки и тестирования влияния d1 на y, с контрольными переменными x1x100, также просто; мы вводим

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

Опять же, после этого мы можем использовать bicplot.

Основные моменты

  • Выбор параметров штрафа BIC с помощью лассо для прогнозирования
    • Лассо
    • Лассо с квадратным корнем
    • Эластичная сетка
  • Выбор параметра штрафа BIC с помощью лассо для выводов
    • Оценщики с частичным выходом
    • Кроссфит-оценки частичной разгрузки
    • Оценки с двойным отбором
  • Параметр штрафа BIC при оценке эффекта лечения с помощью лассо
  • Постройте график функции BIC

Давайте посмотрим, как это работает

Использование BIC в лассо для прогнозирования

Наборы данных, используемые в lasso, обычно содержат много переменных. Для начала работы мы используем инструмент управления переменными vl, чтобы избавить себя от необходимости вводить множество имен переменных вручную.

. 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 создал набор глобальных макросов, каждый из которых содержит набор переменных, которые мы можем использовать во время оценки. vl облегчает жизнь, когда вы имеете дело с большими наборами ковариатов.

Далее мы используем splitsample, чтобы разделить данные на обучающие и тестовые. Обучающие данные будут использоваться для подгонки модели lasso, а тестовые данные будут использоваться для оценки эффективности предсказания подобранной модели.

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

Теперь мы готовы подогнать лассо-модель, используя BIC для выбора штрафного параметра. Для этого нам нужно указать опцию 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

Штрафной параметр, выбранный по минимальному критерию BIC, составил 0,42.

Мы можем посмотреть на график функции BIC, набрав bicplot.

. bicplot

Функция BIC быстро уменьшается до минимума при λ=0,42.

Использование BIC в dsregress для выводов

Предположим, мы хотим узнать влияние загрязнения воздуха (no2_class) на время реакции детей (react), контролируя ковариаты. Однако мы не уверены в том, какие контрольные переменные следует включить в модель. Мы можем использовать dsregress для последовательной оценки коэффициента на no2_class, одновременно используя lasso для выбора контрольных переменных.

Мы указываем опцию selection(bic), чтобы использовать bic для выбора штрафного параметра в каждом lasso, выполняемом dsregress. Мы включаем набор из 32 контролей, хранящихся в глобальных макросах cc и 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

Мы видим, что из 32 контролей выбрано 11. Наша точечная оценка влияния диоксида азота на время реакции составляет 2,3, то есть мы ожидаем, что время реакции увеличится на 2,3 миллисекунды на каждый микрограмм на кубический метр увеличения диоксида азота. Это значение статистически отличается от 0.

dsregress фактически запустил два лассо, одно для react и одно для no2_class. Мы можем построить график функции BIC для обоих лассо, набрав

. bicplot, for(react)

и

. bicplot, for(no2_class)