BUGS, JAGS में भारित सामान्यीकृत प्रतिगमन


10

में Rहम कर सकते हैं "पहले वजन" एक glmके माध्यम से प्रतिगमन वजन पैरामीटर। उदाहरण के लिए:

glm.D93 <- glm(counts ~ outcome + treatment, family = poisson(), weights=w)

यह एक JAGSया BUGSमॉडल में कैसे पूरा किया जा सकता है ?

मुझे इस पर चर्चा करते हुए कुछ कागज मिले, लेकिन उनमें से कोई भी एक उदाहरण नहीं देता है। मुझे मुख्य रूप से पॉइसन और लॉजिस्टिक रिग्रेशन उदाहरणों में दिलचस्पी है।


+1 बहुत अच्छा सवाल! मैं कुछ बायेसियन विशेषज्ञों से यह पूछ रहा था और वे केवल यह कहते हैं कि कुछ मामलों में (श्रेणीबद्ध कोवरिएट के अनुसार वजन), आप प्रत्येक श्रेणी के लिए पैरामीटर (ओं) के बाद के वितरण की गणना कर सकते हैं और फिर उन्हें एक भारित अर्थ में जोड़ सकते हैं। उन्होंने मुझे हालांकि एक सामान्य समाधान नहीं दिया, इसलिए मुझे वास्तव में दिलचस्पी होगी कि यह मौजूद है या नहीं!
जिज्ञासु

जवाबों:


7

देर हो सकती है ... लेकिन,

कृपया 2 बातें नोट करें:

  • डेटा बिंदुओं को जोड़ने की सलाह नहीं दी जाती क्योंकि इससे स्वतंत्रता की डिग्री बदल जाएगी। निश्चित प्रभाव के औसत अनुमानों को अच्छी तरह से अनुमान लगाया जा सकता है, लेकिन ऐसे मॉडल के साथ सभी अनुमानों से बचा जाना चाहिए। यदि आप इसे बदलते हैं, तो "डेटा को बोलने देना" मुश्किल है।
  • बेशक यह केवल पूर्णांक-मूल्यवान भार के साथ काम करता है (आप 0.5 डेटा बिंदु की नकल नहीं कर सकते हैं), जो कि सबसे अधिक भारित (एलएम) प्रतिगमन में नहीं किया गया है। सामान्य तौर पर, एक वेटिंग किसी दिए गए 'x' पर प्रतिकृति (जैसे 1 / s या 1 / s ^ 2 से स्थानीय परिवर्तनशीलता के आधार पर बनाई जाती है) या प्रतिक्रिया ऊंचाई के आधार पर (जैसे 1 / Y या 1 / Y ^ 2, पर) एक दिया 'x')।

जैग्स, बग्स, स्टेन, में MCMC या बायेसियन को सामान्य रूप से प्राप्त करते हैं, संभावना बार-बार होने वाली lm या glm (या किसी भी मॉडल) की तुलना में अलग नहीं है, यह सिर्फ एक ही है !! अपनी प्रतिक्रिया के लिए बस एक नया कॉलम "वेट" बनाएं, और इस प्रकार लिखें

y [i] ~ dnorm (म्यू [i], ताऊ / वजन [i])

या एक भारित कविता:

y [i] ~ dpois (लैम्ब्डा [i] * वजन [i])

यह बग्स / जग कोड केवल चाल के लिए होगा। आपको सब कुछ सही मिलेगा। उदाहरण के लिए, भविष्यवाणी और विश्वास / भविष्यवाणी अंतराल बनाते समय वजन द्वारा ताऊ के पीछे के भाग को जारी रखना न भूलें।


यदि हम इसे बताए अनुसार करते हैं, तो हम माध्य और विचरण को बदलते हैं। यह y [i] * वजन [i] ~ डोपिस (लैम्ब्डा [i] * वजन [i]) क्यों नहीं है? यह केवल विचरण को समायोजित करेगा। यहाँ समस्या यह है कि y [i] * वजन [i] प्रकार वास्तविक हो सकता है।
user28937

वास्तव में, भारित प्रतिगमन का अर्थ बदल जाता है (क्योंकि वजन प्रतिगमन को उन बिंदुओं के करीब जाने के लिए प्रेरित करता है, जिनमें बहुत अधिक वजन है!) और विचरण अब वज़न का एक फ़ंक्शन है (इसलिए यह एक होमोसैकेस्टिक मॉडल नहीं है)। विचरण (या सटीक) ताऊ का अब कोई अर्थ नहीं है, लेकिन ताऊ / वजन [i] को मॉडल की सटीकता (किसी दिए गए "x" के लिए) के रूप में व्याख्या की जा सकती है। मैं वजन से डेटा (y) के गुणा की सलाह नहीं दूंगा ... उम्मीद है कि अगर यह ठीक है कि आप कुछ करना चाहते हैं, लेकिन मैं आपको इस मामले में मॉडल नहीं समझता ...
पियरे लेब्रून

मैं आपसे सहमत हूं कि यह सामान्य उदाहरण में परिवर्तन नहीं करता है: y [i] ~ dnorm (म्यू [i], ताऊ / वजन [i]), लेकिन यह दूसरे में करता है, चूंकि लंबा [i] * वजन [ i] dpois के लिए "नया" लैम्ब्डा बन गया है और यह अब y [i] से मेल नहीं खाने वाला है। मुझे खुद को सही करना होगा: यह होना चाहिए: ty [i] * exp (वजन [i]) ~ dpois (लैम्ब्डा [i] * वजन [i])। पोइसन मामले में गुणन के साथ विचार यह है कि हम विचरण को समायोजित करना चाहते हैं, लेकिन इसका अर्थ समायोजित भी करना चाहते हैं, इसलिए क्या हमें माध्य को सही करने की आवश्यकता नहीं है?
user28937

यदि आपको स्वतंत्र रूप से विचरण को समायोजित करने की आवश्यकता है, तो शायद एक पॉजिशन के बजाय एक नकारात्मक द्विपद मॉडल काम में आ सकता है? यह पॉइसन के लिए एक विचरण मुद्रास्फीति / अपस्फीति पैरामीटर जोड़ता है। सिवाय इसके कि यह बहुत समान है।
पियरे लेब्रून

पियरे अच्छा विचार। मैं प्वाइजन वितरण के निरंतर प्रतिनिधित्व पर स्लाइड 6/12 में परिभाषित के बारे में भी सोचा linkd
user28937

4

सबसे पहले, यह इंगित करने के लायक है कि glmबायेसियन प्रतिगमन नहीं करता है। 'वेट' पैरामीटर मूल रूप से "टिप्पणियों के अनुपात" के लिए एक छोटा हाथ है, जिसे आपके डेटासेट को उचित रूप से नमूना करके बदला जा सकता है। उदाहरण के लिए:

x=1:10
y=jitter(10*x)
w=sample(x,10)

augmented.x=NULL
augmented.y=NULL    
for(i in 1:length(x)){
    augmented.x=c(augmented.x, rep(x[i],w[i]))
    augmented.y=c(augmented.y, rep(y[i],w[i]))
}

# These are both basically the same thing
m.1=lm(y~x, weights=w)
m.2=lm(augmented.y~augmented.x)

तो JAGS या BUGS में अंकों के लिए वजन जोड़ने के लिए, आप ऊपर दिए गए तरीके से अपने डेटासेट को बढ़ा सकते हैं।


2
यह काम नहीं करेगा, वज़न सामान्य रूप से वास्तविक संख्याएँ हैं, पूर्णांक नहीं
जिज्ञासु

यह आपको पूर्णांक के साथ अनुमान लगाने से नहीं रोकता है। मेरा समाधान सही नहीं है, लेकिन यह लगभग काम करता है। उदाहरण के लिए, दिए गए वज़न (1/3, 2/3, 1), आप दूसरे वर्ग को दो के कारक से और तीसरे वर्ग को तीन के कारक से रोक सकते हैं।
डेविड मार्क्स

0

ऊपर टिप्पणी करने की कोशिश की, लेकिन मेरा प्रतिनिधि बहुत कम है।

चाहिए

y[i] ~ dnorm(mu[i], tau / weight[i])

नहीं है

y[i] ~ dnorm(mu[i], tau * weight[i])

JAGS में मैं JAGS में इस पद्धति से परिणामों की तुलना करने वाले कुछ परीक्षण चला रहा हूं, lm () के माध्यम से भारित प्रतिगमन से परिणाम प्राप्त कर सकता हूं और केवल बाद के उपयोग के अनुसार पा सकता हूं। यहाँ एक सरल उदाहरण दिया गया है:

aggregated <- 
  data.frame(x=1:5) %>%
  mutate( y = round(2 * x + 2 + rnorm(length(x)) ),
          freq = as.numeric(table(sample(1:5, 100, 
                 replace=TRUE, prob=c(.3, .4, .5, .4, .3)))))
x <- aggregated$x
y <- aggregated$y
weight <- aggregated$freq
N <- length(y)

# via lm()
lm(y ~ x, data = aggregated, weight = freq)

और से तुलना करें

lin_wt_mod <- function() {

  for (i in 1:N) {
    y[i] ~ dnorm(mu[i], tau*weight[i])
    mu[i] <- beta[1] + beta[2] * x[i]
  }

  for(j in 1:2){
    beta[j] ~ dnorm(0,0.0001)
  }

  tau   ~ dgamma(0.001, 0.001)
  sigma     <- 1/sqrt(tau)
}

dat <- list("N","x","y","weight")
params <- c("beta","tau","sigma")

library(R2jags)
fit_wt_lm1 <- jags.parallel(data = dat, parameters.to.save = params,
              model.file = lin_wt_mod, n.iter = 3000, n.burnin = 1000)
fit_wt_lm1$BUGSoutput$summary

भले ही प्रतिष्ठा टिप्पणियों के रूप में उत्तर के रूप में नहीं दी जानी चाहिए।
माइकल आर। चेरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.