JAGS에서 정규화 된 베이지안 로지스틱 회귀


14

베이지안 올가미를 설명하는 수학이 많은 논문이 있지만, 사용할 수있는 올바른 JAGS 코드를 테스트하고 싶습니다.

누군가 정규화 된 로지스틱 회귀를 구현하는 샘플 BUGS / JAGS 코드를 게시 할 수 있습니까? 모든 체계 (L1, L2, Elasticnet)는 훌륭하지만 Lasso가 선호됩니다. 흥미로운 대안적인 구현 전략이 있는지 궁금합니다.

답변:


19

L1 정규화는 관련 계수에 앞서 Laplace (이중 지수)와 동일하므로 다음과 같이 수행 할 수 있습니다. 여기에는 세 개의 독립 변수 x1, x2 및 x3이 있으며 y는 이진 대상 변수입니다. 정규화 파라미터 ( ) 의 선택은 여기에 하이퍼 프리 어 (hyperprior)를 놓음으로써 수행되는데,이 경우에는 적당한 크기 범위에서 균일하다.λ

model {
  # Likelihood
  for (i in 1:N) {
    y[i] ~ dbern(p[i])

    logit(p[i]) <- b0 + b[1]*x1[i] + b[2]*x2[i] + b[3]*x3[i]
  }

  # Prior on constant term
  b0 ~ dnorm(0,0.1)

  # L1 regularization == a Laplace (double exponential) prior 
  for (j in 1:3) {
    b[j] ~ ddexp(0, lambda)  
  }

  lambda ~ dunif(0.001,10)
  # Alternatively, specify lambda via lambda <- 1 or some such
}

dcloneR 의 패키지를 사용해보십시오 !

library(dclone)

x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)

prob <- exp(x1+x2+x3) / (1+exp(x1+x2+x3))
y <- rbinom(100, 1, prob)

data.list <- list(
  y = y,
  x1 = x1, x2 = x2, x3 = x3,
  N = length(y)
)

params = c("b0", "b", "lambda")

temp <- jags.fit(data.list, 
                 params=params, 
                 model="modela.jags",
                 n.chains=3, 
                 n.adapt=1000, 
                 n.update=1000, 
                 thin=10, 
                 n.iter=10000)

그리고 정규화되지 않은 로지스틱 회귀와 비교 한 결과는 다음과 같습니다.

> summary(temp)

<< blah, blah, blah >> 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

          Mean     SD Naive SE Time-series SE
b[1]   1.21064 0.3279 0.005987       0.005641
b[2]   0.64730 0.3192 0.005827       0.006014
b[3]   1.25340 0.3217 0.005873       0.006357
b0     0.03313 0.2497 0.004558       0.005580
lambda 1.34334 0.7851 0.014333       0.014999

2. Quantiles for each variable: << deleted to save space >>

> summary(glm(y~x1+x2+x3, family="binomial"))

  << blah, blah, blah >>

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.02784    0.25832   0.108   0.9142    
x1           1.34955    0.32845   4.109 3.98e-05 ***
x2           0.78031    0.32191   2.424   0.0154 *  
x3           1.39065    0.32863   4.232 2.32e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

<< more stuff deleted to save space >>

그리고 우리는 세 가지 b매개 변수가 실제로 0으로 축소되었음을 알 수 있습니다 .

Laplace 배포판의 하이퍼 파라미터 / 정규화 매개 변수에 대한 사전 지식에 대해서는 잘 모르겠습니다. 죄송합니다. 나는 균일 한 분포를 사용하는 경향이 있고, 후부를보고 그것이 엔드 포인트 근처에 쌓이지 않고 끔찍한 왜곡 문제가없는 중간에서 거의 정점에 도달 한 것처럼 합리적으로 잘 작동하는지 확인합니다. 지금까지는 일반적으로 그렇습니다. 분산 모수로 취급하고 Gelman의 권장 사항 사용 계층 구조 모델의 분산 모수에 대한 사전 분포도 나에게 효과적입니다.


1
당신은 최고예요! 누군가 다른 구현이있는 경우 잠시 동안 질문을 열어 두겠습니다. 하나는 이진 표시기 를 사용하여 변수 포함 / 제외를 강요 할 수있는 것 같습니다 . 이는 베이 시안 올가미 변수 선택에서 실제로는 발생하지 않는다는 사실을 보상합니다. 왜냐하면 사전에 이중 지수가 두 배인 베타에는 정확히 0 인 사후가 없기 때문입니다.
잭 태너

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