Nos últimos dias, tenho tentado entender como o Markov Chain Monte Carlo (MCMC) funciona. Em particular, tenho tentado entender e implementar o algoritmo Metropolis-Hastings. Até agora, acho que tenho uma compreensão geral do algoritmo, mas há algumas coisas que ainda não estão claras para mim. Eu quero usar o MCMC para ajustar alguns modelos aos dados. Por causa disso, descreverei minha compreensão do algoritmo Metropolis-Hastings para ajustar uma linha reta a alguns dados observados :
1) Faça um palpite inicial para . Defina esta um como o nosso atual um ( a 0 ). Adicione também um no final da cadeia de Markov ( C ).
2) Repita as etapas abaixo várias vezes.
3) avaliar a probabilidade actual ( ) dado um 0 e D .
4) Propor um novo ( a 1 ) amostrando a partir de uma distribuição normal com μ = a 0 e σ = s t e p s i z e . Por agora, s t e p s i z e é constante.
5) Avaliar nova probabilidade ( ) deu um 1 e D .
6) Se for maior que L 0 , aceitar como o novo um 0 , acrescentá-la na extremidade de C e ir para o passo 2.
7) se for menor que L 0, gere um número (U) no intervalo [0,1] a partir de uma distribuição uniforme
8) Se for menor que a diferença entre as duas probabilidades ( L 1 - L 0 ), aceitar como o novo um 0 , acrescentá-la na extremidade de C e ir para o passo 2.
9) Se for maior que a diferença entre as duas probabilidades ( L 1 - L 0 ), acrescente a no final de C , continue usando a mesma a 0 , vá para a etapa 2.
10) Fim da repetição.
11) Remova alguns elementos do início de (fase de queima).
12) Agora pegue a média dos valores em . Essa média é a estimada a .
Agora eu tenho algumas perguntas sobre as etapas acima:
- Como eu construo a função de probabilidade para mas também para qualquer função arbitrária?
- Esta é uma implementação correta do algoritmo Metropolis-Hastings?
- Como a seleção do método de geração de número aleatório na Etapa 7 pode alterar os resultados?
- Como esse algoritmo vai mudar se eu tiver vários parâmetros de modelo? Por exemplo, se eu tivesse o modelo .
Notas / Créditos: A estrutura principal do algoritmo descrito acima é baseada no código de um Workshop MPIA Python.