R을 사용한 올가미 예측의 표준 오차


60

예측을 위해 LASSO 모델을 사용하려고하는데 표준 오류를 추정해야합니다. 분명히 누군가가 이미 이것을하기 위해 패키지를 작성했습니다. 그러나 내가 알 수있는 한, LASSO를 사용하여 예측을 수행하는 CRAN의 패키지는 해당 예측에 대한 표준 오류를 반환하지 않습니다.

그래서 내 질문은 : 패키지 또는 일부 R 코드가 LASSO 예측에 대한 표준 오류를 계산할 수 있습니까?


3
이 질문의 근본적인 특성을 명확히하기 위해 (CV & SO / b / t b / t에서 수신 거부되었으므로) 제목 Rob을 편집 할 수 있을지 궁금합니다. 'LASSO 표준 오류에 대한 패키지가없는 이유, 계산하기 어려운 이유는 무엇입니까?'또는 이와 비슷한 것으로, 본문에 약간의 수정 사항을 결합하여 일관성을 유지하는 방법은 어떻습니까? 이 모호함이 발생하지 않도록 우리는 CV에 대해 더 명확하게 주제를 만들 것이라고 생각합니다. 우리는 앞뒤로 갈 필요가 없습니다.
gung-Monica Monica 복원

3
통계적 방법론에 대해 더 많은 질문을 할 수는 있지만 실제로 알고 싶지는 않았습니다. 어떤 소프트웨어가 주어진 방법을 구현하는지에 대한 질문이 CV에 있어야합니다. meta.stats.stackexchange.com/q/2007/159
Rob Hyndman

1
package를 사용하여 Bayesian 프레임 워크 에서이 작업을 쉽게 수행 할 수 있습니다 monomvn. 아래 답변을 참조하십시오.
fabians

답변:




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는 표준 오차 계산 문제에 대한 유일한 대안입니다. 표준 오류는 Bayesian LASSO에서 자동으로 계산됩니다 ... Gibbs 샘플링 구성표를 사용하여 Bayesian LASSO를 매우 쉽게 구현할 수 있습니다 ...

베이지안 LASSO는 모형의 모수에 사전 분포를 할당해야합니다. LASSO 모델에는 목적 함수 with 정규화 매개 변수로 여기서 우리는 대해 -norm을 때문에이를 위해 특별한 유형의 사전 분포가 필요합니다. 각 매개 변수의 전체 조건부 사후를 기반으로 추론됩니다.||yXβ||22+λ||β||1λ1β

그런 다음 체인 시뮬레이션을 위해 Gibbs Sampling을 사용할 수 있습니다. 참조 공원 및 Cassella (2008), "베이지안 올가미 ', JASA , 103 , 482 .

잦은 LASSO에는 다음과 같은 세 가지 단점이 있습니다.

  1. 교차 검증 또는 다른 수단으로 를 선택해야합니다 .λ

  2. LARS 및 기타 알고리즘이 대한 점 추정치를 생성하므로 표준 오류를 계산하기가 어렵습니다 .β

  3. 당면한 문제의 계층 구조는 잦은 모델을 사용하여 인코딩 할 수 없으므로 베이지안 프레임 워크에서는 매우 쉽습니다.


11

위의 답변에 추가하기 위해 문제는 불이익을받은 모델의 추정치가 바이어스되고 부트 스트랩이 분산에 대해서만 이야기하므로 추정치의 편향을 무시하고 부트 스트랩조차 불충분 할 수 있습니다. 이것은 벌칙 적용 패키지의 비 네트에 잘 요약되어 있습니다 ( 18 페이지) .

그러나 예측에 사용되는 경우 왜 모델의 표준 오차가 필요합니까? 적절하게 교차 검증 또는 부트 스트랩 할 수 없으며 MSE와 같은 예측 관련 메트릭에 대한 표준 오류를 생성 할 수 없습니까?


3
샘플은 상당히 커야하지만 부트 스트랩은 바이어스를 추정하고 교정 할 수 있습니다.
Glen_b

3

R ( https://cran.r-project.org/web/packages/selectiveInference/index.html) 에 selectiveInference 패키지가 있으며 ,이 백서는 다음 문서를 기반으로 LASSO에 적합한 계수에 대한 신뢰 구간 및 p 값을 제공합니다. :

Stephen Reid, Jerome Friedman 및 Rob Tibshirani (2014). 올가미 회귀 분석에서의 오차 분산 추정에 관한 연구. arXiv : 1311.5274

PS : 그냥 당신이 당신이 사용할 수있는 가정 후 ...있어 무엇 경우,이 최종 예측에 오류를 들어, 매개 변수에 대한 확인 오류 추정치를하지 생산 실현 "인구 예측 간격을" 당신이 좋아하는 경우에 의해 (그것을 위해 다변량 정규 분포에 따른 적합도에 따른 리샘플링 매개 변수).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.