Saya telah mencoba memahami algoritma Metropolis-Hastings untuk menulis kode untuk memperkirakan parameter model (yaitu ). Menurut bibliografi, algoritma Metropolis-Hastings memiliki langkah-langkah berikut:
- Hasilkan
di mana
Bagaimana saya ingin mengajukan beberapa pertanyaan:
- Daftar pustaka menyatakan bahwa jika adalah distribusi simetris rasio menjadi 1 dan algoritma ini disebut Metropolis. Apakah itu benar? Satu-satunya perbedaan antara Metropolis dan Metropolis-Hastings adalah yang pertama menggunakan distribusi simetris? Bagaimana dengan Metropolis "Random Walk" (-Hastings)? Apa bedanya dengan dua lainnya?
- Sebagian besar kode contoh yang saya temukan on-line menggunakan distribusi proposal Gaussian dan karenanya mana adalah rasio kemungkinan. Bagaimana jika distribusi proposal adalah distribusi Poisson? Saya pikir saya mengerti secara rasional mengapa rasio itu tidak menjadi 1 ketika menggunakan distribusi asimetris tetapi saya tidak yakin apakah memahaminya secara matematis atau bagaimana menerapkannya dengan kode. Bisakah seseorang memberi saya kode sederhana (C, python, R, pseudo-code atau apa pun yang Anda suka) contoh dari algoritma Metropolis-Hastings menggunakan distribusi proposal yang tidak simetris?
mcmc
metropolis-hastings
AstrOne
sumber
sumber
Jawaban:
Ya ini benar. Algoritma Metropolis adalah kasus khusus dari algoritma MH.
Secara acak, distribusi proposal dipusatkan kembali setelah setiap langkah pada nilai terakhir yang dihasilkan oleh rantai. Secara umum, dalam jalan acak distribusi proposal adalah gaussian, dalam hal ini jalan acak memenuhi persyaratan simetri dan algoritmanya adalah metropolis. Saya kira Anda dapat melakukan jalan acak "semu" dengan distribusi asimetris yang akan menyebabkan proposal terlalu melayang ke arah yang berlawanan dari kemiringan (distribusi condong ke kiri akan mendukung proposal ke kanan). Saya tidak yakin mengapa Anda melakukan ini, tetapi Anda bisa dan itu akan menjadi algoritma metropolis hastings (yaitu memerlukan istilah rasio tambahan).
Dalam algoritma berjalan non-acak, distribusi proposal diperbaiki. Dalam varian random walk, pusat distribusi proposal berubah pada setiap iterasi.
Maka Anda perlu menggunakan MH bukan hanya metropolis. Agaknya ini akan menjadi sampel distribusi diskrit, jika tidak, Anda tidak akan ingin menggunakan fungsi diskrit untuk menghasilkan proposal Anda.
Dalam hal apa pun, jika distribusi sampel dipotong atau Anda memiliki pengetahuan sebelumnya tentang kemiringannya, Anda mungkin ingin menggunakan distribusi sampling asimetris dan karenanya perlu menggunakan metropolis-hastings.
Inilah kota metropolis:
Mari kita coba gunakan ini untuk mencicipi distribusi bimodal. Pertama, mari kita lihat apa yang terjadi jika kita menggunakan jalan acak untuk propsal kita:
Sekarang mari kita coba pengambilan sampel menggunakan distribusi proposal tetap dan lihat apa yang terjadi:
Ini terlihat ok pada awalnya, tetapi jika kita melihat kepadatan posterior ...
kita akan melihat bahwa itu benar-benar macet maksimum lokal. Ini tidak sepenuhnya mengejutkan karena kami sebenarnya memusatkan distribusi proposal kami di sana. Hal yang sama terjadi jika kita memusatkan ini pada mode lain:
Kita dapat mencoba membuang proposal kita di antara dua mode, tetapi kita perlu mengatur varians sangat tinggi untuk memiliki kesempatan menjelajahi salah satu dari mereka.
Perhatikan bagaimana pilihan pusat distribusi proposal kami memiliki dampak signifikan pada tingkat penerimaan sampler kami.
Kami masih terjebak di dekat dua mode. Mari kita coba menjatuhkan ini langsung antara dua mode.
Akhirnya, kami semakin dekat dengan apa yang kami cari. Secara teoritis, jika kita membiarkan sampler bekerja cukup lama kita bisa mendapatkan sampel yang representatif dari salah satu dari distribusi proposal ini, tetapi jalan acak menghasilkan sampel yang dapat digunakan dengan sangat cepat, dan kita harus mengambil keuntungan dari pengetahuan kita tentang bagaimana posterior itu seharusnya untuk melihat untuk menyetel distribusi sampling tetap untuk menghasilkan hasil yang dapat digunakan (yang, sejujurnya, kami belum cukup dalam
y_trace4
).Saya akan mencoba memperbarui dengan contoh metropolis hastings nanti. Anda harus dapat melihat dengan cukup mudah bagaimana memodifikasi kode di atas untuk menghasilkan algoritma metropolis hastings (petunjuk: Anda hanya perlu menambahkan rasio tambahan ke dalam
logR
perhitungan).sumber
R=exp(logR)
dengan ini:R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))
untuk MH berjalan acak dan non-acak. Apakah itu benar?