Melakukan MCMC: gunakan jags / stan atau implementasikan sendiri

13

Saya baru dalam penelitian Bayesian Statistics. Saya mendengar dari peneliti bahwa peneliti Bayesian lebih baik mengimplementasikan MCMC sendiri daripada menggunakan alat seperti JAGS / Stan. Bolehkah saya bertanya apa manfaat menerapkan algoritma MCMC sendiri (dalam bahasa "tidak terlalu cepat" seperti R), kecuali untuk tujuan pembelajaran?

pengguna112758
sumber
Karena dengan begitu Anda dapat memilih sendiri pendistribusian proposal Anda sendiri, Anda harus memilihnya sedemikian rupa sehingga Rantai Markov yang dihasilkannya menyatu secepat mungkin ke posterior.
Terima kasih! Apakah itu satu-satunya alasan?
user112758
4
Jika Anda seorang peneliti terapan yang ingin mempelajari lebih banyak Bayes dengan menggunakannya untuk aplikasi, saya sarankan mulai dengan JAGS atau Stan dan kemudian pindah ke menulis MCMC Anda sendiri jika Anda merasa perlu. Ingatlah bahwa JAGS dan Stan memiliki kekuatan dan keterbatasan yang sedikit berbeda.
conjugateprior
Terima kasih! Ya, saya sedang melakukan riset terapan. Tolong ceritakan lebih banyak tentang keterbatasan JAGS dan Stan. Saya pertama kali mencoba Stan, tetapi saya baru saja menemukan itu tidak memiliki "pemantauan online" atau "sampel sampai konvergen" fitur atau add-on --- ini menjengkelkan, saya dapat mencoba JAGS sekarang.
user112758

Jawaban:

26

Secara umum, saya sangat menyarankan untuk tidak mengkode MCMC Anda sendiri untuk analisis Bayesian nyata. Ini adalah pekerjaan dan waktu yang baik dan sangat mungkin untuk memperkenalkan bug dalam kode. Sampler blackbox, seperti Stan, sudah menggunakan sampler yang sangat canggih. Percayalah, Anda tidak akan membuat kode sampler kaliber ini hanya untuk satu analisis!

Ada kasus khusus di mana dalam hal ini tidak akan cukup. Misalnya, jika Anda perlu melakukan analisis secara real time (yaitu keputusan komputer berdasarkan data yang masuk), program ini tidak akan menjadi ide yang baik. Ini karena Stan memerlukan kompilasi kode C ++, yang mungkin memerlukan waktu lebih lama daripada hanya menjalankan sampler yang sudah disiapkan untuk model yang relatif sederhana. Dalam hal ini, Anda mungkin ingin menulis kode Anda sendiri. Selain itu, saya percaya ada kasus-kasus khusus di mana paket-paket seperti Stan melakukan sangat buruk, seperti model ruang-ruang Non-Gaussian (pengungkapan penuh: Saya percaya Stan melakukan buruk dalam kasus ini, tetapi tidak tahu). Dalam hal itu, mungkin layak untuk mengimplementasikan MCMC khusus. Tapi ini pengecualian, bukan aturannya!

Sejujurnya, saya pikir sebagian besar peneliti yang menulis sampler untuk analisis tunggal (dan ini memang terjadi, saya telah melihatnya) melakukannya karena mereka suka menulis sampler sendiri. Paling tidak, saya dapat mengatakan bahwa saya termasuk dalam kategori itu (yaitu saya kecewa karena menulis sampler sendiri bukan cara terbaik untuk melakukan sesuatu).

Juga, walaupun tidak masuk akal untuk menulis sampler Anda sendiri untuk analisis tunggal , akan lebih masuk akal untuk menulis kode Anda sendiri untuk kelas analisis. Menjadi bahwa JAG, Stan, dll. Adalah sampler kotak hitam, Anda selalu dapat membuat segalanya lebih cepat dengan mengkhususkan untuk model yang diberikan, meskipun jumlah peningkatan tergantung pada model. Tetapi menulis sampler yang sangat efisien dari bawah ke atas mungkin 10-1.000 jam kerja, tergantung pada pengalaman, kompleksitas model, dll. Jika Anda melakukan penelitian dalam metode Bayesian atau menulis perangkat lunak statistik, itu bagus; itu pekerjaanmu. Tetapi jika bos Anda mengatakan, "Hei, Anda bisa menganalisis kumpulan data pengukuran berulang ini?" dan Anda menghabiskan 250 jam menulis sampler yang efisien, bos Anda cenderung kesal. Sebaliknya, Anda bisa menulis model ini di Stan dalam, katakanlah, 2 jam, dan memiliki 2 menit waktu berjalan alih-alih 1 menit waktu berjalan yang dicapai oleh sampler efisien.

Cliff AB
sumber
3
+1. Juga, Stan tidak secara langsung menangani beberapa masalah yang melibatkan distribusi diskrit, jadi Anda harus cukup tahu untuk mengintegrasikan ini yang tidak dengan sendirinya sederhana, sehingga mungkin menjadi kasus di mana pengguliran Anda sendiri dapat membantu. Saya percaya JAGS menangani kasus-kasus seperti itu secara langsung, jadi, jika Anda dapat memisahkan filosofi BUGS / JAGS dan Stan yang berbeda dalam pikiran Anda, sebaiknya beralih saja di antara mereka.
Wayne
Selain itu, Stan dapat memiliki masalah di mana metrik Euclidean diagonal tidak cocok dengan geometri posterior; ini adalah kasus antara lain ketika hanya ada daerah sempit, berbentuk aneh dari posterior yang memiliki banyak kemungkinan. Hasilnya adalah mengambil sampel posterior itu seperti mencoba mengendarai sepeda di sepanjang tepi tebing: Anda mungkin "jatuh" jika Anda salah belok!
Sycorax berkata Reinstate Monica
2
+1. Rekomendasi umum saya kepada siswa adalah menuliskannya di JAGS. Jika itu tidak bekerja dengan baik, maka kode itu di Stan. Jika itu tidak berhasil, maka mulailah menulis sampler Anda sendiri. Ada juga model tertentu, misalnya model spasial, di mana Anda mungkin ingin menggunakan BUGS. Dan model tertentu, misalnya model ruang-ruang non-Gaussian, tempat Anda ingin menggunakan NIMBLE. Biaya peluang memulai dengan menulis sampler Anda sendiri terlalu tinggi.
jaradniemi
Saya tidak mengerti kasus "waktu nyata" - jika mungkin untuk memiliki sampler "siap" mengapa tidak mudah menggunakan model Stan yang sudah dikompilasi? Saya juga bertanya-tanya apakah MCMC cukup cepat untuk aplikasi waktu nyata.
Juho Kokkala
1
Dan saya tidak cukup akrab dengan Stan untuk mengetahui apa yang sebenarnya membutuhkan kompilasi model baru, tetapi tidak terlalu sulit untuk membayangkan bahwa apa pun batasannya, ada model dinamis sehingga ketika data baru masuk, model akan menjadi lebih kompleks dan kompilasi ulang akan diperlukan. Saya pikir metode non-parametrik (di mana ruang parameter tumbuh dengan ukuran sampel) akan cocok dengan kriteria itu? Tapi mungkin ada cara pintar untuk menyiasatinya.
Cliff AB
6

Pertanyaan ini terutama didasarkan pada pendapat, tetapi saya pikir ada cukup di sini menuliskan jawaban. Mungkin ada banyak alasan untuk mengkode sampler sendiri untuk masalah penelitian. Ini beberapa di antaranya

  1. Proposal: Seperti yang disarankan fcop dalam komentar mereka, jika sampelnya adalah MH, maka pengodean sampler Anda sendiri memungkinkan Anda bermain-main dengan distribusi proposal untuk mendapatkan sampler pencampuran terbaik.

  2. Fleksibilitas: Program bawaan mungkin tidak memberikan Anda fleksibilitas yang Anda inginkan. Anda mungkin ingin memulai dengan nilai acak tertentu, atau menggunakan struktur benih tertentu.

  3. Memahami: Pengodean sampler Anda sendiri membantu Anda memahami perilaku sampler, memberikan wawasan tentang proses rantai Markov. Ini berguna bagi seorang peneliti yang sedang mengerjakan masalah.

  4. Tanggung jawab: Jika data di mana saya membuat semua inferensi Bayesian saya berasal dari program yang tidak saya kode, maka tanggung jawab pada inferensi tidak lagi pada saya. Sebagai seorang peneliti, saya ingin bertanggung jawab penuh atas metode / hasil yang saya sajikan. Menggunakan metode bawaan tidak memungkinkan Anda melakukan itu.

Mungkin ada lebih banyak alasan, tetapi ini adalah empat yang membuat saya membuat kode samplers sendiri.

Greenparker
sumber
6
Saya akan mengatakan bahwa alasan "kepercayaan" dapat diperdebatkan: Stan adalah open-source dan memiliki banyak kontributor, sehingga banyak orang telah melihat kode sumbernya dan karenanya tidak mungkin memiliki bug yang serius. Di sisi lain, jika Anda melakukannya sendiri, Anda selalu dapat mengabaikan bug yang Anda buat - dan semua orang membuat bug itu hanya masalah jumlah baris kode yang Anda tulis ...
Tim
@Tim saya setuju. Saya telah mengubah poin itu untuk mencerminkan apa yang ingin saya katakan. Terima kasih.
Greenparker
5
+1 untuk argumen Memahami. Namun, argumen Onus tampaknya agak berlebihan. Hampir semua yang Anda kode sendiri akan bergantung pada bahasa statistik orang lain, pustaka aljabar linier, generator angka acak, dll. Jadi 'mengambil tanggung jawab' adalah masalah derajat.
conjugateprior
@conjugateprior Sepenuhnya setuju. Itulah sebabnya jawaban saya tentang itu adalah orang pertama. Ini murni pendapat saya.
Greenparker
4

Saya memberi +1 pada jawaban Cliff AB. Untuk menambahkan sedikit berita gembira, jika Anda ingin bekerja di level yang lebih rendah tetapi tidak turun ke level code-everything-yourself, Anda harus mencari- cari paket LaplacesDemon . Penulis asli brilian, tetapi tampaknya telah turun dari grid, dan paket tersebut telah diambil alih oleh orang lain. (Ada di Github, saya percaya.)

Ini mengimplementasikan mengesankan jumlah algoritma yang digunakan dalam MCMC dan sketsa termasuk adalah layak dibaca bahkan jika Anda tidak menggunakan paket. Cukup banyak jenis sampler yang Anda baca, yang dimilikinya. Anda kode dengan cara yang berbeda dari BUGS / JAGS atau Stan, dan semuanya dalam R, tetapi sering kali itu sangat efisien sehingga kompetitif.

Wayne
sumber
1
Steker Shameless: Anda juga dapat menggunakan [nimble] (r-nimble.org) yang memungkinkan Anda untuk menyesuaikan MCMC Anda (yaitu menggunakan slice sampler untuk node ini, memblokir updater untuk grup node tersebut, dll.) Tanpa perlu menulis ulang samplers ini setiap saat. Dan Anda juga dapat menulis samplers Anda sendiri untuk diterapkan secara langsung! Pengungkapan: Saya dulu bekerja di proyek ini.
Cliff AB
@CliffAB: Kedengarannya mirip LaplacesDemon, jika Anda terbiasa dengan itu. Senang mendengarnya nimblejuga. Setidaknya saya akan mengunduhnya. (Meskipun beberapa sketsa LaplacesDemon mungkin layak diunduh bahkan jika Anda menggunakan gesit.) ... Ohhh, baru saja pergi ke halaman. Jika SMC-nya mudah digunakan, saya akan menjadi penggemar berat. Satu-satunya paket R yang saya lihat yang melakukan SMC sangat kompleks.
Wayne
@CliffAB: Wow, setelah membaca nimblesitus web, ini cukup mengesankan. Mengapa saya tidak pernah mendengarnya? Sepertinya pilihan yang bagus untuk orang yang terbiasa dengan bahasa pemodelan BUGS / JAGS. Tentu saja, mereka akan membuat perbandingan terbaik di situs web, tetapi saya masih menyukainya sejauh ini. (Kecuali bahwa dengan rstanarmdan brms, yang menggunakan Stan di bawah tenda, juara yang mudah digunakan adalah R.)
Wayne
itu masih sangat baru: v0.1 dirilis saya pikir lebih dari 2 tahun yang lalu? Dan SMC adalah motivator besar untuk proyek ini: PI telah melakukan banyak penerbitan pada filter partikel dan semakin kesal dengan menuliskannya dari awal setiap kali. Tapi saya sudah sedikit dengan pekerjaan saat ini untuk mengikuti apa keadaan sampler SMC saat ini; ketika saya pergi (hampir dua tahun lalu) kami baru saja membuat yang sangat primitif.
Cliff AB
1
Katakan saja makalah arXiv ini yang mungkin menarik bagi Anda.
Cliff AB