คำถามติดแท็ก metropolis-hastings

อัลกอริทึม Markov Chain Monte Carlo (MCMC) ชนิดพิเศษที่ใช้ในการจำลองจากการแจกแจงความน่าจะเป็นที่ซับซ้อน ได้รับการตรวจสอบโดยทฤษฎีลูกโซ่ของ Markov และนำเสนอการใช้งานที่เป็นไปได้มากมาย

2
ความสับสนที่เกี่ยวข้องกับการสุ่มตัวอย่างกิ๊บส์
ฉันเจอบทความนี้ที่มันบอกว่าในการสุ่มตัวอย่างกิ๊บส์ทุกตัวอย่างเป็นที่ยอมรับ ฉันสับสนเล็กน้อย ทำไมทุกตัวอย่างที่ยอมรับมันมาบรรจบกับการแจกแจงแบบคงที่ โดยทั่วไปอัลกอริทึม Metropolis เรายอมรับเป็น min (1, p (x *) / p (x)) โดยที่ x * เป็นจุดตัวอย่าง ฉันคิดว่า x * ชี้ให้เราไปยังตำแหน่งที่ความหนาแน่นสูงดังนั้นเราจึงย้ายไปยังการกระจายเป้าหมาย ดังนั้นฉันคิดว่ามันจะย้ายไปยังการกระจายเป้าหมายหลังจากการเผาไหม้ในช่วงเวลา อย่างไรก็ตามในการสุ่มตัวอย่างของกิ๊บส์เรายอมรับทุกอย่างแม้ว่ามันอาจจะพาเราไปที่อื่น สมมติว่าเรามีการกระจาย Z เราไม่สามารถคำนวณ Z. ในอัลกอริทึมมหานครเราใช้คำว่าเพื่อรวมการกระจายบวกกับค่าคงที่ normalizing Z ยกเลิก ดังนั้นมันก็โอเคp(θ)=c(θ)/Zp(θ)=c(θ)/Zp(\theta) = c(\theta)/Zค(θn E W) / c (θo l d)c(θnew)/c(θold)c(\theta^{new})/c(\theta^{old})c ( θ )c(θ)c(\theta) แต่ในการสุ่มตัวอย่างกิ๊บส์เราใช้การกระจายที่ไหนc ( θ )c(θ)c(\theta) สำหรับเช่นในกระดาษhttp://books.nips.cc/papers/files/nips25/NIPS2012_0921.pdfที่กำหนดของมัน …

2
การสุ่มตัวอย่างจากการแจกแจงไบวาเรียที่มีความหนาแน่นเป็นที่รู้จักโดยใช้ MCMC
ฉันพยายามที่จะจำลองจากความหนาแน่นของ bivariate p(x,y)p(x,y)p(x,y)การใช้อัลกอริทึม Metropolis ใน R และไม่มีโชค ความหนาแน่นสามารถแสดงเป็น p(y|x)p(x)p(y|x)p(x)p(y|x)p(x)ที่ไหน p(x)p(x)p(x) คือการกระจาย Singh-Maddala p(x)=aqxa−1ba(1+(xb)a)1+qp(x)=aqxa−1ba(1+(xb)a)1+qp(x)=\dfrac{aq x^{a-1}}{b^a (1 + (\frac{x}{b})^a)^{1+q}} ด้วยพารามิเตอร์ aaa, qqq, bbbและ p(y|x)p(y|x)p(y|x) เป็นบันทึกปกติโดยมีค่าเฉลี่ยล็อกเป็นเศษส่วนของ xxxและ log-sd ค่าคงที่ เพื่อทดสอบว่าตัวอย่างของฉันเป็นสิ่งที่ฉันต้องการหรือไม่ฉันดูที่ความหนาแน่นของxxxซึ่งควรจะเป็น p(x)p(x)p(x). ฉันลองอัลกอริทึม 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 } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.