Eu tenho tentado entender o algoritmo Metropolis-Hastings para escrever um código para estimar os parâmetros de um modelo (ou seja, ). Segundo a bibliografia, o algoritmo Metropolis-Hastings possui as seguintes etapas:
- Gere
onde
Como eu gostaria de fazer algumas perguntas:
- A bibliografia afirma que, se é uma distribuição simétrica, a razão q ( x | y ) / q ( y | x ) se torna 1 e o algoritmo é chamado Metropolis. Isso está correto? A única diferença entre Metropolis e Metropolis-Hastings é que o primeiro usa uma distribuição simétrica? E quanto à metrópole "Random Walk" (-Hastings)? Como isso difere dos outros dois?
- A maioria do código de exemplo que eu acho on-line usa uma distribuição de proposta gaussiana e, portanto, ρ ( x , y ) = min ( f ( y ) / f ( x ) , 1 ) onde f ( y ) / f ( x )é a razão de verossimilhança. E se a distribuição da proposta for uma distribuição de Poisson? Acho que entendo racionalmente por que essa proporção não se torna 1 ao usar uma distribuição assimétrica, mas não tenho certeza se a entendo matematicamente ou como implementá-la com código. Alguém poderia me dar um exemplo simples de código (C, python, R, pseudo-código ou o que você preferir) do algoritmo Metropolis-Hastings usando uma distribuição de proposta não simétrica?
mcmc
metropolis-hastings
AstrOne
fonte
fonte
Respostas:
Sim isto está correcto. O algoritmo Metropolis é um caso especial do algoritmo MH.
Em uma caminhada aleatória, a distribuição da proposta é centrada novamente após cada etapa no último valor gerado pela cadeia. Geralmente, em uma caminhada aleatória, a distribuição da proposta é gaussiana; nesse caso, essa caminhada aleatória atende ao requisito de simetria e o algoritmo é metrópole. Suponho que você possa executar um passeio "pseudo" aleatório com uma distribuição assimétrica, o que faria com que as propostas se desviassem demais na direção oposta à inclinação (uma distribuição inclinada à esquerda favoreceria propostas à direita). Não sei por que você faria isso, mas você poderia e seria um algoritmo de detenções de metrópoles (por exemplo, exigir o termo de proporção adicional).
Em um algoritmo de caminhada não aleatória, as distribuições da proposta são fixas. Na variante de passeio aleatório, o centro da distribuição da proposta é alterado a cada iteração.
Então você precisa usar MH em vez de apenas metrópole. Presumivelmente, isso seria uma amostra de uma distribuição discreta; caso contrário, você não desejaria usar uma função discreta para gerar suas propostas.
De qualquer forma, se a distribuição de amostragem estiver truncada ou você tiver conhecimento prévio de sua inclinação, provavelmente desejará usar uma distribuição de amostragem assimétrica e, portanto, precisará usar hastings de metrópoles.
Aqui está a metrópole:
Vamos tentar usar isso para provar uma distribuição bimodal. Primeiro, vamos ver o que acontece se usarmos uma caminhada aleatória para nossa propsal:
Agora, vamos tentar fazer uma amostragem usando uma distribuição de proposta fixa e ver o que acontece:
Parece bom no começo, mas se dermos uma olhada na densidade posterior ...
veremos que está completamente preso no máximo local. Isso não é totalmente surpreendente, pois na verdade centralizamos nossa distribuição de propostas lá. O mesmo acontece se centralizarmos isso no outro modo:
Podemos tentar abandonar nossa proposta entre os dois modos, mas precisaremos definir uma variação muito alta para ter a chance de explorar qualquer um deles
Observe como a escolha do centro da distribuição da proposta tem um impacto significativo na taxa de aceitação do nosso amostrador.
Nós ainda ficar preso na mais perto dos dois modos. Vamos tentar deixar isso diretamente entre os dois modos.
Finalmente, estamos nos aproximando do que estávamos procurando. Teoricamente, se deixarmos o amostrador funcionar o tempo suficiente, podemos obter uma amostra representativa de qualquer uma dessas distribuições de propostas, mas a caminhada aleatória produziu uma amostra utilizável muito rapidamente e tivemos que tirar proveito de nosso conhecimento de como o posterior era suposto. procurar ajustar as distribuições de amostragem fixas para produzir um resultado utilizável (que, verdade seja dita, ainda não temos
y_trace4
).Vou tentar atualizar com um exemplo de pressa nas metrópoles mais tarde. Você deve ver com bastante facilidade como modificar o código acima para produzir um algoritmo de hastings de metrópoles (dica: você só precisa adicionar a taxa suplementar ao
logR
cálculo).fonte
R=exp(logR)
por este:R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))
para caminhada aleatória e não aleatória MH. Isso está correto?