Eu sou novo na pesquisa estatística bayesiana. Ouvi de pesquisadores que pesquisadores bayesianos implementam melhor o MCMC por eles mesmos do que usando ferramentas como JAGS / Stan. Posso perguntar qual é o benefício de implementar o algoritmo MCMC por si mesmo (em linguagens "não muito rápidas" como R), exceto para fins de aprendizado?
13
Respostas:
Em geral, eu sugeriria fortemente não codificar seu próprio MCMC para uma análise bayesiana aplicada real. Isso é bastante trabalho e tempo e é muito provável que introduza bugs no código. Os samplers de caixa preta, como o Stan, já usam samplers muito sofisticados. Confie em mim, você não codificará um amostrador desse calibre apenas para uma análise!
Existem casos especiais em que isso não será suficiente. Por exemplo, se você precisasse fazer uma análise em tempo real (por exemplo, decisão do computador com base nos dados recebidos), esses programas não seriam uma boa ideia. Isso ocorre porque o Stan exige a compilação do código C ++, que pode levar consideravelmente mais tempo do que apenas a execução de um amostrador já preparado para modelos relativamente simples. Nesse caso, você pode escrever seu próprio código. Além disso, acredito que há casos especiais em que pacotes como Stan se saem muito mal, como os modelos de espaço de estados não gaussianos (divulgação completa: acredito que Stan se sai mal nesse caso, mas não sabe). Nesse caso, pode valer a pena implementar um MCMC customizado. Mas esta é a exceção, não a regra!
Para ser sincero, acho que a maioria dos pesquisadores que escrevem amostradores para uma única análise (e isso acontece, eu já vi) o faz porque eles gostam de escrever seus próprios amostradores. No mínimo, posso dizer que me enquadro nessa categoria (ou seja, estou decepcionado que escrever meu próprio amostrador não seja a melhor maneira de fazer as coisas).
Além disso, embora não faça sentido escrever seu próprio amostrador para uma única análise , pode fazer muito sentido escrever seu próprio código para uma classe de análises. Como os JAGs, Stan etc. são amostradores de caixa preta, você sempre pode acelerar as coisas se especializando em um determinado modelo, embora a quantidade de aprimoramento dependa do modelo. Mas escrever um amostrador extremamente eficiente desde o início é talvez de 10 a 1.000 horas de trabalho, dependendo da experiência, da complexidade do modelo etc. Se você está pesquisando métodos Bayesianos ou escrevendo software estatístico, tudo bem; é o seu trabalho. Mas se o seu chefe disser "Ei, você pode analisar esse conjunto de dados de medidas repetidas?" e você gasta 250 horas escrevendo um amostrador eficiente, é provável que seu chefe fique chateado. Por outro lado, você poderia escrever esse modelo em Stan em, digamos, 2 horas e ter 2 minutos de tempo de execução em vez do tempo de execução de 1 minuto alcançado pelo amostrador eficiente.
fonte
Esta questão é primariamente baseada em opiniões, mas acho que há o suficiente aqui. Escreva uma resposta. Pode haver muitas razões para codificar o amostrador de uma pessoa para um problema de pesquisa. Aqui estão alguns deles
Proposta: como o fcop sugeriu em seu comentário, se a amostra for MH, codificar seu próprio amostrador permite que você brinque com as distribuições de propostas para obter o melhor amostrador de mixagem.
Flexibilidade: Em programas criados, pode não dar a flexibilidade que você deseja. Você pode querer começar com um valor aleatório específico ou usar uma estrutura de semente específica.
Compreensão: codificar seu próprio amostrador ajuda a entender o comportamento do amostrador, fornecendo informações para o processo da cadeia de Markov. Isso é útil para um pesquisador que trabalha no problema.
Ônus: se os dados nos quais estou fazendo toda a minha inferência bayesiana vierem de um programa que não codifiquei, o ônus da inferência não estará mais em mim. Como pesquisador, gostaria de assumir total responsabilidade dos métodos / resultados que apresento. O uso de métodos embutidos não permite que você faça isso.
Provavelmente há mais razões, mas estas são as quatro que me fazem codificar meus próprios samplers.
fonte
Eu dei um +1 à resposta de Cliff AB. Para adicionar um pequeno detalhe, se você deseja trabalhar em um nível mais baixo, mas não no nível do código-tudo-você-mesmo, você deve procurar o pacote LaplacesDemon . O autor original foi brilhante, mas parece ter caído da grade, e o pacote foi adquirido por outra pessoa. (É no Github, eu acredito.)
Ele implementa um número impressionante de algoritmos usados no MCMC e as vinhetas incluídas valem a leitura, mesmo que você não use o pacote. Praticamente qualquer tipo de amostrador sobre o qual você leu. Você codifica de uma maneira diferente de BUGS / JAGS ou Stan, e está tudo em R, mas muitas vezes é tão eficiente que é competitivo.
fonte
LaplacesDemon
, se você estiver familiarizado com isso. Fico feliz em ouvir sobrenimble
também. Vou pelo menos fazer o download. (Embora as várias vinhetas do LaplacesDemon possam valer o download, mesmo que você use o ágil.) ... Ohhh, acabei de acessar a página. Se o SMC for fácil de usar, vou me tornar um grande fã. O único pacote R que vi que faz o SMC é terrivelmente complexo.nimble
site, é bastante impressionante. Por que nunca ouvi falar disso? Parece uma ótima opção para pessoas acostumadas à linguagem de modelagem BUGS / JAGS. Obviamente, eles farão as melhores comparações possíveis no site, mas ainda gosto até agora. (Excepto que comrstanarm
ebrms
, que utilizam Stan sob o capuz, o campeão facilidade de uso-em-R seria Stan.)