Soy nuevo en la investigación de estadísticas bayesianas. Escuché de los investigadores que los investigadores bayesianos implementan mejor MCMC por sí mismos en lugar de usar herramientas como JAGS / Stan. ¿Puedo preguntar cuál es el beneficio de implementar el algoritmo MCMC por sí mismo (en un lenguaje "no bastante rápido" como R), excepto para fines de aprendizaje?
13
Respuestas:
En general, sugeriría no codificar su propio MCMC para un análisis bayesiano real aplicado. Esto es una buena cantidad de trabajo y tiempo, y es muy probable que introduzca errores en el código. Los muestreadores de Blackbox, como Stan, ya usan muestreadores muy sofisticados. Confía en mí, ¡no codificarás una muestra de este calibre solo para un análisis!
Hay casos especiales en los que esto no será suficiente. Por ejemplo, si necesita hacer un análisis en tiempo real (es decir, la decisión de la computadora basada en los datos entrantes), estos programas no serían una buena idea. Esto se debe a que Stan requiere compilar código C ++, lo que puede llevar mucho más tiempo que simplemente ejecutar una muestra ya preparada para modelos relativamente simples. En ese caso, es posible que desee escribir su propio código. Además, creo que hay casos especiales en los que los paquetes como Stan funcionan muy mal, como los modelos de espacio de estado no gaussianos (divulgación completa: creo Stan lo hace mal en este caso, pero no lo sé). En ese caso, puede valer la pena implementar un MCMC personalizado. ¡Pero esta es la excepción, no la regla!
Para ser sincero, creo que la mayoría de los investigadores que escriben muestreadores para un solo análisis (y esto sucede, lo he visto) lo hacen porque les gusta escribir sus propios muestreadores. Como mínimo, puedo decir que pertenezco a esa categoría (es decir, estoy decepcionado de que escribir mi propia muestra no sea la mejor manera de hacer las cosas).
Además, si bien no tiene sentido escribir su propia muestra para un solo análisis , puede tener mucho sentido escribir su propio código para una clase de análisis. Siendo que los JAG, Stan, etc. son muestreadores de caja negra, siempre puede acelerar las cosas especializándose para un modelo dado, aunque la cantidad de mejora depende del modelo. Pero escribir una muestra extremadamente eficiente desde cero es tal vez 10-1,000 horas de trabajo, dependiendo de la experiencia, la complejidad del modelo, etc. Si está investigando métodos Bayesianos o escribiendo software estadístico, está bien; es tu trabajo. Pero si su jefe dice "Oye, ¿puedes analizar este conjunto de datos de medidas repetidas?" y pasas 250 horas escribiendo una muestra eficiente, es probable que tu jefe esté molesto. En contraste, podría haber escrito este modelo en Stan en, digamos, 2 horas, y tener 2 minutos de tiempo de ejecución en lugar del tiempo de ejecución de 1 minuto logrado por el muestreador eficiente.
fuente
Esta pregunta se basa principalmente en la opinión, pero creo que aquí hay suficiente para escribir una respuesta. Podría haber muchas razones para codificar el muestreador propio para un problema de investigación. Éstos son algunos de ellos
Propuesta: como sugirió fcop en su comentario, si la muestra es MH, codificar su propia muestra le permite jugar con las distribuciones de propuestas para obtener la mejor muestra de mezcla.
Flexibilidad: en los programas integrados, es posible que no le brinde la flexibilidad que desea. Es posible que desee comenzar con un valor aleatorio específico o utilizar una estructura de semillas específica.
Comprensión: la codificación de su propia muestra le ayuda a comprender el comportamiento de la muestra, lo que le proporciona información sobre el proceso de la cadena de Markov. Esto es útil para un investigador que trabaja en el problema.
Onus: si los datos en los que estoy haciendo toda mi inferencia bayesiana provienen de un programa que no codifiqué, entonces la responsabilidad de la inferencia ya no depende de mí. Como investigador, me gustaría asumir toda la responsabilidad de los métodos / resultados que presento. El uso de métodos integrados no le permite hacer eso.
Probablemente haya más razones, pero estas son las cuatro que me hacen codificar mis propios muestreadores.
fuente
Le di un +1 a la respuesta de Cliff AB. Para agregar un pequeño bocado, si desea trabajar en un nivel inferior pero no en el nivel de código-todo-usted mismo, debe buscar el LaplacesDemon paquete . El autor original fue brillante, pero parece haberse salido de la red, y el paquete ha sido tomado por otra persona. (Está en Github, creo).
Implementa un cantidad impresionante de algoritmos utilizados en MCMC y las viñetas incluidas valen la pena incluso si no usa el paquete. Prácticamente cualquier tipo de muestra sobre la que hayas leído, tiene. Codifica de manera diferente a BUGS / JAGS o Stan, y todo está en R, pero a menudo es tan eficiente que es competitivo.
fuente
LaplacesDemon
, si estás familiarizado con eso. Me alegra saber de esonimble
también. Al menos lo descargaré. (Aunque las múltiples viñetas de LaplacesDemon podrían valer la pena incluso si usas ágil.) ... Ohhh, solo fui a la página. Si su SMC es fácil de usar, me convertiré en un gran admirador. El único paquete R que he visto que hace SMC es terriblemente complejo.nimble
sitio web, es bastante impresionante. ¿Por qué nunca he oído hablar de eso? Parece una gran opción para las personas acostumbradas al lenguaje de modelado BUGS / JAGS. Por supuesto, harán las mejores comparaciones posibles en el sitio web, pero aún así me gusta hasta ahora. (Excepto que conrstanarm
ybrms
, que utilizan Stan bajo el capó, el campeón facilidad de uso-en-R sería Stan.)