Integrazione di Metropolis-Hastings: perché la mia strategia non funziona?


16

Supponiamo di avere una funzione che voglio integrare Ovviamente supponendo che vada a zero agli endpoint, nessun ingrandimento, bella funzione. Un modo in cui mi sono armeggiato è usare l'algoritmo Metropolis-Hastings per generare un elenco di campioni dalla distribuzione proporzionale a , che manca della costante di normalizzazione che chiamerò , e quindi calcolando alcune statistiche su queste : g(x)

g(x)dx.
g(x)x1,x2,,xng(x)
N=g(x)dx
p(x)f(x)x
1ni=0nf(xi)f(x)p(x)dx.

Poiché , posso sostituire in per cancellare dall'integrale, risultando in un'espressione della forma Quindi, a condizione che integri con lungo quella regione, dovrei ottenere il risultato 1 / N , che potrei semplicemente prendere il reciproco per ottenere la risposta che desidero. Quindi potrei prendere l'intervallo del mio campione (per usare in modo più efficace i punti) r = x_ \ max - x_ \ min e lasciare U (x) = 1 / r per ogni campione che ho disegnato. In questo modo U (x)f ( x ) = U ( x ) / g ( x ) g 1p(x)=g(x)/Nf(x)=U(x)/g(x)gU(x)11/Nr=xmax-xminU(x)=1/rU(x)

1NU(x)g(x)g(x)dx=1NU(x)dx.
U(x)11/Nr=xmaxxminU(x)=1/rU(x)valuta zero al di fuori della regione in cui i miei campioni non sono, ma si integra a 1 in quella regione. Quindi, se ora prendo il valore atteso, dovrei ottenere:
E[U(x)g(x)]=1N1ni=0nU(x)g(x).

Ho provato a provare questo in R per la funzione di esempio g(x)=ex2 . In questo caso non utilizzo Metropolis-Hastings per generare i campioni, ma utilizzo le probabilità effettive rnormper generare campioni (solo per testare). Non riesco a ottenere i risultati che sto cercando. Fondamentalmente la piena espressione di ciò che vorrei calcolare è:

1n(xmaxxmin)i=0n1exi2.
Nella mia teoria questo dovrebbe valutare 1/π . Si avvicina ma certamente non converge nel modo previsto, sto facendo qualcosa di sbagliato?
ys = rnorm(1000000, 0, 1/sqrt(2))
r = max(ys) - min(ys)
sum(sapply(ys, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.6019741. 1/sqrt(pi) = 0.5641896

Modifica per CliffAB

Il motivo per cui utilizzo l'intervallo è solo per definire facilmente una funzione diversa da zero nella regione in cui si trovano i miei punti, ma che si integra con nell'intervallo . La specifica completa della funzione è: Non ho dovuto usare come densità uniforme. Avrei potuto usare un'altra densità integrata a , ad esempio la densità di probabilità Tuttavia, ciò avrebbe reso banale la somma dei singoli campioni [ - , ] U ( x ) = { 11[,]U(x)1P(x)=1

U(x)={1xmaxxminxmax>x>xmin0otherwise.
U(x)11
P(x)=1πex2.
1ni=0nP(x)g(x)=1ni=0nexi2/πexi2=1ni=0n1π=1π.

Potrei provare questa tecnica per altre distribuzioni che si integrano in . Tuttavia, vorrei ancora sapere perché non funziona per una distribuzione uniforme.1


Osservandolo solo rapidamente, quindi non sono sicuro del perché tu abbia deciso di usare range (x). A condizione che sia valido, è estremamente inefficiente! L'intervallo di un campione di quella dimensione è quasi la statistica più instabile che potresti prendere.
Cliff AB,

@CliffAB Non c'è niente di particolarmente speciale in me che uso l'intervallo, oltre a definire una distribuzione uniforme sull'intervallo in cui si trovano i miei punti. Vedi le modifiche.
Mike Flynn,

1
Lo guarderò più avanti in maggiore dettaglio. Ma qualcosa da considerare è che come se x fosse un insieme di camper uniformi, allora come , range . Ma se x è un insieme di camper normali non degenarate, allora come , . n(x)1nrange(x)
Cliff AB,

@CliffAB avresti potuto avere ragione, penso che la ragione fosse che i limiti dell'integrale non erano fissi, e quindi la varianza dello stimatore non converge mai ...
Mike Flynn,

Risposte:


13

Questa è una domanda molto interessante, che riguarda il problema dell'approssimazione di una costante normalizzante di una densità basata su un'uscita MCMC dalla stessa densità . (Un'osservazione laterale è che il presupposto corretto da fare è che è integrabile, andare a zero all'infinito non è sufficiente.)ggg

Secondo me, la voce più pertinente su questo argomento riguardo al tuo suggerimento è un articolo di Gelfand e Dey (1994, JRSS B ), in cui gli autori sviluppano un approccio molto simile per trovare durante la generazione da . Un risultato in questo documento è che, per qualsiasi densità di probabilità [questo è equivalente alla tua ] tale che la seguente identità mostra che un campione di può produrre un

Xg(x)dx
p(x)g(x)α(x)U(x)
{x;α(x)>0}{x;g(x)>0}
Xα(x)g(x)p(x)dx=Xα(x)Ndx=1N
pvalutazione imparziale di da parte dello stimatore del campionamento di importanza Ovviamente, le prestazioni (velocità di convergenza, esistenza di una varianza, ecc.) dello stimatore dipendono dalla scelta di [ anche se le sue aspettative no]. In un quadro bayesiano, una scelta sostenuta da Gelfand e Dey è quella di prendere , la densità precedente. Questo porta a dove è la funzione di verosimiglianza, poiché1/N
η^=1ni=1nα(xi)g(xi)xiiidp(x)
η^αα=π
α(x)g(x)=1(x)
(x)g(x)=π(x)(x). Purtroppo, il risultante stimatore è la stima di media armonica , chiamata anche la peggiore Monte Carlo stimatore mai da Radford Neal, dell'Università di Toronto. Quindi non sempre funziona bene. O quasi mai.
N^=ni=1n1/(xi)

La tua idea di usare l'intervallo del tuo campione e l'uniforme su quell'intervallo è collegata al problema della media armonica: questo stimatore non ha una varianza se non altro a causa del appare nel numeratore (ho il sospetto che potrebbe sempre essere il caso di un supporto illimitato!) e converge quindi molto lentamente alla costante normalizzante. Ad esempio, se riesegui più volte il codice, otterrai 10 valori numerici molto diversi dopo 10⁶ iterazioni. Questo significa che non puoi nemmeno fidarti della grandezza della risposta.(min(xi),max(xi))exp{x2}

Una correzione generica a questo problema di varianza infinita consiste nell'utilizzare per una densità più concentrata, usando ad esempio i quartili del campione , perché allora rimane limitato in questo intervallo.α(q.25(xi),q.75(xi))g

Quando si adatta il codice a questa nuova densità, l'approssimazione è molto più vicina a :1/π

ys = rnorm(1e6, 0, 1/sqrt(2))
r = quantile(ys,.75) - quantile(ys,.25)
yc=ys[(ys>quantile(ys,.25))&(ys<quantile(ys,.75))]
sum(sapply(yc, function(x) 1/( r * exp(-x^2))))/length(ys)
## evaluates to 0.5649015. 1/sqrt(pi) = 0.5641896

Discutiamo questo metodo in dettaglio in due articoli con Darren Wraith e con Jean-Michel Marin .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.