Hồi quy logistic Bayes thường xuyên trong JAGS


13

Có một số bài viết nặng về toán học mô tả Bayesian Lasso, nhưng tôi muốn kiểm tra, mã JAGS chính xác mà tôi có thể sử dụng.

Ai đó có thể gửi mã BUGS / JAGS mẫu thực hiện hồi quy logistic thường xuyên không? Bất kỳ sơ đồ nào (L1, L2, Elasticnet) sẽ rất tuyệt, nhưng Lasso được ưa thích hơn. Tôi cũng tự hỏi nếu có chiến lược thực hiện thay thế thú vị.

Câu trả lời:


19

Vì chính quy hóa L1 tương đương với Laplace (hàm mũ đôi) trước các hệ số có liên quan, bạn có thể thực hiện như sau. Ở đây tôi có ba biến độc lập x1, x2 và x3 và y là biến mục tiêu nhị phân. Lựa chọn các tham số quy tắc được thực hiện ở đây bằng cách đặt một hyperprior vào nó, trong trường hợp này chỉ thống nhất trên một phạm vi tốt cỡ.λ

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
}

Hãy dùng thử dclonegói R!

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)

Và đây là kết quả, so với hồi quy logistic không thường xuyên:

> 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 >>

Và chúng ta có thể thấy rằng ba btham số đã thực sự bị thu hẹp về không.

Tôi không biết nhiều về các linh mục cho siêu tham số của phân phối Laplace / tham số chính quy, tôi rất tiếc phải nói. Tôi có xu hướng sử dụng các bản phân phối đồng đều và nhìn vào phía sau để xem nó có vẻ hợp lý hay không, ví dụ, không chồng chất gần một điểm cuối và khá nhiều đỉnh điểm trong các vấn đề sai lệch khủng khiếp ở giữa. Cho đến nay, đó thường là trường hợp. Đối xử với nó như là một tham số phương sai và sử dụng (các) đề xuất của Gelman Các bản phân phối trước cho các tham số phương sai trong các mô hình phân cấp cũng hoạt động với tôi.


1
Bạn là nhất! Tôi sẽ để câu hỏi mở một chút trong trường hợp ai đó có một triển khai khác. Đối với một, có vẻ như các chỉ số nhị phân có thể được sử dụng để áp đặt bao gồm / loại trừ biến. Điều này bù đắp cho thực tế rằng theo lựa chọn biến Bayesian Lasso không thực sự xảy ra, vì các betas với số mũ gấp đôi trước sẽ không có hậu thế chính xác bằng không.
Jack Tanner

bTôi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.