Algoritmo di Metropolis-Hastings: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Kasirbot (discussione | contributi)
Nessun oggetto della modifica
Riga 5: Riga 5:
L'algoritmo di [[Nicholas Constantine Metropolis|Metropolis]] è realizzabile utilizzando un generatore di numeri casuali con [[variabile casuale uniforme continua|distribuzione uniforme]] in ''[0, 1]''. La procedura è la seguente:
L'algoritmo di [[Nicholas Constantine Metropolis|Metropolis]] è realizzabile utilizzando un generatore di numeri casuali con [[variabile casuale uniforme continua|distribuzione uniforme]] in ''[0, 1]''. La procedura è la seguente:


# Preso, per convenzione, l'ultimo valore x<sub>i</sub> della variabile random nella sequenza si sceglie un valore di prova x<sup>*</sup> diverso da x<sub>i</sub> tra tutti i valori possibili della variabile random. Nel caso delle variabili random continue si può prendere x<sup>*</sup> = x<sub>i</sub> +δx dove δx è un numero distribuito uniformemente nell'intervallo ''[−δ, δ]'';
# Preso, per convenzione, l'ultimo valore x<sub>i</sub> della variabile random nella sequenza si sceglie un valore di prova x<sup>*</sup> tra tutti i valori possibili della variabile random. Nel caso delle variabili random continue si può prendere x<sup>*</sup> = x<sub>i</sub> +δx dove δx è un numero distribuito uniformemente nell'intervallo ''[−δ, δ]'';
# Si calcola il rapporto w = <math> \frac{p(x^{*})}{p(x_i)} </math>;
# Si calcola il rapporto w = <math> \frac{p(x^{*})}{p(x_i)} </math>;
# Se ''w ≥ 1'' si accetta il nuovo valore x<sup>*</sup> = x<sub>i+1</sub>
# Se ''w ≥ 1'' si accetta il nuovo valore x<sup>*</sup> = x<sub>i+1</sub>
# Se invece ''w < 1'' il nuovo valore deve essere accettato con probabilità w. Si genera quindi un numero random r distribuito uniformemente nell'intervallo [0, 1);
# Se invece ''w < 1'' il nuovo valore deve essere accettato con probabilità w. Si genera quindi un numero random r distribuito uniformemente nell'intervallo [0, 1);
# Se ''r ≤ w'' si accetta il nuovo valore x<sup>*</sup> = x<sub>i+1</sub> ;
# Se ''r ≤ w'' si accetta il nuovo valore x<sup>*</sup> = x<sub>i+1</sub> ;
# Se invece ''r > w'' il nuovo valore viene rigettato dal momento che x<sub>i+1</sub> = x<sub>i</sub>.
# Se invece ''r > w'' il nuovo valore viene rigettato e si torna all'inizio della procedura sorteggiando un nuovo x<sup>*</sup> .


Per generare una sequenza di ''N'' elementi basta ripetere queste operazioni ''N'' volte a partire da un valore iniziale x<sub>0</sub>. Per avere una buona stima della ''p(x)'' è necessario generare sequenze molto lunghe. La scelta del valore di ''δ'' può essere cruciale, se è troppo grande solo una piccola parte dei valori di prova proposti verrà accettato. Se invece il valore di ''δ'' è troppo piccolo quasi tutti i valori di prova proposti saranno accettati.
Per generare una sequenza di ''N'' elementi basta ripetere queste operazioni ''N'' volte a partire da un valore iniziale x<sub>0</sub>. Per avere una buona stima della ''p(x)'' è necessario generare sequenze molto lunghe. La scelta del valore di ''δ'' può essere cruciale, se è troppo grande solo una piccola parte dei valori di prova proposti verrà accettato. Se invece il valore di ''δ'' è troppo piccolo quasi tutti i valori di prova proposti saranno accettati.

Versione delle 17:56, 14 dic 2012

L'algoritmo di Metropolis-Hastings serve a generare dei numeri x1, x2, .., xn che presentano una distribuzione p(x) fissata a priori.

Il metodo si basa sulla generazione di numeri di 'test' che vengono accettati o rigettati in modo da ottenere la distribuzione voluta. Il metodo sarà presentato nel caso di una sola variabile casuale continua; esso può essere facilmente esteso al caso di distribuzioni di probabilità P(x1, x2, ..., xN) di un numero qualsiasi di variabili.

L'algoritmo di Metropolis è realizzabile utilizzando un generatore di numeri casuali con distribuzione uniforme in [0, 1]. La procedura è la seguente:

  1. Preso, per convenzione, l'ultimo valore xi della variabile random nella sequenza si sceglie un valore di prova x* tra tutti i valori possibili della variabile random. Nel caso delle variabili random continue si può prendere x* = xi +δx dove δx è un numero distribuito uniformemente nell'intervallo [−δ, δ];
  2. Si calcola il rapporto w = ;
  3. Se w ≥ 1 si accetta il nuovo valore x* = xi+1
  4. Se invece w < 1 il nuovo valore deve essere accettato con probabilità w. Si genera quindi un numero random r distribuito uniformemente nell'intervallo [0, 1);
  5. Se r ≤ w si accetta il nuovo valore x* = xi+1 ;
  6. Se invece r > w il nuovo valore viene rigettato e si torna all'inizio della procedura sorteggiando un nuovo x* .

Per generare una sequenza di N elementi basta ripetere queste operazioni N volte a partire da un valore iniziale x0. Per avere una buona stima della p(x) è necessario generare sequenze molto lunghe. La scelta del valore di δ può essere cruciale, se è troppo grande solo una piccola parte dei valori di prova proposti verrà accettato. Se invece il valore di δ è troppo piccolo quasi tutti i valori di prova proposti saranno accettati.

Di conseguenza, essendo δ dipendente dalla forma di p(x), deve essere di volta in volta scelto; per la sua stima si può procedere per approssimazione successiva in modo che, fissato un delta, il numero di valori accettati sia un terzo del totale. Anche la scelta del valore iniziale è molto importante, in genere conviene partire da valori di x tali che p(x) assuma valori massimi in modo da avere una buona statistica nelle zone più probabili.

Voci correlate

Bibliografia

W.K Hastings, Monte Carlo sampling methods using Markov chains and their applications, Biometrikam, 1970; 57: 97-109

  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica