JAGS'ta düzenli bayes lojistik regresyonu


14

Bayesian Kement açıklayan birkaç matematik ağır kağıt vardır, ama ben test etmek istiyorum, ben kullanabileceğiniz doğru JAGS kodunu istiyorum.

Birisi düzenli lojistik regresyonu uygulayan örnek BUGS / JAGS kodu gönderebilir mi? Herhangi bir şema (L1, L2, Elastik ağ) harika olurdu, ancak Kement tercih edilir. Ayrıca ilginç alternatif uygulama stratejileri olup olmadığını merak ediyorum.

Yanıtlar:


19

L1 düzenlenmesi, ilgili katsayılardan önceki bir Laplace (çift üstel) ile eşdeğer olduğundan, aşağıdaki gibi yapabilirsiniz. Burada x1, x2 ve x3 olmak üzere üç bağımsız değişkenim var ve y ikili hedef değişkendir. Düzenleme parametresi seçimi burada üzerine bir hiper prior koyarak bu durumda yapılır, bu durumda sadece iyi bir aralıkta tekdüze.λ

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'deki paketi kullanarak deneyelim !

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)

Ve sonuçlar, düzenli olmayan bir lojistik regresyona kıyasla:

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

Ve üç bparametrenin gerçekten sıfıra indirildiğini görebiliriz.

Laplace dağılımı / regülasyon parametresinin hiperparametresi için öncelikler hakkında fazla bir şey bilmiyorum, üzgünüm. Tekdüze dağılımları kullanma eğilimindeyim ve makul bir şekilde iyi görünüp görünmediğini görmek için arkaya bakıyorum, örneğin, bir uç noktaya yakın yığılmamış ve orta derecede korkunç çarpıklık problemleri olmadan zirveye çıkıyorum. Şimdiye kadar, tipik olarak durum böyleydi. Bunu bir varyans parametresi olarak ele almak ve Gelman'ın önerilerini kullanmak Hiyerarşik modellerde varyans parametreleri için önceki dağılımlar da benim için çalışıyor.


1
En iyisi sensin! Birisinin başka bir uygulaması olması durumunda soruyu bir süre açık bırakacağım. Birincisi, ikili göstergelerin değişken dahil etme / hariç tutma uygulamak için kullanılabileceği görülmektedir. Bu, Bayesian Kement altında değişken seçiminin gerçekte gerçekleşmediğini telafi eder, çünkü önceden çift üstel olan betaların tam olarak sıfır olan posterleri olmayacaktır.
Jack Tanner

bi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.