Selama beberapa hari terakhir saya telah mencoba memahami bagaimana Markov Chain Monte Carlo (MCMC) bekerja. Secara khusus saya telah mencoba memahami dan mengimplementasikan algoritma Metropolis-Hastings. Sejauh ini saya pikir saya memiliki pemahaman keseluruhan tentang algoritma tetapi ada beberapa hal yang belum jelas bagi saya. Saya ingin menggunakan MCMC agar sesuai dengan beberapa model untuk data. Karena ini saya akan menjelaskan pemahaman saya tentang algoritma Metropolis-Hastings untuk pemasangan garis lurus untuk beberapa data yang diamati :D
1) Buat tebakan awal untuk . Set ini lancar kami ( ). Juga menambahkan pada akhir Rantai Markov ( ).a a a 0 a C
2) Ulangi langkah di bawah beberapa kali.
3) Mengevaluasi kemungkinan saat ini ( ) diberikan dan . a 0 D
4) Mengusulkan baru ( ) dengan sampling dari distribusi normal dengan dan . Untuk saat ini, ukuran adalah konstan.a 1 μ = a 0 σ = s t e p s i z e s t e p s i z e
5) Evaluasi kemungkinan baru ( ) diberikan dan . a 1 D
6) Jika lebih besar dari , terima sebagai baru , tambahkan di akhir dan lanjutkan ke langkah 2.L 0 a 1 a 0 C
7) Jika lebih kecil dari menghasilkan angka ( ) dalam kisaran [0,1] dari distribusi yang seragamL 0 U
8) Jika lebih kecil dari perbedaan antara dua kemungkinan ( - ), terima sebagai baru , tambahkan di akhir dan lanjutkan ke langkah 2.L 1 L 0 a 1 a 0 C
9) Jika lebih besar dari perbedaan antara dua kemungkinan ( - ), tambahkan di akhir , tetap menggunakan sama , lanjutkan ke langkah 2.L 1 L 0 a 0 C a 0
10) Akhir Pengulangan.
11) Hapus beberapa elemen dari awal (fase burn-in).
12) Sekarang ambil rata-rata dari nilai-nilai dalam . Rata-rata ini adalah perkiraan .a
Sekarang saya memiliki beberapa pertanyaan mengenai langkah-langkah di atas:
- Bagaimana cara saya membangun fungsi kemungkinan untuk tetapi juga untuk fungsi sembarang?
- Apakah ini implementasi yang benar dari algoritma Metropolis-Hastings?
- Bagaimana pemilihan metode pembuatan bilangan acak pada Langkah 7 dapat mengubah hasilnya?
- Bagaimana algoritma ini akan berubah jika saya memiliki beberapa parameter model? Sebagai contoh, jika saya memiliki model .
Catatan / Kredit: Struktur utama dari algoritma yang dijelaskan di atas didasarkan pada kode dari MPIA Python Workshop.