Progiciel optimal pour l'analyse bayésienne

14

Je me demandais quel progiciel statistique de logiciels recommandez-vous pour effectuer l'inférence bayésienne.

Par exemple, je sais que vous pouvez exécuter openBUGS ou winBUGS de manière autonome ou vous pouvez également les appeler à partir de R. Mais R a également plusieurs de ses propres packages (MCMCPack, BACCO) qui peuvent faire une analyse bayésienne.

Quelqu'un a-t-il des suggestions sur le meilleur package de statistiques bayésiennes dans R ou sur d'autres alternatives (Matlab ou Mathematica?)

Les principales caractéristiques que je cherche à comparer sont les performances, la facilité d'utilisation, la stabilité et la flexibilité

BYS2
la source
1
(1) Je ne pense pas qu'il existe un package qui puisse être considéré comme optimal . (2) L'analyse bayésienne n'inclut pas seulement l'échantillonnage. (3) Ces packages R sont utiles pour l'échantillonnage: Rtwalk , mcmc . Ils ne nécessitent que la programmation du log-posterior mais aucun package n'est infaillible. (4) Il est bien connu que, dans le cadre d'une programmation appropriée: R<(Matlab,Python)<Cen termes d'efficacité (voir par exemple le lien ).
2
points justes, bien que re: 4 - ce n'est pas nécessairement vrai si vous incluez le temps de développement. En outre, les solutions basées sur R (soit en interfaçant avec R soit en s'exécutant en tant que packages R) utilisent généralement C / C ++ pour le code d'échantillonnage.
user4733
@ user4733, les solutions basées sur C ++ sont 5 à 10 fois plus rapides que les variantes BUGS, et beaucoup plus rapides que les solutions R, voir ma réponse.
Curieux
question similaire: stats.stackexchange.com/q/9202/5509
Curieux

Réponses:

11

Les variantes externes de BUGS sont la norme. Travailler dans R peut être pratique, mais je serais surpris que ces packages soient aussi matures et performants. L'utilisation d'une bibliothèque qui relie R et le programme externe est généralement le compromis le plus courant.

J'utilise le combo jags / rjags (les jags peuvent être grossièrement considérés comme un dialecte de bugs). Je n'ai pas essayé les autres variantes de bogues, mais les rapports que j'ai entendus indiquent que les performances et la capacité de Jags à gérer les problèmes numériques sont un peu meilleures que les autres variantes de bogues. Je trouve les jags faciles à utiliser, mais bien sûr, vous avez besoin de connaissances en analyse de données bayésiennes pour savoir comment les utiliser.

user4733
la source
Hmm ok merci pour vos conseils! Vous pensez donc que les variantes de BUGS sont le moyen le plus rapide de faire une analyse bayésienne?
BYS2
4
Oui mais lisez d'abord un livre. L'analyse des données bayésiennes de Gelman est canonique, bien que l'analyse des données bayésiennes de Kruschke ait une barrière à l'entrée plus faible (bien que peut-être pas aussi basse que les chiots sur les couvertures le suggèrent).
user4733
7

Au sein des 3 variantes de BUGS (openBUGS / winBUGS, jags), les jags semblent être les plus prometteurs pour le développement futur des fonctionnalités, et openBUGS / winBUGS semblent être des projets morts. Cependant, jags manque encore de subtilités présentes dans openBUGS / winBUGS (regardez également ici ). D'autre part, jags a supprimé certaines limitations présentes dans WinBUGS, par exemple:

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))

La bonne nouvelle est qu'avec la plupart des modèles, vous pouvez les exécuter dans les 3 outils avec des modifications minimes, de sorte que vous pouvez passer à un autre outil plus tard sans trop de problèmes (c'est ce que je fais).

Cependant, pour certaines raisons (par exemple, le manque de parallélisme et la nature de l'interpréteur) , il n'est pas vrai que ces variantes de BUGS sont le moyen le plus rapide de faire une analyse bayésienne! En fait, tout le contraire. Les projets BUGS sont bons pour tester et développer des modèles complexes sur de petits ensembles de données . Une fois que vous avez développé le modèle et que vous devez l'exécuter à plusieurs reprises sur de grands ensembles de données, il est plus efficace d'utiliser différents outils.

Par exemple, le combo CppBugs / rcpp serait 5 à 10 fois plus rapide que les variantes de BUGS. Le principe est que vous compilez essentiellement votre modèle dans un programme C ++, qui s'exécute beaucoup plus rapidement. Jetez également un coup d'œil au blog de Dirk Eddelbuettel pour le test Rcpp - il a l'air extrêmement rapide. Vous pouvez également jouer avec le parallélisme.

Vous pouvez également effectuer un calcul parallèle dans WinBUGS en utilisant bugsparallel .

Curieuse
la source
Oh wow, ok merci pour tous vos conseils, c'était très utile :)
BYS2
Je vous en prie. Quel est votre domaine de recherche? Si c'est l'écologie, je peux recommander des livres sur l'analyse bayésienne en utilisant WinBUGS en Population Ecology.
Curieux
intéressant, existe-t-il des références sur la façon dont cppbugs se compare aux jags? Étant donné que jags est écrit en C ++, il n'est pas immédiatement évident de savoir combien de temps cela impliquerait.
user4733
2
Andrew gelman a un projet prometteur appelé Stan ( mc-stan.org ) qui est essentiellement un dialecte de bogues qui se compile en c ++ et qui semble vraiment rapide par rapport aux bogues.
Rasmus Bååth
2
@ RasmusBååth Vous devriez en faire sa propre réponse. Stanest susceptible de devenir le logiciel pour les modèles bayésiens.
Ari B. Friedman,