JAGS में नियमित बायिसियन लॉजिस्टिक रिग्रेशन


14

कई गणित-भारी पेपर हैं जो बेयसियन लास्सो का वर्णन करते हैं, लेकिन मैं परीक्षण चाहता हूं, जेएजीएस कोड को सही करें जिसका मैं उपयोग कर सकता हूं।

कोई व्यक्ति BUGS / JAGS कोड का नमूना ले सकता है जो लॉजिस्टिक प्रतिगमन को नियमित करता है? कोई भी योजना (L1, L2, Elasticnet) बहुत अच्छी होगी, लेकिन Lasso को प्राथमिकता दी जाती है। मुझे आश्चर्य है कि क्या दिलचस्प वैकल्पिक कार्यान्वयन रणनीतियाँ हैं।

जवाबों:


19

चूंकि L1 नियमितीकरण संबंधित गुणांक से पहले एक लाप्लास (डबल घातीय) के बराबर है, आप इसे निम्नानुसार कर सकते हैं। यहां मेरे पास तीन स्वतंत्र चर एक्स 1, एक्स 2, और एक्स 3 हैं, और वाई द्विआधारी लक्ष्य चर है। नियमितीकरण पैरामीटर का चयन यहाँ पर एक हाइपरपीयर लगाकर किया जाता है, इस मामले में एक अच्छे आकार की सीमा पर समान है।λ

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
}

dcloneआर में पैकेज का उपयोग करके इसे आज़माएं !

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पैरामीटर वास्तव में शून्य की ओर सिकुड़ गए हैं।

मुझे लैप्लस वितरण / नियमितीकरण पैरामीटर के हाइपरपरमीटर के बारे में ज्यादा जानकारी नहीं है, मुझे यह कहते हुए खेद है। मैं समान वितरण का उपयोग करता हूं और पीछे देखने के लिए देखता हूं कि क्या यह उचित रूप से अच्छी तरह से व्यवहार किया गया है, उदाहरण के लिए, एक समापन बिंदु के पास ढेर नहीं है और बीच की w / o भयानक तिरछी समस्याओं में बहुत ज्यादा चरम पर है। अब तक, यह आमतौर पर मामला रहा है। इसे विचरण पैरामीटर के रूप में मानना ​​और जेलमैन द्वारा सिफारिश (रों) का उपयोग करना , पदानुक्रमित मॉडल में विचरण मापदंडों के लिए वितरण मेरे लिए भी काम करता है।


1
आप सर्वश्रेष्ठ हैं! मैं सवाल को थोड़ी देर के लिए खुला छोड़ देता हूँ जब किसी के पास दूसरा कार्यान्वयन होता है। एक के लिए, ऐसा लगता है कि द्विआधारी संकेतक का उपयोग चर समावेश / बहिष्करण को लागू करने के लिए किया जा सकता है। यह इस तथ्य के लिए क्षतिपूर्ति करता है कि बायेसियन लासो चर चयन के तहत वास्तव में ऐसा नहीं होता है, क्योंकि डबल घातीय पूर्व के साथ बेटास में पोस्टएयर नहीं होंगे जो बिल्कुल शून्य हैं।
जैक टान्नर

ठीक है, मैं भी यही करता हूं। यह 0 पर एक बिंदु द्रव्यमान के साथ एक पूर्व बनाने के समान है, फिर इसे से नमूना करने के लिए जीरो ट्रिक का उपयोग करना ( पर पहले तो 0 पर एक बिंदु द्रव्यमान का मिश्रण और एक दुगुना घातीय) हो जाता है, हालांकि कोड अलग है। मुझे यह देखने में दिलचस्पी होगी कि अन्य लोग क्या करते हैं, +1 प्रश्न पर। bi
जूलमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.