Pacote de software ideal para análise bayesiana

14

Eu queria saber qual pacote estatístico de software vocês recomendam para executar a inferência bayesiana.

Por exemplo, eu sei que você pode executar o openBUGS ou o winBUGS como autônomo ou também pode chamá-los de R. Mas o R também possui vários de seus próprios pacotes (MCMCPack, BACCO), que podem fazer análises bayesianas.

Alguém tem alguma sugestão sobre qual pacote de estatísticas bayesianas no R é melhor ou sobre outras alternativas (Matlab ou Mathematica?)

Os principais recursos que estou procurando comparar são desempenho, facilidade de uso, estabilidade e flexibilidade

BYS2
fonte
1
(1) Não acho que exista um pacote que possa ser considerado ótimo . (2) A análise bayesiana não inclui apenas amostragem. (3) Esses pacotes R são úteis para amostragem: Rtwalk , mcmc . Eles exigem apenas a programação do log-posterior, mas nenhum pacote é infalível. (4) É sabido que, sob programação apropriada: R<(Matlab,Python)<Cem termos de eficiência (ver, por exemplo, link ).
2
pontos justos, embora re: 4 - isso não seja necessariamente verdade se você incluir o tempo de desenvolvimento. Além disso, as soluções baseadas em R (em interface com o R ou em execução como pacotes R) normalmente usam C / C ++ para o código de amostragem.
user4733
@ user4733, as soluções baseadas em C ++ são 5 a 10 vezes mais rápidas que as variantes do BUGS e muito mais rápidas que as soluções R, veja minha resposta.
Curioso
pergunta semelhante: stats.stackexchange.com/q/9202/5509
Curioso

Respostas:

11

As variantes externas de BUGS são o padrão. Trabalhar no R pode ser conveniente, mas ficaria surpreso se esses pacotes fossem tão maduros e tivessem bom desempenho. Usar uma biblioteca que faça a ponte entre R e o programa externo geralmente é o compromisso mais comum.

Eu uso o combo jags / rjags (os jags podem ser considerados um dialeto de bugs). Eu não tentei as outras variantes de bugs, mas os relatórios que ouvi são de que o desempenho e a capacidade dos jags de lidar com problemas numéricos são um pouco melhores que as outras variantes de bugs. Acho os jags fáceis de usar, mas é claro que você precisa de algum conhecimento em análise de dados bayesiana para saber como usá-la.

user4733
fonte
Hmm ok obrigado pelo seu conselho! Então você acha que as variantes do BUGS são a maneira mais rápida de fazer análises bayesianas?
BYS2
4
Sim, mas leia um livro primeiro. A análise de dados bayesiana de Gelman é a canônica, embora a análise de dados bayesiana de Kruschke tenha uma barreira mais baixa à entrada (embora talvez não seja tão baixa quanto os filhotes nas capas sugerem).
user4733
7

Dentro das três variantes do BUGS (openBUGS / winBUGS, jags), os jags parecem ser os mais promissores quanto ao desenvolvimento futuro de recursos, e o openBUGS / winBUGS parece ser um projeto morto. No entanto, os jags ainda carecem de algumas sutilezas presentes no openBUGS / winBUGS (veja também aqui ). Por outro lado, o jags removeu algumas limitações presentes no WinBUGS, por exemplo:

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

A boa notícia é que, na maioria dos modelos, você pode executá-los em todas as 3 ferramentas com apenas poucas alterações, para que você possa mudar para outra ferramenta mais tarde sem muitos problemas (é o que eu faço).

No entanto, por algumas razões (por exemplo, falta de paralelismo e natureza do intérprete) , não é verdade que essas variantes do BUGS sejam a maneira mais rápida de fazer análises bayesianas! De fato, muito pelo contrário. Projetos BUGS são bons para testar e desenvolver modelos complicados em pequenos conjuntos de dados . Depois de desenvolver o modelo e precisar executá-lo repetidamente em grandes conjuntos de dados, é mais eficiente usar ferramentas diferentes.

Por exemplo, o CppBugs combo / rcpp é dito ser 5-10x mais rápido do que BUGS variantes. O princípio é que você basicamente compila seu modelo em um programa C ++, que roda muito mais rápido. Também dê uma olhada no blog de Dirk Eddelbuettel para o teste Rcpp - parece brutalmente rápido. Você também pode jogar com paralelismo.

Você também pode fazer computação paralela no WinBUGS usando bugsparallel .

Curioso
fonte
Oh wow, ok obrigado por todo o seu conselho, foi muito útil :)
BYS2
Você é bem vindo. Qual é a sua área de pesquisa? Se for ecologia, posso recomendar livros sobre análise bayesiana usando o WinBUGS em Population Ecology.
Curioso
interessante, existem referências sobre como o cppbugs se compara aos jags? Como jags é escrito em C ++, não é imediatamente óbvio o quanto a camada de interpretação implicaria.
user4733
2
Andrew gelman tem um projeto promissor chamado Stan ( mc-stan.org ), que basicamente é um dialeto de bugs que compila até c ++ e que parece muito rápido comparado aos bugs.
Rasmus Bååth
2
@ RasmusBååth Você deve fazer essa a sua própria resposta. Stanprovavelmente se tornará o software para os modelos bayesianos.
Ari B. Friedman