Optymalny pakiet oprogramowania do analizy bayesowskiej

14

Zastanawiałem się, jaki pakiet statystyczny oprogramowania polecacie do przeprowadzania wnioskowania bayesowskiego.

Na przykład wiem, że możesz uruchamiać openBUGS lub winBUGS jako standalones lub też możesz wywoływać je z R. Ale R ma również kilka własnych pakietów (MCMCPack, BACCO), które mogą wykonywać analizę bayesowską.

Czy ktoś ma jakieś sugestie co do tego, który pakiet statystyk bayesowskich w R jest najlepszy, lub o innych alternatywach (Matlab lub Mathematica?)

Główne cechy, które chcę porównać, to wydajność, łatwość użycia, stabilność i elastyczność

BYS2
źródło
1
(1) Nie sądzę, aby istniał pakiet, który można by uznać za optymalny . (2) Analiza bayesowska obejmuje nie tylko pobieranie próbek. (3) Te pakiety R są przydatne do próbkowania: Rtwalk , mcmc . Wymagają jedynie zaprogramowania log-posterior, ale żaden pakiet nie jest nieomylny. (4) Dobrze wiadomo, że przy odpowiednim programowaniu: R<(Matlab,Python)<Cpod względem wydajności (patrz np. Link ).
2
uczciwe punkty, choć dotyczy to: 4 - niekoniecznie jest to prawdą, jeśli uwzględnisz czas rozwoju. Ponadto rozwiązania oparte na R (współpracujące z R lub działające jako pakiety R) zwykle używają C / C ++ do kodu próbkowania.
user4733
@ user4733, rozwiązania oparte na C ++ są 5-10 razy szybsze niż warianty BŁĘDÓW i znacznie szybsze niż rozwiązania R, zobacz moją odpowiedź.
Ciekawy
podobne pytanie: stats.stackexchange.com/q/9202/5509
Curious

Odpowiedzi:

11

Warianty BŁĘDÓW zewnętrznych są standardem. Praca w R może być wygodna, ale zdziwiłbym się, gdyby te pakiety były tak dojrzałe i działały równie dobrze. Korzystanie z biblioteki łączącej R i program zewnętrzny jest zwykle najczęstszym kompromisem.

Używam kombinacji jags / rjags (jags można z grubsza uznać za dialekt błędów). Nie wypróbowałem innych wariantów błędów, ale raporty, które słyszałem, mówią, że wydajność i zdolność radzenia sobie z numerycznymi problemami jest nieco lepsza niż w przypadku innych wariantów błędów. Uważam, że jags są łatwe w użyciu, ale oczywiście potrzebujesz wiedzy na temat analizy danych bayesowskich, aby wiedzieć, jak z nich korzystać.

użytkownik4733
źródło
Hmm ok dzięki za radę! Uważasz więc, że warianty BŁĘDÓW są najszybszym sposobem na przeprowadzenie analizy bayesowskiej?
BYS2
4
Tak, ale najpierw przeczytaj książkę. Analiza danych bayesowskich Gelmana jest kanoniczna, chociaż przeprowadzanie analizy danych bayesowskich przez Kruschke ma niższą barierę wejścia (choć być może nie tak niskie, jak sugerują szczenięta na okładkach).
user4733
7

Spośród 3 wariantów BŁĘDÓW (openBUGS / winBUGS, jags) jags wydaje się najbardziej obiecujący, jeśli chodzi o przyszły rozwój funkcji, a openBUGS / winBUGS wydają się martwymi projektami. Jednak w jags wciąż brakuje pewnych subtelności obecnych w openBUGS / winBUGS (patrz również tutaj ). Z drugiej strony, jags usunął pewne ograniczenia obecne w WinBUGS, np .:

x ~ dnorm(0, tau) 
tau ~ dgamma(1.0E-3, 1.0E-3) # in WinBUGS, you cannot do this, 1.0E-3 is too small 
                             # for dgamma (use e.g. dgamma(0.01, 0.01))

Dobrą wiadomością jest to, że w większości modeli można je uruchamiać we wszystkich 3 narzędziach przy minimalnych zmianach, dzięki czemu można później bez problemu przełączać się na inne narzędzia (to właśnie robię).

Jednak z niektórych powodów (np. Brak paralelizmu i natury interpretera) nie jest prawdą, że te warianty BŁĘDÓW są najszybszym sposobem na analizę bayesowską! W rzeczywistości, wręcz przeciwnie.Projekty BUGS dobrze sprawdzają się i opracowują skomplikowane modele na małych zestawach danych . Po opracowaniu modelu i konieczności jego wielokrotnego uruchamiania na dużych zestawach danych bardziej efektywne jest używanie różnych narzędzi.

Na przykład mówi się, że kombinacja CppBugs / rcpp jest 5-10 razy szybsza niż warianty BŁĘDÓW. Zasadą jest, że w zasadzie kompilujesz swój model w programie C ++, który działa znacznie szybciej. Zobacz także blog Dirka Eddelbuettela dotyczący testu Rcpp - wygląda brutalnie szybko. Możesz także grać z równoległością.

Możesz także wykonać obliczenia równoległe w WinBUGS, używając bugsparallel .

Ciekawy
źródło
Och, wow, ok dzięki za wszystkie porady, to było bardzo przydatne :)
BYS2
Zapraszamy. Jaki jest twój obszar badań? Jeśli jest to ekologia, mogę polecić książki na temat analizy bayesowskiej za pomocą WinBUGS w Population Ecology.
Ciekawy
ciekawe, czy istnieją odniesienia do porównania cppbugs z jags? Ponieważ jags jest napisany w C ++, nie jest od razu oczywiste, ile pociągnęłoby za sobą warstwa interpretacyjna.
user4733,
2
Andrew Gelman ma obiecujący projekt o nazwie Stan ( mc-stan.org ), który w zasadzie jest dialektem błędów, który kompiluje się do c ++ i który wydaje się naprawdę szybki w porównaniu do błędów.
Rasmus Bååth,
2
@ RasmusBååth Powinieneś zrobić własną odpowiedź. Stanprawdopodobnie stanie się oprogramowaniem dla modeli bayesowskich.
Ari B. Friedman