Negli ultimi giorni ho cercato di capire come funziona Markov Chain Monte Carlo (MCMC). In particolare, ho cercato di comprendere e implementare l'algoritmo Metropolis-Hastings. Finora penso di avere una comprensione generale dell'algoritmo ma ci sono un paio di cose che non sono ancora chiare per me. Voglio usare MCMC per adattare alcuni modelli ai dati. Per questo descriverò la mia comprensione dell'algoritmo di Metropolis-Hastings per adattare una retta ad alcuni dati osservati :D
1) Fai un'ipotesi iniziale per . Imposta questo come nostro attuale ( ). Anche aggiungere alla fine della catena di Markov ( ).a a a 0 a C
2) Ripetere i passaggi di seguito un numero di volte.
3) Valutare probabilità corrente ( ) dato e . a 0 D
4) Proponi un nuovo ( ) campionando da una distribuzione normale con e . Per ora, il è costante.a 1 μ = a 0 σ = s t e p s i z e s t e p s i z e
5) valutare nuove possibilità ( ) dato e . a 1 D
6) Se è più grande di , accetta come nuovo , aggiungilo alla fine di e vai al passaggio 2.L 0 a 1 a 0 C
7) Se è minore di genera un numero ( ) nell'intervallo [0,1] da una distribuzione uniformeL 0 U
8) Se è minore della differenza tra le due probabilità ( - ), accetta come nuovo , aggiungilo alla fine di e vai al passaggio 2.L 1 L 0a 0 C
9) Se è maggiore della differenza tra le due probabilità ( - ), aggiungi alla fine di , continua a usare lo stesso , vai al passaggio 2.L 1 L 0 a C a 0
10) Fine della ripetizione.
11) Rimuovere alcuni elementi dall'inizio di (fase di burn-in).
12) Ora prendete la media dei valori in . Questa media è la stimata .a
Ora ho alcune domande relative ai passaggi precedenti:
- Come posso costruire la funzione di verosimiglianza per ma anche per qualsiasi funzione arbitraria?
- È una corretta implementazione dell'algoritmo Metropolis-Hastings?
- In che modo la selezione del metodo di generazione di numeri casuali al passaggio 7 può modificare i risultati?
- Come cambierà questo algoritmo se ho più parametri del modello? Ad esempio, se avessi il modello .
Note / Crediti: la struttura principale dell'algoritmo sopra descritto si basa sul codice di un MPIA Python Workshop.