Ich bin neu in der Bayesian Statistics-Forschung. Ich habe von Forschern gehört, dass Bayesianische Forscher MCMC besser selbst implementieren als Tools wie JAGS / Stan. Darf ich fragen, was der Vorteil der Implementierung des MCMC-Algorithmus für sich selbst ist (in "nicht ganz schnellen" Sprachen wie R), außer zu Lernzwecken?
13
Antworten:
Im Allgemeinen würde ich dringend empfehlen , Ihr eigenes MCMC nicht für eine echte angewandte Bayes'sche Analyse zu codieren. Dies ist sowohl viel Arbeit als auch Zeit und führt sehr wahrscheinlich zu Fehlern im Code. Blackbox-Sampler wie Stan verwenden bereits sehr ausgefeilte Sampler. Vertrauen Sie mir, Sie werden keinen Sampler dieses Kalibers nur für eine Analyse codieren!
Es gibt Sonderfälle, in denen dies nicht ausreicht. Wenn Sie beispielsweise eine Analyse in Echtzeit durchführen müssen (dh eine Computerentscheidung basierend auf eingehenden Daten), sind diese Programme keine gute Idee. Dies liegt daran, dass Stan das Kompilieren von C ++ - Code erfordert, was erheblich mehr Zeit in Anspruch nehmen kann, als nur einen bereits vorbereiteten Sampler für relativ einfache Modelle auszuführen. In diesem Fall möchten Sie möglicherweise Ihren eigenen Code schreiben. Darüber hinaus glaube ich, dass es Sonderfälle gibt, in denen Pakete wie Stan sehr schlecht abschneiden, wie z. B. nicht-gaußsche Zustandsraummodelle (vollständige Offenlegung: Ich glaube, dass Stan in diesem Fall schlecht abschneidet, es aber nicht weiß). In diesem Fall kann es sich lohnen, eine benutzerdefinierte MCMC zu implementieren. Dies ist jedoch die Ausnahme, nicht die Regel!
Um ganz ehrlich zu sein, denke ich, dass die meisten Forscher, die Sampler für eine einzelne Analyse schreiben (und das habe ich auch schon gesehen), dies tun, weil sie gerne ihre eigenen Sampler schreiben. Zumindest kann ich sagen, dass ich in diese Kategorie falle (dh ich bin enttäuscht, dass das Schreiben eines eigenen Samplers nicht der beste Weg ist, Dinge zu tun).
Auch wenn es nicht sinnvoll ist, einen eigenen Sampler für eine einzelne Analyse zu schreiben, kann es durchaus sinnvoll sein, einen eigenen Code für eine Klasse von Analysen zu schreiben. Da es sich bei JAGs, Stan usw. um Black-Box-Sampler handelt, können Sie die Dinge immer schneller machen, indem Sie sich auf ein bestimmtes Modell spezialisieren, obwohl das Ausmaß der Verbesserung modellabhängig ist. Das Schreiben eines äußerst effizienten Samplers von Grund auf dauert je nach Erfahrung, Komplexität des Modells usw. 10 bis 1000 Stunden. Es ist dein Job. Aber wenn Ihr Chef sagt "Hey, können Sie diesen Datensatz mit wiederholten Messungen analysieren?" Wenn Sie 250 Stunden damit verbringen, einen effizienten Sampler zu schreiben, ist Ihr Chef wahrscheinlich verärgert. Im Gegensatz dazu hätten Sie dieses Modell in Stan beispielsweise in 2 Stunden schreiben und 2 Minuten Laufzeit anstelle der 1-minütigen Laufzeit des effizienten Samplers haben können.
quelle
Diese Frage ist in erster Linie meinungsbasiert, aber ich denke, es gibt genug, um hier eine Antwort aufzuschreiben. Es kann viele Gründe geben, den eigenen Sampler für ein Forschungsproblem zu codieren. Hier sind einige davon
Vorschlag: Wie in den Kommentaren von fcop vorgeschlagen, können Sie, wenn das Sample MH ist, mit Ihrem eigenen Sampler spielen, um den besten Mixing-Sampler zu erhalten.
Flexibilität: In erstellten Programmen erhalten Sie möglicherweise nicht die gewünschte Flexibilität. Möglicherweise möchten Sie mit einem bestimmten Zufallswert beginnen oder eine bestimmte Ausgangsstruktur verwenden.
Verstehen: Das Codieren Ihres eigenen Samplers hilft Ihnen, das Verhalten des Samplers zu verstehen, und gibt Einblicke in den Markov-Kettenprozess. Dies ist nützlich für einen Forscher, der an dem Problem arbeitet.
Onus: Wenn die Daten, für die ich alle meine Bayesianischen Schlussfolgerungen mache, aus einem Programm stammen, das ich nicht codiert habe, dann liegt die Inferenzlast nicht mehr bei mir. Als Forscher möchte ich die Verantwortung für die von mir vorgelegten Methoden / Ergebnisse übernehmen. Mit eingebauten Methoden können Sie das nicht tun.
Es gibt wahrscheinlich noch mehr Gründe, aber diese vier lassen mich meine eigenen Sampler codieren.
quelle
Ich habe der Antwort von Cliff AB +1 gegeben. Um einen kleinen Leckerbissen hinzuzufügen, sollten Sie sich nach dem LaplacesDemon- Paket umsehen, wenn Sie auf einer niedrigeren Ebene arbeiten möchten, aber nicht auf der Code-Alles-Selbst-Ebene . Der ursprüngliche Autor war brillant, scheint aber vom Raster gefallen zu sein, und das Paket wurde von jemand anderem übernommen. (Es ist auf Github, glaube ich.)
Es implementiert eine beeindruckende Anzahl von Algorithmen, die in MCMC verwendet werden, und die enthaltenen Vignetten sind auch dann lesenswert, wenn Sie das Paket nicht verwenden. So ziemlich jede Art von Sampler, über die Sie gelesen haben. Sie codieren anders als BUGS / JAGS oder Stan, und es ist alles in R, aber oftmals ist es so effizient, dass es wettbewerbsfähig ist.
quelle
LaplacesDemon
, wenn Sie damit vertraut sind. Freut mich auch darüber zu hörennimble
. Ich werde es zumindest herunterladen. (Auch wenn der Download mehrerer LaplacesDemon-Vignetten wert sein könnte, selbst wenn Sie flinke verwenden.) ... Ohhh, bin gerade auf die Seite gegangen. Wenn der SMC einfach zu bedienen ist, werde ich ein großer Fan. Das einzige R-Paket, das ich bei SMC gesehen habe, ist schrecklich komplex.nimble
Website ist es ziemlich beeindruckend. Warum habe ich noch nie davon gehört? Es sieht nach einer großartigen Option für Leute aus, die an die BUGS / JAGS-Modellierungssprache gewöhnt sind. Natürlich werden sie die bestmöglichen Vergleiche auf der Website anstellen, aber es gefällt mir bis jetzt immer noch. (Abgesehen davon, dass mitrstanarm
undbrms
, die Stan unter der Haube verwenden, der Champion für die einfache Verwendung in R Stan sein würde.)