MCMC yapmak: jags / stan kullanın veya kendim uygulayın


13

Bayesian İstatistik araştırmasında yeniyim. Araştırmacılardan Bayes araştırmacılarının MCAGS / Stan gibi araçlar kullanmak yerine MCMC'yi daha iyi uyguladıklarını duydum. Öğrenme amacı dışında, MCMC algoritmasının kendi başına (R gibi "oldukça hızlı" olmayan dillerde) uygulanmasının faydasını sorabilir miyim?


O zaman kendi teklif dağıtımınızı kendiniz seçebildiğiniz için, Markov Zinciri'nin bundan kaynaklanan posterior ile mümkün olduğunca hızlı birleşeceği şekilde seçmelisiniz.

Teşekkürler! Tek sebep bu mu?
user112758

4
Uygulamalar için kullanarak daha fazla Bayes öğrenmek isteyen uygulamalı bir araştırmacıysanız, JAGS veya Stan ile başlayıp 'ihtiyacınız' olduğunu fark ederseniz kendi MCMC'nizi yazmaya geçmenizi tavsiye ederim. JAGS ve Stan'in biraz farklı güçlü yönleri ve sınırlamaları olduğunu unutmayın.
konjugateprior

Teşekkürler! Evet, uygulamalı araştırma yapıyorum. Bana JAGS ve Stan'in sınırlamaları hakkında daha fazla bilgi verir misiniz? Ben ilk Stan denedim, ama ben sadece "online izleme" veya "yakınsama kadar" özellikleri veya eklentileri olmadığını buldum --- bu can sıkıcı, şimdi JAGS deneyebilirsiniz.
user112758

Yanıtlar:


26

Genel olarak, şiddetle öneririm değil gerçek Bayes analizi uygulanmış için kendi MCMC kodlama. Bu hem iyi bir çalışma hem de zaman ve kodda hatalar getirme olasılığı çok yüksektir. Stan gibi Blackbox örnekleyicileri zaten çok sofistike örnekleyicileri kullanıyor. Güven bana, bu kalibreden bir örnekleyiciyi sadece bir analiz için kodlamayacaksınız!

Bunun yeterli olmayacağı özel durumlar vardır. Örneğin, gerçek zamanlı olarak bir analiz yapmanız gerekiyorsa (örneğin, gelen verilere dayalı bilgisayar kararı), bu programlar iyi bir fikir olmaz. Bunun nedeni, Stan'in nispeten basit modeller için önceden hazırlanmış bir örnekleyiciyi çalıştırmaktan çok daha fazla zaman alabilen C ++ kodunun derlenmesini gerektirmesidir. Bu durumda, kendi kodunuzu yazmak isteyebilirsiniz. Buna ek olarak, Stan gibi paketlerin Gauss olmayan durum alanı modelleri gibi çok kötü işlediği özel durumlar olduğuna inanıyorum (tam açıklama: Stan'in bu durumda kötü işlediğine inanıyorum , ancak bilmiyorum). Bu durumda, özel bir MCMC'nin uygulanması buna değebilir. Ancak bu bir istisna, kural değil!

Dürüst olmak gerekirse, tek bir analiz için örnekleyici yazan çoğu araştırmacı (ve bu gerçekleşti, gördüm) bunu yapıyor çünkü kendi örnekleyicilerini yazmaktan hoşlanıyorlar. En azından, bu kategoriye girdiğimi söyleyebilirim (yani kendi örnekleyicimi yazmanın bir şeyler yapmanın en iyi yolu olmadığını hayal kırıklığına uğrattım).

Ayrıca, tek bir analiz için kendi örnekleyicinizi yazmak mantıklı olmasa da, bir analiz sınıfı için kendi kodunuzu yazmak çok mantıklı olabilir. JAG'ların, Stan'in, vb. Kara kutu örnekleyicileri olduğu için, iyileştirme miktarı modele bağlı olmasına rağmen, belirli bir model için uzmanlaşarak işleri daha hızlı hale getirebilirsiniz. Ancak son derece verimli bir örnekleyici yazmak, deneyime, model karmaşıklığına vb. Bağlı olarak belki 10-1.000 saattir. Bayesian yöntemlerinde araştırma yapıyorsanız veya istatistiksel yazılım yazıyorsanız, sorun değil; bu senin işin. Ancak patronunuz "Hey, bu tekrarlanan ölçüm veri setini analiz edebilir misiniz?" ve etkili bir örnekleyici yazmak için 250 saat harcıyorsanız, patronunuz muhtemelen üzülecektir. Buna karşılık, bu modeli Stan'de, örneğin 2 saat içinde yazmış olabilirsiniz ve verimli örnekleyicinin elde ettiği 1 dakikalık çalışma süresi yerine 2 dakikalık çalışma süresine sahip olabilirsiniz.


3
+1. Ayrıca Stan, ayrık dağılımları içeren bazı problemleri doğrudan ele almaz, bu yüzden kendi içinde basit olmayan bunları entegre etmek için yeterince bilmek zorundasınız, bu da kendi yuvarlanmanızın yardımcı olabileceği bir durum olabilir. JAGS'ın bu tür vakaları doğrudan ele aldığına inanıyorum, bu yüzden HATA / JAGS ve Stan'in farklı felsefelerini zihninizde ayrı tutarsanız, aralarında geçiş yapmak en iyisi olacaktır.
Wayne

Dahası, Stan, çapraz Öklid metriğinin posteriorun geometrisine uygun olmadığı durumlarda sorun yaşayabilir; bu, diğerlerinin yanı sıra , posteriorun çok olasılıklı olan dar, garip şekilli bir bölgesi olduğunda durumdur . Sonuç posterior örnekleme bir uçurumun kenarında bisiklet sürmeye çalışmak gibi: yanlış bir dönüş alırsanız "düşebilir" olabilir!
Sycorax, Reinstate Monica'ya

2
+1. Öğrencilere genel tavsiyem JAGS'ta kodlamak. Bu işe yaramazsa, Stan. Bu işe yaramazsa, kendi örnekleyicinizi yazmaya başlayın. HATALAR kullanmak isteyebileceğiniz belirli modeller, örneğin mekansal modeller de vardır. Ve NIMBLE kullanmak istediğiniz Gauss olmayan durum uzayı modelleri gibi bazı modeller. Kendi örnekleyicinizi yazarak başlamanın fırsat maliyeti çok yüksektir.
jaradniemi

"Gerçek zamanlı" davayı anlamıyorum - eğer "önceden hazırlanmış" kendi örnekleyicisine sahip olmak mümkünse, derlenmiş bir Stan modelini kullanmak neden bu kadar kolay değildir? Ayrıca herhangi bir MCMC'nin gerçek zamanlı uygulamalar için yeterince hızlı olup olmadığını merak ediyorum.
Juho Kokkala

1
Ve yeni modelleri derlemenin tam olarak neyi gerektirdiğini bilmek için Stan'e yeterince aşina değilim, ancak kısıtlama ne olursa olsun, yeni veriler geldikçe, modelin daha karmaşık hale geleceği dinamik bir model var. ve bu yüzden yeniden derleme gerekli olacaktır. Ben parametrik olmayan yöntemler (hangi parametre alanı örnek boyutu ile büyür) bu kriterlere uygun olacağını düşünüyorum? Ama bunun üstesinden gelmenin akıllı yolları olabilir.
Cliff AB

6

Bu soru öncelikle görüş temelli, ancak bence burada bir cevap yazmak için yeterli. Bir kişinin örnekleyicisini bir araştırma problemi için kodlamak için birçok neden olabilir. Bunlardan bazıları

  1. Öneri: Yorumlarında önerildiği gibi, örnek MH ise, kendi örnekleyicinizi kodlamak, en iyi karıştırma örnekleyicisini almak için teklif dağılımlarıyla oynamanıza izin verir.

  2. Esneklik: Dahili programlarda size istediğiniz esnekliği vermeyebilir. Belirli bir rastgele değerden başlamak veya belirli bir tohum yapısı kullanmak isteyebilirsiniz.

  3. Anlama: Kendi örnekleyicinizi kodlamak, örnekleyicinin davranışını anlamanıza yardımcı olur ve Markov zincir sürecine ilişkin bilgiler verir. Bu sorun üzerinde çalışan bir araştırmacı için yararlıdır.

  4. Onus: Tüm Bayesian çıkarımımı yaptığım veriler kodlamadığım bir programdan geliyorsa, çıkarımdaki onus artık bende değil. Bir araştırmacı olarak, sunduğum yöntemlerin / sonuçların tüm sorumluluğunu almak istiyorum. Yerleşik yöntemleri kullanmak bunu yapmanıza izin vermez.

Muhtemelen daha fazla neden var, ama bunlar kendi örnekleyicilerimi kodlamamı sağlayan dört.


6
"Güven" nedeninin tartışmasız olduğunu söyleyebilirim: Stan açık kaynaklıdır ve çok sayıda katılımcıya sahiptir, bu yüzden birden fazla kişi kaynak koduna baktı ve bu yüzden ciddi hatalara sahip olması olası değildir. Başka bir deyişle, kendiniz yaparsanız, yaptığınız hatayı her zaman göz ardı edebilirsiniz - ve herkes hata yapar, yazdığınız kod satırlarının sayısı meselesidir ...
Tim

@Zaman katılıyorum. Bu noktayı söylemeye çalıştığım şeyi yansıtacak şekilde değiştirdim. Teşekkürler.
Greenparker

5
Anlama argümanı için +1. Ancak, Onus argümanı biraz abartılmış görünüyor. Kendiniz kodladığınız hemen hemen her şey, bir başkasının istatistiksel diline, doğrusal cebir kütüphanesine, rasgele sayı üretecine, vb.
konjugateprior

@conjugateprior Kesinlikle katılıyorum. Bu yüzden benim cevabım ilk kişiydi. Bu tamamen benim fikrimdi.
Greenparker

4

Cliff AB'nin cevabına +1 verdim. Küçük bir tidbit eklemek için, daha düşük bir seviyede çalışmak istiyorsanız, ancak kod-her şey-kendiniz düzeyine inmek istemiyorsanız , LaplacesDemon paketi için etrafta dolaşmalısınız . Orijinal yazar harikaydı, ancak ızgaradan düşmüş gibi görünüyor ve paket başka biri tarafından devralındı. (Sanırım Github'da.)

MCMC'de kullanılan etkileyici sayıda algoritma uygular ve paketi kullanmasanız bile dahil edilen vinyetlerin okunmaya değer. Hakkında okuduğunuz hemen hemen her türlü örnekleyici var. BUGS / JAGS veya Stan'den farklı bir şekilde kod yazarsınız ve hepsi R'dir, ancak çoğu zaman rekabetçi olduğu kadar etkilidir.


1
Utanmaz fiş: ayrıca, yeniden yazmaya gerek kalmadan MCMC'nizi özelleştirmenize izin veren [nimble] (r-nimble.org) kullanabilirsiniz (yani bu düğüm için bir dilim örnekleyici, bu düğüm grubu için güncelleyiciyi engelleyin vb.) bu örnekleyicileri her zaman. Ayrıca doğrudan uygulanacak kendi örnekleyicilerinizi de yazabilirsiniz! Açıklama: Bu proje üzerinde çalışıyordum.
Cliff AB

@CliffAB: Buna benzer LaplacesDemon, kulağa aşina iseniz. Duyduğuma sevindim nimble. En azından indireceğim. (Rağmen birden fazla LaplacesDemon vinyetlerin çevik kullansanız bile indirmeye değer olabilir.) ... Ohhh, sadece sayfaya gitti. SMC'nin kullanımı kolaysa, büyük bir hayran olacağım. SMC yapan gördüğüm tek R paketi korkunç derecede karmaşık.
Wayne

@CliffAB: Vay be, nimbleweb sitesini okuduktan sonra oldukça etkileyici. Neden hiç duymadım? HATA / JAGS modelleme diline alışmış insanlar için harika bir seçenek gibi görünüyor. Tabii ki, web sitesinde mümkün olan en iyi karşılaştırmaları yapacaklar, ancak yine de çok hoşuma gidiyor. (O Aşağıdakiler hariç rstanarmve brmsbaşlık altında Stan'i kullanan, kolaylığı kullanım-içinde-R Champion stan olacaktır.)
Wayne

hala çok yeni: v0.1 yayınlandı Bence 2 yıldan fazla bir süre önce? Ve SMC proje için büyük bir motivasyon kaynağıydı: PI, parçacık filtreleri üzerinde önemli miktarda yayın yaptı ve her seferinde sıfırdan yazmaktan rahatsız oluyordu. Ama SMC örnekleyicilerinin şu anki durumlarına ayak uydurmak için şu anki çalışmalarımda biraz çalıştım; ayrıldığımda (neredeyse iki yıl önce) çok ilkel bir tanesini bir araya getirmiştik.
Cliff AB

1
İlginizi çekebilecek bu arXiv belgesini söyleyin.
Cliff AB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.