Memahami algoritma MCMC dan Metropolis-Hastings

13

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 :Df(x)=axD

1) Buat tebakan awal untuk . Set ini lancar kami ( ). Juga menambahkan pada akhir Rantai Markov ( ).a a a 0 a Caaaa0aC

2) Ulangi langkah di bawah beberapa kali.

3) Mengevaluasi kemungkinan saat ini ( ) diberikan dan . a 0 DL0a0D

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 eaa1μ=a0σ=stepsizestepsize

5) Evaluasi kemungkinan baru ( ) diberikan dan . a 1 DL1a1D

6) Jika lebih besar dari , terima sebagai baru , tambahkan di akhir dan lanjutkan ke langkah 2.L 0 a 1 a 0 CL1L0a1a0C

7) Jika lebih kecil dari menghasilkan angka ( ) dalam kisaran [0,1] dari distribusi yang seragamL 0 UL1L0U

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 CUL1L0a1a0C

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 0UL1L0a0Ca0

10) Akhir Pengulangan.

11) Hapus beberapa elemen dari awal (fase burn-in).C

12) Sekarang ambil rata-rata dari nilai-nilai dalam . Rata-rata ini adalah perkiraan .aCa

Sekarang saya memiliki beberapa pertanyaan mengenai langkah-langkah di atas:

  • Bagaimana cara saya membangun fungsi kemungkinan untuk tetapi juga untuk fungsi sembarang?f(x)=ax
  • 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 .f(x)=ax+b

Catatan / Kredit: Struktur utama dari algoritma yang dijelaskan di atas didasarkan pada kode dari MPIA Python Workshop.

AstrOne
sumber

Jawaban:

11

Tampaknya ada beberapa kesalahpahaman tentang apa algoritma Metropolis-Hastings (MH) dalam deskripsi Anda tentang algoritma.

Pertama-tama, kita harus memahami bahwa MH adalah algoritma pengambilan sampel. Sebagaimana dinyatakan dalam wikipedia

Dalam statistik dan dalam fisika statistik, algoritma Metropolis-Hastings adalah metode rantai Markov Monte Carlo (MCMC) untuk memperoleh urutan sampel acak dari distribusi probabilitas yang pengambilan sampel langsungnya sulit.

Untuk mengimplementasikan algoritma MH, Anda memerlukan kepadatan proposal atau distribusi melompat , yang darinya sampel mudah diambil. Jika Anda ingin mengambil sampel dari distribusi , algoritma MH dapat diimplementasikan sebagai berikut:f ( )Q(|)f()

  1. Pilih keadaan acak awal .x0
  2. Hasilkan kandidat dari . Q ( | x 0 )xQ(|x0)
  3. Hitung rasio .α=f(x)/f(x0)
  4. Terima sebagai realisasi dari dengan probabilitas . f αxfα
  5. Ambil sebagai kondisi awal baru dan lanjutkan pengambilan sampel hingga Anda mendapatkan ukuran sampel yang diinginkan.x

Setelah Anda mendapatkan sampel, Anda masih perlu membakarnya dan mengencerkannya : mengingat bahwa sampler bekerja tanpa gejala, Anda perlu menghapus sampel pertama (burn-in), dan mengingat bahwa sampel tergantung Anda perlu subsampel setiap iterasi (penjarangan).kNk

Contoh dalam R dapat ditemukan di tautan berikut:

http://www.mas.ncl.ac.uk/~ndjw1/teaching/sim/metrop/metrop.html

Metode ini banyak digunakan dalam statistik Bayesian untuk pengambilan sampel dari distribusi posterior parameter model.

Contoh yang Anda gunakan tampaknya tidak jelas bagi saya mengingat bahwa bukan kepadatan kecuali Anda membatasi pada set yang dibatasi. Kesan saya adalah bahwa Anda tertarik untuk memasang garis lurus ke sekumpulan poin yang saya sarankan Anda untuk memeriksa penggunaan algoritma Metropolis-Hastings dalam konteks regresi linier. Tautan berikut menyajikan beberapa ide tentang bagaimana MH dapat digunakan dalam konteks ini (Contoh 6.8):xf(x)=axx

Robert & Casella (2010), Memperkenalkan Metode Monte Carlo dengan R , Ch. 6, "Algoritma Metropolis – Hastings"

Ada juga banyak pertanyaan, dengan petunjuk referensi yang menarik, di situs ini membahas tentang makna fungsi kemungkinan.

Pointer lain yang mungkin menarik adalah paket R mcmc, yang mengimplementasikan algoritma MH dengan proposal Gaussian dalam perintah metrop().

Habano
sumber
Halo teman saya. Ya, saya melihat ke MH dalam konteks regresi linier. Url yang Anda berikan kepada saya menjelaskan semuanya dengan sangat baik. Terima kasih. Jika saya mengajukan beberapa pertanyaan lain tentang MH saya akan memposting pertanyaan lagi. Terima kasih lagi.
AstrOne