मैंने आर में मेट्रोपोलिस एल्गोरिदम का उपयोग करते हुए एक द्विभाजक घनत्व से अनुकरण करने की कोशिश की और कोई भाग्य नहीं था। घनत्व को रूप में व्यक्त किया जा सकता है , जहाँ सिंह-मददल वितरण है
मापदंडों के साथ , , , और लॉग- साथ एक अंश के रूप में लॉग-सामान्य है , और लॉग-एसडी एक स्थिरांक है। यह जांचने के लिए कि क्या मेरा नमूना वह है जो मैं चाहता हूं, मैंने के सीमांत घनत्व को देखा , जिसे होना चाहिए । मैंने R पैकेज MCMCpack, mcmc और सपने से अलग-अलग मेट्रोपोलिस एल्गोरिदम की कोशिश की। मैंने बर्न-इन को त्याग दिया, थिनिंग का इस्तेमाल किया, मिलियन तक के आकार वाले नमूनों का इस्तेमाल किया, लेकिन परिणामस्वरूप सीमांत घनत्व कभी भी मेरे द्वारा आपूर्ति नहीं की गई।
यहाँ मेरे कोड का अंतिम संस्करण है जिसका मैंने उपयोग किया है:
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 थी। मात्रा के लिए डिट्टो, अनुभवजन्य मात्रात्मक बहुत दूर नहीं हैं, लेकिन बहुत दूर हैं।
मेरा सवाल यह है कि मैं क्या गलत कर रहा हूं? मेरी अपनी परिकल्पना:
- इस प्रकार के नमूने के लिए MCMC उपयुक्त नहीं है
- MCMC, सैद्धांतिक कारणों के कारण (वितरण समारोह आवश्यक गुणों को संतुष्ट नहीं करता है, जो भी हो)
- मैं मेट्रोपोलिस एल्गोरिथ्म का सही उपयोग नहीं करता हूं
- मेरे वितरण परीक्षण सही नहीं हैं, क्योंकि मेरे पास स्वतंत्र नमूना नहीं है।
dsinmad
तीन पैरामीटर लेता है या मैं कुछ याद आ रही है।