Golpea y corre MCMC

16

Estoy tratando de implementar el algoritmo MCMC de golpe y ejecución, pero tengo algunos problemas para entender cómo hacerlo. La idea general es la siguiente:

Para generar un salto de propuesta en MH, nosotros:

  • Genere una dirección partir de una distribución en la superficie de la esfera de la unidaddO
  • Genere una distancia firmada largo del espacio restringido.λ

Sin embargo, no tengo idea de cómo debo implementar esto en R (o en cualquier otro lenguaje).

¿Alguien tiene un fragmento de código que me dirija en la dirección correcta?

Por cierto, no estoy tan interesado en una biblioteca que haga este método, quiero intentar codificarlo yo mismo.

Muchas gracias.

csgillespie
fuente
1
Nunca he oído hablar de este algoritmo antes, pero suena bastante interesante. ¿Podría proporcionar un enlace a una fuente explicativa? Gracias !
steffen
@steffen Aquí hay un enlace al documento original , bueno, en realidad el informe técnico. Nunca he usado este procedimiento tampoco.
csgillespie
1
¿Cuál es la ventaja de golpear y ejecutar MCMC sobre otros métodos? Velocidad de convergencia?
RockScience
@fRed: Por eso ofrecí la recompensa. He leído sobre Hit and run, pero no sé en qué circunstancias sería útil.
csgillespie
3
El enlace ahora está roto.
daknowles

Respuestas:

11

No miré el papel que me proporcionaste, pero déjame probar de todos modos:

Si tiene un espacio de parámetro -dimensional, puede generar una dirección aleatoria distribuida uniformemente en la superficie de la esfera de la unidad condpagre

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(cf Wiki ).

Luego, use esto para generar propuestas para para el muestreo de rechazo (suponiendo que realmente pueda evaluar la distribución para ).drere

Suponiendo que comience en la posición y haya aceptado a d , genere una propuesta y conXrey

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

y haga un Paso Metropolis-Hastings para decidir si debe moverse hacia o no.y

Por supuesto, qué tan bien puede funcionar esto dependerá de la distribución de y de lo costoso que sea (repetidamente) evaluar su densidad en el paso de muestreo de rechazo, pero dado que generar propuestas para d es barato, puede salirse con la suya.rere


Añadido para beneficio de @ csgillespie:

De lo que pude reunir buscando en Google, el MCMC de golpear y ejecutar es útil principalmente para una mezcla rápida si tiene un objetivo (multivariante) que tiene un soporte arbitrario limitado pero no necesariamente conectado, porque le permite moverse desde cualquier punto en el apoyo a cualquier otro en un solo paso. Más aquí y aquí .

fabians
fuente
1
Si esta respuesta no es satisfactoria, ¿podría explicar por qué?
John Salvatier
No estoy seguro acerca de @fred, pero cuando ofrecí la recompensa, supongo que quería un poco más de información sobre MCMC de golpear y correr. Por ejemplo, para qué tipos de problemas sería más adecuado. Por supuesto, si no hay otras respuestas, esta pregunta ganaría la recompensa.
csgillespie
3
@csgillespie: edité mi respuesta para satisfacer mejor su interés. Que no se diga que no merecía la recompensa. ;)
fabians
2
Muchas gracias por el link. Una de las razones por las que coloqué la recompensa fue que mis búsquedas en Google arrojaron algunas discusiones matemáticas sobre el método, pero poco en cuanto a aplicaciones prácticas. Por favor, no lo tome como una ligera si espero otras 48 horas antes de la concesión de la recompensa (que es una recompensa particularmente generoso!)
csgillespie
4

Encontré su pregunta cuando estaba buscando la referencia original para Hit-and-Run. ¡Gracias por eso! Acabo de armar una implementación de prueba de concepto de hit-and-run para PyMC al final de este blog reciente .

Abraham Flaxman
fuente