Program debugging MCMC terkenal sulit. Kesulitan muncul karena beberapa masalah beberapa di antaranya adalah:
(A) Sifat siklik dari algoritma
Kami secara iteratif menggambar parameter yang tergantung pada semua parameter lainnya. Dengan demikian, jika suatu implementasi tidak berfungsi dengan benar maka sulit untuk mengisolasi bug karena masalahnya dapat berada di mana saja dalam sampler berulang.
(B) Jawaban yang benar belum tentu diketahui.
Kami tidak memiliki cara untuk mengetahui apakah kami telah mencapai konvergensi. Untuk beberapa hal ini dapat dikurangi dengan menguji kode pada data yang disimulasikan.
Mengingat masalah di atas, saya bertanya-tanya apakah ada teknik standar yang dapat digunakan untuk men-debug program MCMC.
Edit
Saya ingin berbagi pendekatan yang saya gunakan untuk men-debug program saya sendiri. Saya, tentu saja, melakukan semua hal yang disebutkan PeterR. Selain itu, saya melakukan tes berikut menggunakan data simulasi:
Mulai semua parameter dari nilai sebenarnya dan lihat apakah sampler menyimpang terlalu jauh dari nilai sebenarnya.
Saya memiliki tanda untuk setiap parameter dalam sampler berulang saya yang menentukan apakah saya menggambar parameter dalam sampler berulang. Misalnya, jika flag 'gen_param1' disetel ke true maka saya menarik 'param1' dari kondisional penuh dalam sampler berulang. Jika ini disetel ke false maka 'param1' disetel ke nilai sebenarnya.
Setelah saya selesai menulis sampler, saya menguji program menggunakan resep berikut:
- Tetapkan flag generate untuk satu parameter menjadi true dan yang lainnya false dan nilai konvergensi sehubungan dengan nilai sebenarnya.
- Atur flag generate untuk parameter lain bersamaan dengan yang pertama dan nilai lagi konvergensi.
Langkah-langkah di atas sangat membantu saya.
Kiat bagus dalam jawaban PeterR; Saya tidak memiliki tips lebih lanjut untuk debugging yang sebenarnya, tetapi saya menemukan proses yang sangat berguna untuk menguji apakah kode Anda memiliki bug. Dijelaskan dalam tulisan ini:
http://pubs.amstat.org/doi/abs/10.1198/016214504000001132
Intinya idenya adalah untuk memiliki dua simulasi: Satu menjadi MCMC Anda untuk menyimpulkan (mungkin) parameter model Anda. Simulator kedua hanya sampel parameter dari sebelumnya. Mereka menghasilkan data dari parameter kedua simulator, dan menghitung statistik uji yang membandingkan distribusi gabungan dari parameter dan data. Jika kode MCMC dengan benar sampel parameter dari posterior, maka statistik uji akan memiliki distribusi N (0,1). Kode untuk menghitung statistik tes tersedia.
sumber