En los últimos días he estado tratando de entender cómo funciona Markov Chain Monte Carlo (MCMC). En particular, he estado tratando de entender e implementar el algoritmo Metropolis-Hastings. Hasta ahora creo que tengo una comprensión general del algoritmo, pero hay algunas cosas que aún no me quedan claras. Quiero usar MCMC para adaptar algunos modelos a los datos. Debido a esto, describiré mi comprensión del algoritmo Metropolis-Hastings para ajustar una línea recta a algunos datos observados :D
1) Haga una suposición inicial para . Establezca esto como nuestro actual ( ). También agregue al final de la Cadena de Markov ( ).a a a 0 a C
2) Repita los pasos a continuación varias veces.
3) evaluar la probabilidad actual ( ) dada y . a 0 D
4) Proponga una nueva ( ) muestreando desde una distribución normal con y . Por ahora, es constante.a 1 μ = a 0 σ = s t e p s i z e s t e p s i z e
5) Evaluar nueva verosimilitud ( ) dada y . a 1 D
6) Si es mayor que , acepte como el nuevo , agréguelo al final de y vaya al paso 2.L 0 a 1 a 0 C
7) Si es menor que genere un número ( ) en el rango [0,1] a partir de una distribución uniformeL 0 U
8) Si es menor que la diferencia entre las dos probabilidades ( - ), acepte como el nuevo , agréguelo al final de y vaya al paso 2.L 1 L 0 a 1 a 0 C
9) Si es mayor que la diferencia entre las dos probabilidades ( - ), agregue al final de , siga usando el mismo , vaya al paso 2.L 1 L 0 a 0 C a 0
10) Fin de la repetición.
11) Elimine algunos elementos del inicio de (fase de quemado).
12) Ahora tomar el promedio de los valores de . Este promedio es el estimado .a
Ahora tengo algunas preguntas sobre los pasos anteriores:
- ¿Cómo construyo la función de probabilidad para pero también para cualquier función arbitraria?
- ¿Es esta una implementación correcta del algoritmo Metropolis-Hastings?
- ¿Cómo la selección del método de generación de números aleatorios en el Paso 7 puede cambiar los resultados?
- ¿Cómo va a cambiar este algoritmo si tengo varios parámetros de modelo? Por ejemplo, si tuviera el modelo .
Notas / Créditos: La estructura principal del algoritmo descrito anteriormente se basa en el código de un Taller de Python de MPIA.