İki değişkenli bir yoğunluktan simüle etmeye çalıştım Metropolis algoritmalarını R'de kullanıyor ve hiç şansı yoktu. Yoğunluk şu şekilde ifade edilebilir: , nerede -Meddala dağılımı
parametrelerle , , , ve log-normal ve log-mean ve log-sd bir sabit. Numunemin istediğim örnek olup olmadığını test etmek için,, olması gereken . MCMCpack, mcmc ve dream R paketlerinden farklı Metropolis algoritmaları denedim. Burn-in'i attım, inceltme kullandım, milyonlarca boyuta sahip numuneler kullandım, ancak sonuçta ortaya çıkan marjinal yoğunluk asla sağladığım yoğunluk değildi.
İşte kullandığım kodun son baskısı:
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)
)
Ben yakınsama kadar örnek beri rüya paketi yerleşti. Üç şekilde doğru sonuçlara sahip olup olmadığımı test ettim. KS istatistiğini kullanma, kantilleri karşılaştırma ve Singh-Maddala dağılımının parametrelerini nihai örnekten maksimum olasılıkla tahmin etme:
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")
Bu karşılaştırmaların sonuçlarına baktığımda, KS istatistiği neredeyse her zaman verilen parametrelerle Singh-Maddala dağılımından gelen sıfır hipotezini reddeder. Maksimum olasılık tahmini parametreleri, örnekleme prosedürünün başarılı olduğunu kabul etmek için bazen gerçek değerlerine yaklaşır, ancak genellikle konfor bölgesinin çok dışındadır. Nicelikler için aynen, ampirik nicelikler çok uzak değil, çok uzaktır.
Sorum şu ki yanlış yaptığım şey mi? Kendi hipotezlerim:
- MCMC bu tür örnekleme için uygun değildir
- MCMC, teorik nedenlerden dolayı birleşemez (dağıtım işlevi, ne olursa olsun gerekli özellikleri karşılamaz)
- Metropolis algoritmasını doğru kullanmıyorum
- Bağımsız numunem olmadığından dağıtım testlerim doğru değil.
dsinmad
üç parametre alır ya da ben bir şey eksik.