Tekan dan jalankan MCMC

16

Saya mencoba menerapkan algoritma MCMC hit and run, tetapi saya mengalami sedikit kesulitan untuk memahami bagaimana cara melakukannya. Gagasan umum, adalah sebagai berikut:

Untuk menghasilkan lompatan proposal di MH, kami:

  • Hasilkan arah dari distribusi di permukaan unit bola OdO
  • Hasilkan jarak yang ditandatangani sepanjang ruang terbatas.λ

Namun, saya tidak tahu bagaimana saya harus menerapkan ini dalam R (atau bahasa lainnya).

Adakah yang memiliki potongan kode yang akan mengarahkan saya ke arah yang benar?

BTW, saya tidak begitu tertarik pada perpustakaan yang melakukan metode ini, saya ingin mencoba dan membuat kode sendiri.

Terimakasih banyak.

csgillespie
sumber
1
Belum pernah mendengar tentang algoritma ini sebelumnya, tetapi kedengarannya cukup menarik. Bisakah Anda memberikan tautan ke sumber penjelasan? Terima kasih !
steffen
@steffen Berikut ini tautan ke makalah asli - sebenarnya laporan teknisnya. Saya juga tidak pernah menggunakan prosedur ini.
csgillespie
1
Apa keuntungan dari menjalankan dan menjalankan MCMC dibandingkan metode lain? Kecepatan konvergensi?
RockScience
@ fRed: Itu sebabnya saya menawarkan hadiah. Saya sudah membaca tentang Hit and run, tetapi tidak tahu dalam keadaan apa itu akan berguna.
csgillespie
3
Tautan sekarang terputus.
daknowles

Jawaban:

11

Saya tidak melihat kertas yang Anda berikan, tetapi biarkan saya mencoba:

Jika Anda memiliki ruang parameter berdimensi Anda dapat menghasilkan arah acak d merata pada permukaan unit bola denganpd

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(lih Wiki ).

Kemudian, gunakan ini untuk menghasilkan proposal untuk untuk sampel penolakan (dengan asumsi Anda benar-benar dapat mengevaluasi distribusi untuk ddd ).

Dengan asumsi Anda mulai di posisi dan telah menerima d , buat proposal bersama yxdy

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

dan lakukan Langkah Metropolis-Hastings untuk memutuskan apakah akan pindah ke y atau tidak.

Tentu saja, seberapa baik ini dapat bekerja akan tergantung pada distribusi dan seberapa mahal untuk (berulang kali) mengevaluasi kepadatannya dalam langkah sampel penolakan, tetapi karena menghasilkan proposal untuk d adalah murah, Anda mungkin lolos begitu saja.dd


Ditambahkan untuk manfaat @ csgillespie:

Dari apa yang saya dapat kumpulkan oleh beberapa googling, MCMC hit-and-run berguna terutama untuk pencampuran cepat jika Anda memiliki target (multivarian) yang memiliki dukungan sewenang-wenang tetapi tidak terhubung, karena memungkinkan Anda untuk bergerak dari titik mana pun dalam mendukung satu sama lain dalam satu langkah. Lebih banyak di sini dan di sini .

orang fabian
sumber
1
Jika jawaban ini tidak memuaskan, dapatkah Anda menjelaskan mengapa?
John Salvatier
Saya tidak yakin tentang @fred, tetapi ketika saya menawarkan hadiah saya kira saya ingin sedikit lebih banyak wawasan tentang MCMC hit-and-run. Misalnya, jenis masalah apa yang paling cocok untuk itu. Tentu saja, jika tidak ada jawaban lain, maka pertanyaan ini akan memenangkan hadiah.
csgillespie
3
@csgillespie: Saya mengedit jawaban saya untuk mengakomodasi minat Anda dengan lebih baik. Jangan dikatakan bahwa saya tidak layak menerima hadiah itu. ;)
fabians
2
Terima kasih banyak atas tautannya. Salah satu alasan saya menempatkan karunia adalah bahwa pencarian google saya muncul beberapa diskusi matematis dari metode ini, tetapi sedikit di jalan aplikasi praktis. Tolong jangan menganggapnya sebagai sedikit jika saya menunggu 48 jam sebelum memberikan hadiah (itu adalah karunia yang sangat murah hati!)
csgillespie
4

Saya menemukan pertanyaan Anda ketika saya sedang mencari referensi asli untuk Hit-and-Run. Terima kasih untuk itu! Saya baru saja menyusun implementasi konsep-bukti hit-and-run untuk PyMC di akhir blog baru-baru ini .

Abraham Flaxman
sumber