การดีบักโปรแกรม MCMC นั้นเป็นเรื่องยาก ความยากลำบากเกิดขึ้นเนื่องจากหลายประเด็นซึ่งบางประเด็นคือ:
(a) ธรรมชาติของอัลกอริธึม
เรามักจะวาดพารามิเตอร์ตามเงื่อนไขในพารามิเตอร์อื่น ๆ ทั้งหมด ดังนั้นหากการนำไปใช้งานไม่ทำงานอย่างถูกต้องจะเป็นการยากที่จะแยกบั๊กเนื่องจากปัญหาสามารถอยู่ที่ใดก็ได้ในตัวอย่างซ้ำ
(b) ไม่จำเป็นต้องรู้คำตอบที่ถูกต้อง
เราไม่มีทางที่จะบอกได้ว่าเราประสบความสำเร็จในการบรรจบกันหรือไม่ ในระดับหนึ่งสิ่งนี้สามารถลดลงได้โดยการทดสอบรหัสเกี่ยวกับข้อมูลจำลอง
จากประเด็นข้างต้นฉันสงสัยว่ามีเทคนิคมาตรฐานที่สามารถใช้ในการดีบักโปรแกรม MCMC หรือไม่
แก้ไข
ฉันต้องการแบ่งปันวิธีการที่ฉันใช้เพื่อดีบักโปรแกรมของฉันเอง แน่นอนฉันทำทุกสิ่งที่ PeterR พูดถึง นอกเหนือจากนั้นฉันทำการทดสอบต่อไปนี้โดยใช้ข้อมูลจำลอง:
เริ่มต้นพารามิเตอร์ทั้งหมดจากค่าจริงและดูว่าตัวอย่างเก็บค่าเบี่ยงเบนจากค่าจริงมากเกินไปหรือไม่
ฉันมีค่าสถานะสำหรับแต่ละพารามิเตอร์ในตัวอย่างซ้ำของฉันที่กำหนดว่าฉันกำลังวาดพารามิเตอร์นั้นในตัวอย่างซ้ำ ตัวอย่างเช่นหากตั้งค่าสถานะ 'gen_param1' เป็นจริงจากนั้นฉันวาด 'param1' จากเงื่อนไขแบบเต็มในตัวอย่างซ้ำ หากสิ่งนี้ถูกตั้งค่าเป็นเท็จ 'param1' จะถูกตั้งค่าเป็นค่าจริง
เมื่อฉันเขียนตัวอย่างเสร็จฉันทดสอบโปรแกรมโดยใช้สูตรต่อไปนี้:
- ตั้งค่าสถานะการสร้างสำหรับหนึ่งพารามิเตอร์เป็นจริงและทุกอย่างอื่นเป็นเท็จและประเมินการบรรจบกันตามมูลค่าที่แท้จริง
- ตั้งธงสร้างสำหรับพารามิเตอร์อื่นร่วมกับคนแรกและประเมินการบรรจบกันอีกครั้ง
ขั้นตอนข้างต้นเป็นประโยชน์กับฉันอย่างไม่น่าเชื่อ