Algoritmo di Metropolis-Hastings

wedge
Per realizzare una distribuzione casuale di numeri secondo una funzione da me definita a partire da una funzione uniforme, ho preso spunto dalla pipeline descritta su
http://it.wikipedia.org/wiki/Algoritmo_ ... s-Hastings
per poi vedere che non funziona e notare che su http://en.wikipedia.org/wiki/Metropolis–Hastings_algorithm (prevalentemente scartata perchè meno schematica nel descrivere le operazioni da compiere) ci sono delle differenze sostanziali.

Qualcuno che se ne intende sa dirmi se il processo descritto su http://it.wikipedia.org/wiki/Algoritmo_ ... s-Hastings è corretto?
Altrimenti posso postare la mia interpretazione in pseudocodice, magari ho sbagliato lì...
Grazie dell'attenzione!
M

Risposte
furcellese
Ciao M,

non sono un esperto,ma semplicemente uno studente che sta seguendo un corso su argomenti simili. Ho dato un'occhiata ad entrambe le pipeline, italiano e inglese, sull'argomento in questione. Sinceramente mi sembrano entrambi corretti, ma, come notavi tu, ci sono comunque delle differente importanti.
Nella versione italiana si viene ingannati dal titolo (Algoritmo di Metropolis-Hasting) per quanto quello descritto (che io sappia) è detto solo algoritmo di Metropolis; non so se tu hai un'infarinatura sulla teoria delle catene di Markov sulle quali l'algoritmo si basa; per non farla lunga e complicata, se consideri il numero random che tu "proponi" come una matrice (detta di transizione), l'agoritmo di metropolis presuppone che tale matrice sia simmetrica (ossia la tua v.a. può distribuirsi con una qualsiasi legge simmetrica, ad es. una gaussiana).
L'algoritmo di Metropolis-Hasting descritto nella pipeline inglese è molto più generale e ti permette di ottenere una catena di Markov (o se preferisci, una v.a.) distribuita secondo una distribuzione target generica (matrice di transizione non simmetrica).
Il termine [tex]a_2[/tex] sarà uguale ad 1 (caso simmetrico descritto in wikipedia italiano) in quanto i due valori della frazione sono identici [tex]Q(x^t;x')=Q(x';x^t)[/tex], mentre nel caso asimmetrico serviranno come fattore "correttivo".
Se implementi l'algoritmo come in quest'ultimo caso, ovviamente, potrai simulare una qualsiasi v.a., quindi ti conviene.

Spero di essere stato chiaro.
Buon Metropolis-Hastings

G

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.