ฉันพยายามที่จะจำลองจากความหนาแน่นของ bivariate การใช้อัลกอริทึม Metropolis ใน R และไม่มีโชค ความหนาแน่นสามารถแสดงเป็น ที่ไหน คือการกระจาย Singh-Maddala
ด้วยพารามิเตอร์ , , และ เป็นบันทึกปกติโดยมีค่าเฉลี่ยล็อกเป็นเศษส่วนของ และ log-sd ค่าคงที่ เพื่อทดสอบว่าตัวอย่างของฉันเป็นสิ่งที่ฉันต้องการหรือไม่ฉันดูที่ความหนาแน่นของซึ่งควรจะเป็น . ฉันลองอัลกอริทึม Metropolis ที่แตกต่างจากแพ็คเกจ 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 เปรียบเทียบปริมาณและประมาณค่าพารามิเตอร์ของการแจกแจงซิงห์ - Maddala กับโอกาสสูงสุดจากตัวอย่างผลลัพธ์:
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")
เมื่อฉันดูผลลัพธ์ของการเปรียบเทียบเหล่านี้สถิติแคนซัสมักจะปฏิเสธสมมติฐานว่าง ๆ ที่ตัวอย่างนั้นมาจากการแจกแจงของซิงห์ - แมดดาลาด้วยพารามิเตอร์ที่ให้มา บางครั้งค่าประมาณความน่าจะเป็นของพารามิเตอร์มาใกล้เคียงกับค่าที่แท้จริง แต่มักจะอยู่นอกเขตความสะดวกสบายมากเกินไปที่จะยอมรับว่าขั้นตอนการสุ่มตัวอย่างประสบความสำเร็จ เหมือนกันสำหรับ quantiles, quantile เชิงประจักษ์ไม่ไกลเกินไป แต่ไกลเกินไป
คำถามของฉันคือสิ่งที่ฉันทำผิดหรือเปล่า? สมมติฐานของฉันเอง:
- MCMC ไม่เหมาะสำหรับการสุ่มตัวอย่างประเภทนี้
- MCMC ไม่สามารถรวมกันได้เนื่องจากเหตุผลทางทฤษฎี (ฟังก์ชั่นการกระจายไม่ตอบสนองคุณสมบัติที่ต้องการไม่ว่าจะเป็นอะไรก็ตาม)
- ฉันไม่ได้ใช้อัลกอริทึม Metropolis อย่างถูกต้อง
- การทดสอบการกระจายของฉันไม่ถูกต้องเนื่องจากฉันไม่มีตัวอย่างอิสระ
dsinmad
ใช้พารามิเตอร์สามตัวหรือว่าฉันทำอะไรหายไป