Premi ed esegui MCMC


16

Sto cercando di implementare l'algoritmo MCMC hit and run, ma ho un po 'di problemi a capire come procedere. L'idea generale è la seguente:

Per generare un salto di proposta in MH, noi:

  • Generare una direzione da una distribuzione sulla superficie della sfera dell'unità OdO
  • Genera una distanza con lungo lo spazio limitato.λ

Tuttavia, non ho idea di come dovrei implementarlo in R (o in qualsiasi altra lingua).

Qualcuno ha un frammento di codice che mi indicherebbe nella giusta direzione?

A proposito, non sono così interessato a una libreria che fa questo metodo, voglio provare a codificarlo da solo.

Grazie molto.


1
Non ho mai sentito parlare di questo algoritmo prima, ma sembra piuttosto interessante. Potresti fornire un link a una fonte esplicativa? Grazie !
Steffen,

@steffen Ecco un link al documento originale - in realtà il rapporto tecnico. Non ho mai usato nemmeno questa procedura.
csgillespie,

1
Qual è il vantaggio del hit and run MCMC rispetto ad altri metodi? Velocità di convergenza?
RockScience il

@fRed: ecco perché ho offerto la taglia. Ho letto di Hit and Run, ma non so in quali circostanze sarebbe utile.
csgillespie,

3
Il collegamento ora è interrotto.
daknowles,

Risposte:


11

Non ho guardato la carta che hai fornito, ma lasciami comunque provare:

Se si dispone di uno spazio parametri dimensionale, è possibile generare una direzione casuale d distribuita uniformemente sulla superficie della sfera unitaria conpd

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(vedi Wiki ).

Quindi, utilizzalo per generare proposte di per il campionamento dei rifiuti (supponendo che tu possa effettivamente valutare la distribuzione per d ).dd

Supponendo di iniziare nella posizione e di aver accettato una d , generare una proposta y conxdy

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

e fai un passaggio di Metropolis-Hastings per decidere se passare a oppure no.y

Naturalmente, quanto bene funzionerà dipenderà dalla distribuzione di e da quanto è costoso (ripetutamente) valutare la sua densità nella fase di campionamento del rifiuto, ma dal momento che la generazione di proposte per d è economica, è possibile cavarsela.dd


Aggiunto per il vantaggio di @ csgillespie:

Da quello che sono stato in grado di raccogliere da alcuni google, l'MCMC hit-and-run è utile principalmente per il mixaggio rapido se hai un target (multivariato) che ha un supporto arbitrario limitato ma non necessariamente collegato, perché ti consente di spostarti da qualsiasi punto nel supporto agli altri in un solo passaggio. Più qui e qui .


1
Se questa risposta non è soddisfacente, potresti spiegare perché?
John Salvatier,

Non sono sicuro di @fred, ma quando ho offerto la generosità suppongo che volevo un po 'più di conoscenza dell'MCMC hit-and-run. Ad esempio, per quali tipi di problemi sarebbe più adatto. Naturalmente, se non ci sono altre risposte, questa domanda vincerebbe la taglia.
csgillespie,

3
@csgillespie: ho modificato la mia risposta per soddisfare meglio il tuo interesse. Non si dica che non meritassi la generosità. ;)
fabians

2
Molte grazie per il link. Uno dei motivi per cui ho posto la grazia è che le mie ricerche su Google hanno portato ad alcune discussioni matematiche sul metodo, ma poco in termini di applicazioni pratiche. Per favore, non prenderlo come un leggero se aspetto altre 48 ore prima di assegnare la generosità (è una generosità particolarmente generosa!)
csgillespie,

4

Ho trovato la tua domanda mentre cercavo il riferimento originale per Hit-and-Run. Grazie per quello! Ho appena messo insieme un'implementazione di prova del concetto di hit-and-run per PyMC alla fine di questo recente blog .

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.