Jestem nowy w badaniach Bayesian Statistics. Słyszałem od badaczy, że badacze bayesowscy lepiej wdrażają MCMC samodzielnie, niż używając narzędzi takich jak JAGS / Stan. Czy mogę zapytać, jaka jest korzyść z samodzielnego wdrażania algorytmu MCMC (w „niezbyt szybkich” językach, takich jak R), z wyjątkiem celu uczenia się?
13
Odpowiedzi:
Ogólnie rzecz biorąc, zdecydowanie sugerowałbym, aby nie kodować własnego MCMC dla prawdziwej zastosowanej analizy bayesowskiej. Jest to zarówno praca, jak i czas, i bardzo prawdopodobne, że wprowadzą błędy w kodzie. Próbniki Blackbox, takie jak Stan, już używają bardzo wyrafinowanych samplerów. Zaufaj mi, nie kodujesz próbnika tego kalibru tylko dla jednej analizy!
Istnieją szczególne przypadki, w których nie będzie to wystarczające. Na przykład, gdybyś musiał przeprowadzić analizę w czasie rzeczywistym (tj. Decyzja komputera na podstawie przychodzących danych), te programy nie byłyby dobrym pomysłem. Wynika to z faktu, że Stan wymaga skompilowania kodu C ++, co może zająć znacznie więcej czasu niż uruchomienie już przygotowanego samplera dla stosunkowo prostych modeli. W takim przypadku możesz napisać własny kod. Ponadto uważam, że istnieją specjalne przypadki, w których pakiety takie jak Stan bardzo źle sobie radzą, takie jak niegaussowskie modele przestrzeni państwowej (pełne ujawnienie: wierzę , że Stan źle sobie radzi w tym przypadku, ale nie wiem). W takim przypadku warto wdrożyć niestandardową MCMC. Ale to wyjątek, nie reguła!
Szczerze mówiąc, myślę, że większość badaczy, którzy piszą samplery do pojedynczej analizy (a tak się dzieje, widziałem to), robi to, ponieważ lubią pisać własne samplery. Przynajmniej mogę powiedzieć, że należę do tej kategorii (tzn. Jestem rozczarowany, że pisanie własnego samplera nie jest najlepszym sposobem na robienie rzeczy).
Ponadto, chociaż nie ma sensu pisać własnego samplera do pojedynczej analizy , warto napisać własny kod dla klasy analiz. Ponieważ JAG, Stan itp. Są samplerami z czarnej skrzynki, zawsze możesz przyspieszyć, specjalizując się w danym modelu, chociaż ilość ulepszeń zależy od modelu. Ale napisanie od podstaw niezwykle wydajnego samplera to może 10–1 000 godzin pracy, w zależności od doświadczenia, złożoności modelu itp. Jeśli prowadzisz badania w metodach bayesowskich lub piszesz oprogramowanie statystyczne, to w porządku; to twoja praca. Ale jeśli twój szef powie „Hej, możesz przeanalizować zestaw danych z powtarzanymi pomiarami?” i spędzasz 250 godzin na pisaniu wydajnego samplera, twój szef prawdopodobnie będzie zdenerwowany. W przeciwieństwie do tego, mogłeś napisać ten model w Stanie, powiedzmy, w 2 godziny i miałeś 2 minuty czasu pracy zamiast 1 minuty czasu pracy osiągniętego przez wydajny sampler.
źródło
To pytanie opiera się głównie na opiniach, ale myślę, że tutaj jest wystarczająco dużo, aby zapisać odpowiedź. Może istnieć wiele powodów, aby kodować własny sampler pod kątem problemu badawczego. Tutaj jest kilka z nich
Propozycja: Jak sugeruje fcop w komentarzu, jeśli próbką jest MH, wówczas kodowanie własnego próbnika pozwala bawić się z rozkładami propozycji, aby uzyskać najlepszy próbnik miksowania.
Elastyczność: Wbudowane programy mogą nie zapewniać pożądanej elastyczności. Możesz zacząć od określonej losowej wartości lub użyć określonej struktury początkowej.
Zrozumienie: Kodowanie własnego próbnika pomaga zrozumieć jego zachowanie, dając wgląd w proces łańcucha Markowa. Jest to przydatne dla badacza pracującego nad problemem.
Onus: Jeśli dane, na których dokonuję wszystkich wniosków Bayesa, pochodzą z programu, którego nie kodowałem, to ciężar wnioskowania nie jest już dla mnie. Jako badacz chciałbym wziąć pełną odpowiedzialność za metody / wyniki, które przedstawiam. Korzystanie z wbudowanych metod nie pozwala na to.
Prawdopodobnie jest więcej powodów, ale te cztery sprawiają, że koduję własne samplery.
źródło
Dałem +1 odpowiedzi Cliff AB. Aby dodać jeden mały smakołyk, jeśli chcesz pracować na niższym poziomie, ale nie na poziomie kodu-wszystko-sam, powinieneś poszukać pakietu LaplacesDemon . Oryginalny autor był genialny, ale wydaje się, że spadł z planszy, a pakiet został przejęty przez kogoś innego. (Wydaje mi się, że jest na Githubie.)
Implementuje imponującą liczbę algorytmów używanych w MCMC, a dołączone winiety są warte przeczytania, nawet jeśli nie korzystasz z pakietu. Ma prawie każdy rodzaj samplera, o którym czytasz. Kodujesz w inny sposób niż BŁĘDY / JAGS lub Stan i wszystko jest w R, ale często jest tak wydajne, że jest konkurencyjne.
źródło
LaplacesDemon
, jeśli znasz się na tym. Miło mi to słyszećnimble
. Przynajmniej go pobiorę. (Chociaż wiele winiet LaplacesDemon może być warte pobrania, nawet jeśli używasz zwinnego.) ... Ohhh, po prostu poszedł na stronę. Jeśli jego SMC jest łatwy w użyciu, zostanę wielkim fanem. Jedyny pakiet R, który widziałem, który robi SMC, jest przerażająco złożony.nimble
internetowej robi wrażenie. Dlaczego nigdy o tym nie słyszałem? Wygląda to na świetną opcję dla osób przyzwyczajonych do języka modelowania BŁĘDY / JAGS. Oczywiście dokonają możliwie najlepszych porównań na stronie, ale do tej pory mi się podobało. (Z wyjątkiem tego, że zrstanarm
ibrms
, którzy używają Stana pod maską, mistrzem łatwości użycia w R byłby Stan.)