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ária
- 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.
Respostas:
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 comp d
( 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 ).d d
Supondo que você comece na posição tenha aceitado um , gere uma proposta comx d y
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.d d
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 .
fonte
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 .
fonte