Стандартные ошибки для предсказания Лассо с использованием R


60

Я пытаюсь использовать модель LASSO для прогнозирования, и мне нужно оценить стандартные ошибки. Наверняка кто-то уже написал пакет для этого. Но, насколько я вижу, ни один из пакетов в CRAN, которые делают прогнозы с использованием LASSO, не будет возвращать стандартные ошибки для этих прогнозов.

Итак, мой вопрос: есть ли пакет или некоторый код R для вычисления стандартных ошибок для прогнозов LASSO?


3
Чтобы прояснить основную природу этого вопроса (так как он отскакивал назад и вперед b / t CV & SO), мне интересно, можем ли мы отредактировать название, Роб. Как насчет «Почему не существует пакета для стандартных ошибок LASSO, их сложно вычислить?» Или что-то в этом роде, возможно, в сочетании с некоторыми незначительными правками в теле, чтобы сделать его согласованным. Я думаю, что это сделало бы это более ясным по теме CV, чтобы эта двусмысленность не возникала и нам не приходилось возвращаться назад и вперед.
gung - Восстановить Монику

3
Я мог бы задать вопрос о статистической методологии, но на самом деле это не то, что я хотел знать. На CV должно быть место для вопросов о том, какое программное обеспечение реализует данный метод. Дальнейшее обсуждение на meta.stats.stackexchange.com/q/2007/159
Роб Хиндман,

1
Вы можете сделать это легко в байесовской среде, используя пакет monomvn, см. Мой ответ ниже.
Фабианс

Ответы:


46

Kyung et al. (2010), «Наказанная регрессия, стандартные ошибки и байесовские лассо», Байесовский анализ, 5 , 2 , указывают на то, что не может быть консенсуса в отношении статистически достоверного метода расчета стандартных ошибок для лассо-предсказаний. Тибширани, похоже, согласен (слайд 43), что стандартные ошибки все еще остаются нерешенной проблемой.


7
Это объясняет, почему пакеты не реализуют стандартные ошибки.
Роб Хиндман

20

На связанной ноте, которая может быть полезной, Tibshirani и коллеги предложили тест значимости для лассо. Документ доступен, и под названием «Тест значение для лассо». Свободную версию статьи можно найти здесь.


Ссылка без платного доступа к упомянутой вами бумаге: statweb.stanford.edu/~tibs/ftp/covtest.pdf
mvherweg

13

Ответ Sandipan Karmakar говорит вам, что делать, это должно помочь вам на «как»:

> library(monomvn)
>
> ## following the lars diabetes example
> data(diabetes)
> str(diabetes)
'data.frame':   442 obs. of  3 variables:
 $ x : AsIs [1:442, 1:10] 0.038075.... -0.00188.... 0.085298.... -0.08906.... 0.005383.... ...
      ..- attr(*, "dimnames")=List of 2
      .. ..$ : NULL
  .. ..$ : chr  "age" "sex" "bmi" "map" ...

 $ y : num  151 75 141 206 135 97 138 63 110 310 ...

[...]

> ## Bayesian Lasso regression
> reg_blas <- with(diabetes, blasso(x, y))
t=100, m=8
t=200, m=5
t=300, m=8
t=400, m=8
t=500, m=7
t=600, m=8
t=700, m=8
t=800, m=8
t=900, m=5
> 
> ## posterior mean beta (setting those with >50% mass at zero to exactly zero)
> (beta <- colMeans(reg_blas$beta) * (colMeans(reg_blas$beta != 0)  > 0.5))
      b.1       b.2       b.3       b.4       b.5       b.6       b.7       b.8 
   0.0000 -195.9795  532.7136  309.1673 -101.1288    0.0000 -196.4315    0.0000 
      b.9      b.10 
 505.4726    0.0000 
> 
> ## n x nsims matrix of realizations from the posterior predictive:
> post_pred_y <- with(reg_blas, X %*% t(beta))
> 
> ## predictions:
> y_pred <- rowMeans(post_pred_y)
> head(y_pred)
[1]  52.772443 -78.690610  24.234753   9.717777 -23.360369 -45.477199
> 
> ## sd of y:
> sd_y <- apply(post_pred_y, 1, sd)
> head(sd_y)
[1] 6.331673 6.756569 6.031290 5.236101 5.657265 6.150473
> 
> ## 90% credible intervals
> ci_y <- t(apply(post_pred_y, 1, quantile, probs=c(0.05, 0.95)))
> head(ci_y)
             5%       95%
[1,]  42.842535  62.56743
[2,] -88.877760 -68.47159
[3,]  14.933617  33.85679
[4,]   1.297094  18.01523
[5,] -32.709132 -14.13260
[6,] -55.533807 -35.77809

13

Байесовский LASSO является единственной альтернативой задаче расчета стандартных ошибок. Стандартные ошибки автоматически рассчитываются в байесовском LASSO ... Вы можете очень легко реализовать байесовский LASSO, используя схему выборки Гиббса ...

||yXβ||22+λ||β||1λ1β

Затем можно использовать выборку Гиббса для моделирования цепочки. См. Park & ​​Cassella (2008), «Байесовское лассо», JASA , 103 , 482 .

Есть три врожденных недостатка частых LASSO:

  1. λ

  2. β

  3. Иерархическая структура рассматриваемой проблемы не может быть закодирована с использованием частичной модели, что довольно просто в байесовской структуре.


11

Чтобы добавить к ответам выше, проблема, как представляется, заключается в том, что даже начальной загрузки, вероятно, недостаточно, поскольку оценка из оштрафованной модели смещена, а начальная загрузка будет говорить только с дисперсией - игнорируя смещение оценки. Это хорошо изложено в виньетке для оштрафованного пакета на стр. 18 .

Однако, если используется для прогнозирования, зачем нужна стандартная ошибка модели? Не можете ли вы провести перекрестную проверку или начальную загрузку надлежащим образом и создать стандартную ошибку вокруг показателя, связанного с предсказанием, такого как MSE?


3
Самозагрузка может как оценивать, так и корректировать смещение, хотя выборки должны быть достаточно большими.
Glen_b

3

В R имеется пакет selectedInference, https://cran.r-project.org/web/packages/selectiveInference/index.html , который предоставляет доверительные интервалы и значения p для ваших коэффициентов, установленных в LASSO, на основе следующего документа. :

Стивен Рид, Джером Фридман и Роб Тибширани (2014). Исследование оценки дисперсии ошибок в регрессии Лассо. Arxiv: 1311.5274

PS: просто поймите, что это приводит к оценкам ошибок для ваших параметров, а не к ошибке в вашем окончательном прогнозе, если это то, что вам нужно ... Я полагаю, вы могли бы использовать «интервалы прогнозирования населения» для этого, если хотите ( параметры передискретизации в соответствии с подгонкой после многомерного нормального распределения).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.