Pressione e execute o MCMC

16

Estou tentando implementar o algoritmo MCMC hit and run, mas estou com um pouco de dificuldade para entender como fazê-lo. A ideia geral é a seguinte:

Para gerar um salto de proposta no MH, nós:

  • Gere uma direção partir de uma distribuição na superfície da esfera unitáriadO
  • Gere uma distância assinada ao longo do espaço restrito.λ

No entanto, não tenho idéia de como devo implementá-lo no R (ou em qualquer outro idioma).

Alguém tem um trecho de código que me aponte na direção certa?

BTW, eu não estou interessado em uma biblioteca que faz esse método, quero tentar codificá-lo eu mesmo.

Muito Obrigado.

csgillespie
fonte
1
Nunca ouvi falar desse algoritmo antes, mas parece bastante interessante. Você poderia fornecer um link para uma fonte explicativa? Obrigado !
amigos estão dizendo sobre steffen
@steffen Aqui está um link para o artigo original - bem, na verdade, o relatório técnico. Também nunca usei esse procedimento.
csgillespie
1
Qual é a vantagem do hit and run MCMC sobre outros métodos? Velocidade de convergência?
RockScience
@ Red: É por isso que eu ofereci a recompensa. Eu li sobre Hit and run, mas não sei sob que circunstâncias isso seria útil.
Csgillespie
3
Link agora está quebrado.
daknowles

Respostas:

11

Não olhei para o papel que você forneceu, mas deixe-me tentar mesmo assim:

Se você possui um espaço de parâmetro dimensional, pode gerar uma direção aleatória uniformemente distribuída na superfície da esfera unitária compd

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

( veja Wiki ).

Em seguida, use isso para gerar propostas para para amostragem por rejeição (supondo que você possa realmente avaliar a distribuição para ).dd

Supondo que você comece na posição tenha aceitado um , gere uma proposta comxdy

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

e faça um passo de Metropolis-Hastings para decidir se você vai mudar para ou não.y

Obviamente, o quão bem isso pode funcionar dependerá da distribuição de e quão caro é (repetidamente) avaliar sua densidade na etapa de amostragem de rejeição, mas, como gerar propostas para é barato, você pode se safar disso.dd


Adicionado para o benefício de @ csgillespie:

Pelo que pude reunir com alguns pesquisadores, o MCMC hit-and-run é útil principalmente para mixagem rápida se você tiver um destino (multivariado) que possui suporte arbitrário, mas não necessariamente conectado, porque permite que você se mova de qualquer ponto no suporte a qualquer outro em uma etapa. Mais aqui e aqui .

fabianos
fonte
1
Se esta resposta não for satisfatória, você poderia explicar por quê?
John Salvatier
Não tenho certeza sobre o @fred, mas quando ofereci a recompensa, suponho que estava querendo um pouco mais de conhecimento sobre o MCMC de sucesso. Por exemplo, para quais tipos de problemas seria mais adequado. Obviamente, se não houver outras respostas, essa pergunta ganharia a recompensa.
precisa saber é o seguinte
3
@csgillespie: editei minha resposta para melhor atender seu interesse. Não se diga que eu não merecia a recompensa. ;)
fabians
2
Muito obrigado pelo link. Uma das razões pelas quais coloquei a recompensa foi que minhas pesquisas no Google geraram algumas discussões matemáticas sobre o método, mas pouco em termos de aplicações práticas. Por favor, não tome isso como uma leve se eu esperar mais 48 horas antes de conceder a graça (é uma recompensa particularmente generoso!)
csgillespie
4

Encontrei sua pergunta quando estava procurando a referência original para o Hit-and-Run. Obrigado por isso! Acabei de montar uma implementação de prova de conceito do hit-and-run para PyMC no final deste blog recente .

Abraham Flaxman
fonte