MCMC का उपयोग करते हुए ज्ञात घनत्व के साथ बीवरिएट वितरण से नमूनाकरण


9

मैंने आर में मेट्रोपोलिस एल्गोरिदम का उपयोग करते हुए एक द्विभाजक घनत्व से अनुकरण करने की कोशिश की और कोई भाग्य नहीं था। घनत्व को रूप में व्यक्त किया जा सकता है , जहाँ सिंह-मददल वितरण हैपी(एक्स,y)पी(y|एक्स)पी(एक्स)पी(एक्स)

पी(एक्स)=क्षएक्स-1(1+(एक्स))1+क्ष

मापदंडों के साथ , , , और लॉग- साथ एक अंश के रूप में लॉग-सामान्य है , और लॉग-एसडी एक स्थिरांक है। यह जांचने के लिए कि क्या मेरा नमूना वह है जो मैं चाहता हूं, मैंने के सीमांत घनत्व को देखा , जिसे होना चाहिए । मैंने R पैकेज MCMCpack, mcmc और सपने से अलग-अलग मेट्रोपोलिस एल्गोरिदम की कोशिश की। मैंने बर्न-इन को त्याग दिया, थिनिंग का इस्तेमाल किया, मिलियन तक के आकार वाले नमूनों का इस्तेमाल किया, लेकिन परिणामस्वरूप सीमांत घनत्व कभी भी मेरे द्वारा आपूर्ति नहीं की गई।क्षपी(y|एक्स)एक्सएक्सपी(एक्स)

यहाँ मेरे कोड का अंतिम संस्करण है जिसका मैंने उपयोग किया है:

logvrls <- function(x,el,sdlog,a,scl,q.arg) {
    if(x[2]>0) {
         dlnorm(x[1],meanlog=el*log(x[2]),sdlog=sdlog,log=TRUE)+
         dsinmad(x[2],a=a,scale=scl,q.arg=q.arg,log=TRUE)
    }
    else -Inf    
}

a <- 1.35
q <- 3.3
scale <- 10/gamma(1 + 1/a)/gamma(q - 1/a)*  gamma(q) 

Initvrls <- function(pars,nseq,meanlog,sdlog,a,scale,q) {
    cbind(rlnorm(nseq,meanlog,sdlog),rsinmad(nseq,a,scale,q))
}

library(dream)
aa <- dream(logvrls,
        func.type="logposterior.density",
        pars=list(c(0,Inf),c(0,Inf)),
        FUN.pars=list(el=0.2,sdlog=0.2,a=a,scl=scale,q.arg=q),
        INIT=Initvrls,
        INIT.pars=list(meanlog=1,sdlog=0.1,a=a,scale=scale,q=q),
        control=list(nseq=3,thin.t=10)
        )

मैं सपना पैकेज पर बस गया हूं, क्योंकि यह अभिसरण तक नमूने लेता है। मैंने परीक्षण किया है कि क्या मेरे पास तीन तरीकों से सही परिणाम हैं। केएस आँकड़ा का उपयोग करना, मात्राओं की तुलना करना, और परिणामस्वरूप परिणाम से अधिकतम संभावना के साथ सिंह-मददाला वितरण के मापदंडों का आकलन करना:

ks.test(as.numeric(aa$Seq[[2]][,2]),psinmad,a=a,scale=scale,q.arg=q)

lsinmad <- function(x,sample)
    sum(dsinmad(sample,a=x[1],scale=x[2],q.arg=x[3],log=TRUE))
 optim(c(2,20,2),lsinmad,method="BFGS",sample=aa$Seq[[1]][,2])

 qq <- eq(0.025,.975,by=0.025)   
 tst <- cbind(qq,
              sapply(aa$Seq,function(l)round(quantile(l[,2],qq),3)),
              round(qsinmad(qq,a,scale,q),3))
 colnames(tst) <- c("Quantile","S1","S2","S3","True")

 library(ggplot2)
 qplot(x=Quantile,y=value,
       data=melt(data.frame(tst),id=1), 
       colour=variable,group=variable,geom="line")

जब मैं इन तुलनाओं के परिणामों को देखता हूं, तो केएस स्टेटिस्टिक लगभग हमेशा शून्य परिकल्पना को खारिज कर देता है कि नमूना आपूर्ति मापदंडों के साथ सिंह-मददाला वितरण से है। अधिकतम संभावना अनुमानित पैरामीटर कभी-कभी अपने वास्तविक मूल्यों के करीब आते हैं, लेकिन आमतौर पर बहुत अधिक आराम क्षेत्र से बाहर निकलते हैं, यह स्वीकार करने के लिए कि नमूनाकरण प्रक्रिया succesfull थी। मात्रा के लिए डिट्टो, अनुभवजन्य मात्रात्मक बहुत दूर नहीं हैं, लेकिन बहुत दूर हैं।

मेरा सवाल यह है कि मैं क्या गलत कर रहा हूं? मेरी अपनी परिकल्पना:

  1. इस प्रकार के नमूने के लिए MCMC उपयुक्त नहीं है
  2. MCMC, सैद्धांतिक कारणों के कारण (वितरण समारोह आवश्यक गुणों को संतुष्ट नहीं करता है, जो भी हो)
  3. मैं मेट्रोपोलिस एल्गोरिथ्म का सही उपयोग नहीं करता हूं
  4. मेरे वितरण परीक्षण सही नहीं हैं, क्योंकि मेरे पास स्वतंत्र नमूना नहीं है।

में सिंह-Maddala वितरण लिंक, पीडीएफ दो पैरामीटर है - {c, k}, फिर भी आर समारोह dsinmadतीन पैरामीटर लेता है या मैं कुछ याद आ रही है।
csgillespie

क्षमा करें, विकिपीडिया लिंक गलत सूत्र का हवाला देता है, यह पहली नज़र में ठीक लग रहा था, जब मैं प्रश्न की रचना कर रहा था। मुझे एक तैयार लिंक नहीं मिला, इसलिए मैंने सिर्फ प्रश्न में सूत्र लगाया।
mpiktas 13

जवाबों:


3

मुझे लगता है कि आदेश सही है, लेकिन p (x) और p (y | x) को दिए गए लेबल गलत थे। मूल समस्या बताती है कि p (y | x) लॉग-सामान्य है और p (x) सिंह-मददाला है। तो यह

  1. सिंह-मदाला से एक एक्स उत्पन्न करें, और

  2. एक लॉग-सामान्य से एक वाई उत्पन्न करता है जिसका एक मतलब है जो उत्पन्न एक्स का एक अंश है।


3

वास्तव में, आपको एमसीएमसी नहीं करना चाहिए, क्योंकि आपकी समस्या इतनी सरल है। इस एल्गोरिथ्म का प्रयास करें:

चरण 1: लॉग सामान्य से एक एक्स उत्पन्न करें

चरण 2: इस एक्स को स्थिर रखते हुए, सिंह मददाला से एक वाई उत्पन्न करें।

देखा! नमूना तैयार !!!


मुझे लगता है कि आप कदम उलट मतलब है। लेकिन अगर यह इतना सरल है तो हमें गिब्स के नमूने की आवश्यकता क्यों है?
20

1
नहीं, मेरा मतलब था कि मैंने जो क्रम लिखा था उसमें चरण 1 और 2। आखिरकार, एक्स पर वाई के वितरण को सशर्त निर्दिष्ट किया जाता है, इसलिए आपको वाई से पहले एक एक्स उत्पन्न करना चाहिए। गिब्स नमूना के लिए, जो कि अधिक जटिल समस्याओं के लिए एक अधिक जटिल समाधान है। तुम्हारा, जैसा कि आप इसका वर्णन करते हैं, बहुत सुंदर है, IMHO।
मोहित

1
जब आप जानते हैं कि आप गिब्स के नमूने का उपयोग करेंगे पी(y|एक्स) तथा पी(एक्स|y), लेकिन अगर आप सीमांत को जानते हैं तो नहीं पी(एक्स)
प्रोबेबिलिसलॉगिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.