Hacer MCMC: usar jags / stan o implementarlo yo mismo

13

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?

usuario112758
fuente
Como puede elegir su propia distribución de propuestas usted mismo, debe elegirla de tal manera que la Cadena de Markov resultante de ella converja lo más rápido posible hacia la posterior.
¡Gracias! ¿Es la única razón?
user112758
44
Si eres un investigador aplicado que quiere aprender más Bayes usándolo para aplicaciones, te recomiendo comenzar con JAGS o Stan y luego pasar a escribir tu propio MCMC si crees que lo necesitas. Tenga en cuenta que JAGS y Stan tienen fortalezas y limitaciones ligeramente diferentes.
conjugateprior
¡Gracias! Sí, estoy haciendo investigación aplicada. ¿Podría contarme más sobre las limitaciones de JAGS y Stan? Primero probé Stan, pero descubrí que no tiene características o complementos de "monitoreo en línea" o "muestra hasta converger" --- esto es molesto, puedo probar JAGS ahora.
user112758

Respuestas:

26

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.

Acantilado
fuente
3
+1. Además, Stan no maneja directamente algunos problemas que involucran distribuciones discretas, por lo que debe saber lo suficiente para integrarlos, lo que no es en sí mismo simple, por lo que podría ser un caso en el que la suya podría ayudar. Sin embargo, creo que JAGS maneja tales casos directamente, por lo que si puede mantener las diferentes filosofías de BUGS / JAGS y Stan separadas en su mente, sería mejor cambiar entre ellas.
Wayne
Además, Stan puede tener problemas donde una métrica euclidiana diagonal no es adecuada para la geometría de la parte posterior; este es el caso, entre otras cosas, cuando solo hay una región estrecha y de forma extraña en la parte posterior que tiene mucha probabilidad. El resultado es que tomar muestras de la parte posterior es como tratar de andar en bicicleta por el borde de un acantilado: ¡podría "caerse" si da un giro equivocado!
Sycorax dice Reinstate Monica
2
+1. Mi recomendación general para los estudiantes es codificarlo en JAGS. Si eso no funciona bien, codifíquelo en Stan. Si eso no funciona bien, entonces comience a escribir su propia muestra. También hay ciertos modelos, por ejemplo, modelos espaciales, donde es posible que desee utilizar BUGS. Y ciertos modelos, por ejemplo, modelos de espacio de estado no gaussianos, donde desea usar NIMBLE. El costo de oportunidad de comenzar escribiendo su propia muestra es demasiado alto.
jaradniemi
No entiendo el caso "en tiempo real". Si es posible tener una muestra propia "ya preparada", ¿por qué no es tan fácil usar un modelo Stan ya compilado? También me pregunto si algún MCMC es lo suficientemente rápido para aplicaciones en tiempo real.
Juho Kokkala
1
Y no estoy lo suficientemente familiarizado con Stan para saber qué requiere exactamente compilar nuevos modelos, pero no es demasiado difícil imaginar que, sea cual sea la restricción, existe un modelo dinámico tal que a medida que ingresen nuevos datos, el modelo se volverá más complejo y entonces sería necesario volver a compilar. ¿Creo que los métodos no paramétricos (en los que el espacio de parámetros crece con el tamaño de la muestra) se ajustarían a ese criterio? Pero puede haber formas inteligentes de evitarlo.
Cliff AB
6

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Greenparker
fuente
66
Diría que la razón de la "confianza" es discutible: Stan es de código abierto y tiene muchos contribuyentes, por lo que varias personas han visto su código fuente y, por lo tanto, es poco probable que tenga errores graves. Por otro lado, si lo hace solo, siempre puede pasar por alto el error que ha creado, y todos hacen errores, es solo una cuestión de número de líneas de código que escribe ...
Tim
@Tim estoy de acuerdo. He cambiado ese punto para reflejar lo que estaba tratando de decir. Gracias.
Greenparker
55
+1 para el argumento de comprensión. Sin embargo, el argumento de Onus parece un poco exagerado. Casi todo lo que codifique usted mismo dependerá del lenguaje estadístico de otra persona, la biblioteca de álgebra lineal, el generador de números aleatorios, etc., por lo que 'asumir la responsabilidad' es una cuestión de grado.
conjugateprior
@conjugateprior Absolutamente de acuerdo. Por eso mi respuesta fue en primera persona. Esta fue puramente mi opinión.
Greenparker
4

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.

Wayne
fuente
1
Plug desvergonzado: también puede usar [nimble] (r-nimble.org) que le permite personalizar su MCMC (es decir, usar una muestra de corte para este nodo, actualizar el bloque para ese grupo de nodos, etc.) sin la necesidad de reescribir Esta muestra cada vez. ¡Y también puede escribir sus propios muestreadores para implementarlos directamente! Divulgación: solía trabajar en este proyecto.
Cliff AB
@CliffAB: Suena similar a LaplacesDemon, si estás familiarizado con eso. Me alegra saber de eso nimbletambié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.
Wayne
@CliffAB: Wow, después de leer el nimblesitio 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 con rstanarmy brms, que utilizan Stan bajo el capó, el campeón facilidad de uso-en-R sería Stan.)
Wayne
todavía es muy nuevo: creo que v0.1 fue lanzado hace poco más de 2 años. Y SMC fue un gran motivador para el proyecto: el PI ha realizado una considerable publicación en filtros de partículas y se molestaba con escribirlos desde cero cada vez. Pero he estado un poco con el trabajo actual para mantenerme al día con el estado actual de los muestreadores SMC; cuando me fui (hace casi dos años) acabábamos de armar uno muy primitivo.
Cliff AB
1
Simplemente diga este artículo de arXiv en el que podría estar interesado.
Cliff AB