Paquete de software óptimo para el análisis bayesiano

14

Me preguntaba qué paquete estadístico de software recomiendan ustedes para realizar la Inferencia Bayesiana.

Por ejemplo, sé que puede ejecutar openBUGS o winBUGS como independientes o también puede llamarlos desde R. Pero R también tiene varios de sus propios paquetes (MCMCPack, BACCO) que pueden hacer análisis bayesianos.

¿Alguien tiene alguna sugerencia sobre qué paquete de estadísticas bayesianas en R es mejor o sobre otras alternativas (Matlab o Mathematica?)

Las principales características que estoy buscando comparar son rendimiento, facilidad de uso, estabilidad y flexibilidad.

BYS2
fuente
1
(1) No creo que haya un paquete que pueda calificar como óptimo . (2) El análisis bayesiano no solo incluye muestreo. (3) Estos paquetes R son útiles para el muestreo: Rtwalk , mcmc . Solo requieren programar el log-posterior pero ningún paquete es infalible. (4) Es bien sabido que, bajo la programación adecuada: R<(Matlab,Python)<Cen términos de eficiencia (ver, por ejemplo, enlace )
2
puntos justos, aunque re: 4: esto no es necesariamente cierto si incluye el tiempo de desarrollo. Además, las soluciones basadas en R (ya sea interactuando con R o ejecutándose como paquetes R) generalmente usan C / C ++ para el código de muestreo.
usuario4733
@ user4733, las soluciones basadas en C ++ son 5-10 veces más rápidas que las variantes BUGS, y mucho más rápido que las soluciones R, vea mi respuesta.
Curioso
pregunta similar: stats.stackexchange.com/q/9202/5509
Curioso

Respuestas:

11

Las variantes de ERRORES externos son el estándar. Trabajar dentro de R puede ser conveniente, pero me sorprendería si esos paquetes son tan maduros y funcionan tan bien. El uso de una biblioteca que une R y el programa externo suele ser el compromiso más común.

Utilizo el combo jags / rjags (los jags podrían considerarse aproximadamente un dialecto de errores). No he probado las otras variantes de errores, pero los informes que he escuchado son que el rendimiento y la capacidad de jags para lidiar con problemas numéricos es un poco mejor que las otras variantes de errores. Encuentro que los jags son fáciles de usar, pero, por supuesto, necesita algún conocimiento del análisis de datos bayesianos para saber cómo usarlo.

usuario4733
fuente
Hmm ok gracias por tu consejo! ¿Entonces cree que las variantes de BUGS son la forma más rápida de hacer análisis bayesianos?
BYS2
44
Sí, pero primero lea un libro. El análisis de datos bayesianos de Gelman es el canónico, aunque Kruschke hace análisis de datos bayesianos tiene una barrera de entrada más baja (aunque tal vez no tan bajo como sugieren los cachorros en las portadas).
user4733
7

Dentro de las 3 variantes de BUGS (openBUGS / winBUGS, jags), jags parece ser el más prometedor para el futuro desarrollo de características, y openBUGS / winBUGS parecen ser proyectos muertos. Sin embargo, a jags todavía le faltan algunas bondades presentes en openBUGS / winBUGS (también mire aquí ). Por otro lado, jags ha eliminado algunas limitaciones presentes en WinBUGS, por ejemplo:

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 buena noticia es que con la mayoría de los modelos, puede ejecutarlos en las 3 herramientas con solo cambios mínimos, por lo que puede cambiar a una herramienta diferente más tarde sin muchos problemas (eso es lo que hago).

Sin embargo, por algunas razones (por ejemplo, falta de paralelismo y naturaleza de intérprete) , ¡no es cierto que estas variantes de BUGS sean la forma más rápida de hacer análisis bayesianos! De hecho, todo lo contrario. Los proyectos de BUGS son buenos para probar y desarrollar modelos complicados en pequeños conjuntos de datos . Una vez que haya desarrollado el modelo y necesite ejecutarlo repetidamente en grandes conjuntos de datos, es más eficiente utilizar diferentes herramientas.

Por ejemplo el se dice que el combo CppBugs / rcpp es 5-10 veces más rápido que las variantes BUGS. El principio es que básicamente compilas tu modelo en un programa C ++, que se ejecuta mucho más rápido. También eche un vistazo al blog de Dirk Eddelbuettel para la prueba Rcpp : se ve brutalmente rápido. También puedes jugar con paralelismo.

También puede hacer cálculos paralelos en WinBUGS usando bugsparallel .

Curioso
fuente
Oh wow, ok, gracias por todos tus consejos, fue muy útil :)
BYS2
De nada. ¿Cuál es su área de investigación? Si se trata de ecología, puedo recomendar libros sobre análisis bayesiano con WinBUGS en Population Ecology.
Curioso
interesante, ¿hay referencias sobre cómo cppbugs se compara con jags? Como jags está escrito en C ++, no es obvio de inmediato cuánto sobrecargaría la capa de interpretación.
user4733
2
Andrew Gelman tiene un proyecto prometedor llamado Stan ( mc-stan.org ) que básicamente es un dialecto de errores que se compila en c ++ y que parece realmente rápido en comparación con los errores.
Rasmus Bååth
2
@ RasmusBååth Debe hacer que sea su propia respuesta. Stanes probable que se convierta en la pieza de software para los modelos bayesianos.
Ari B. Friedman