Metropolis-Hastings
Renato Assunção DCC - UFMG
Amostrador de Gibbs
Pros:
• Método geral para amostrar de distribuição condicional p(|y)
• Quase qualquer distribuição (condicoes de
regularidade para convergência são bem leves)
Cons:
• Difícil ter certeza ABSOLUTA da convergência • Pode ter slow mixing (valores sucessivos muito
parecidos, muito correlacionados)
• Precisa obter a distribuição condicional completa p(i | -i , y). ESTE PROBLEMA PODE SER
Metropolis-Hastings
(, y) = (desconhecido, conhecido)
Comece com valor inicial para os valores
desconhecidos: (0)
Gere amostra (1), (2),... da distribuição p(|y)
usando algoritmo MH: • for(i in 1:nsim)
PROPONHA valor * para (i) ACEITE ou REJEITE *
Se ACEITAR, faca (i) = *
CASO CONTRARIO, faca (i) = (i-1)
Precisamos especificar:
• Como fazer uma proposta, • Regra de aceitação-rejeição.
Metropolis-Hastings: proposta
for(i in 1:nsim)
PROPONHA valor * para (i) Se ACEITAR, faca (i) = *
CASO CONTRARIO, faca (i) = (i-1)
Como propor um valor para (i) ?
Impressionante:
Metropolis-Hastings: proposta
Dentro de certos limites de
regularidade, qualquer distribuição pode ser usada para gerar uma
proposta *.
Em geral, a proposta e’ uma
distribuição “em torno” do valor
corrente (i-1)
Isto e’, o valor proposto * e’
selecionado ao acaso a partir de uma distribuição q( | (i-1) )
Metropolis-Hastings: aceitação
for(i in 1:nsim)
PROPONHA valor * para (i)
Se ACEITAR, (i) = *. ELSE, (i) = (i-1)
Como aceitar/rejeitar um valor proposto
para (i) ?
• Depende da distribuição q(|(i-1)) usada para
propor o novo valor.
• Calcule r = [ p(*|y)q((i-1) |*) ] / [ p((i-1)|y)q(* | (i-1)) ]
• Se r > 1, aceite * e faca (i) = *
Uma formula padrão
Em Metropolis-Hastings:
• Se r > 1, aceite * e faca (i) = *
• Se r < 1, aceite * (e faca (i) = *) COM
PROBAB r
Então probab de aceitação e’
• = min{1, r} • Ou seja
Exemplo muito simples
Desconhecido: R (univariado) Conhecido: y = NULL (nada)
Queremos amostrar de p()
Esta distribuição e’ conhecida A
MENOS DE UMA CONSTANTE DE INTEGRACAO.
Seja p() 5-1 exp(-4) se > 0 OBS: ~ Gama(5, 4) mas não
precisamos saber disso nem vamos usar este fato.
Exemplo muito simples - 2
Quer amostra de gama:
• p() 5-1 exp(-4)
Vamos escrever programa um pouco
mais geral:
• p() (a-1) exp(-b)
Temos acima: a=5 e b=4
Os valores possíveis de são reais > 0 Proposta: gerar * ~ |N(0,1)|,
independentemente de onde estiver no momento
Exemplo muito simples - 3
Quer amostra de p() ª-1 exp(-b)
a e b são conhecidos
Proposta: gerar * ~ |N(0,1)| MH:
• Valor inicial (0)
• Gere candidato * ~ |N(0,1)|
• Calcule probab aceitação
• = min{1, [p(*|y)q((i-1) |*)] / [p((i-1)|y)q(* | (i-1))] }
• Atualize (i-1) com
(i) = * (se aceitar)
Demonstração em R
Metropolis-Hastings
for(i in 1:nsim)
PROPONHA valor * para (i) Se ACEITAR, faca (i) = *
CASO CONTRARIO, faca (i) = (i-1)
: vetor multivariado. Como propor?
• Pode fazer proposta ciclando sobre todos os componentes de , um de cada vez, como no amostrador de Gibbs.
A cada componente, aceita ou rejeita proposta
• Ou dividir em blocos e propor ciclando sobre os blocos.
Valor não depende do estado atual, seria um chute
para o valor do parâmetro, talvez uma estimativa grosseira Baseada nos dados
Metropolis-Hastings
Fine tuning da distribuição da proposta:
• Não pode ser concentrada demais em torno da posição corrente:
Neste caso, aceitamos quase sempre mas a
cadeia quase não sai de perto de onde ela esta.
Slow mixing
• Não pode ser “espalhada” demais
Neste caso, vamos propor pontos de baixíssima
probabilidade de acordo com (x)
Eles serão rejeitados na maioria dos casos.
Qual a “melhor” proposta?
Seria q(x*|x) ≈(x*)
Neste caso, aceitação A(x,x*) = 1
Na prática, não temos como
amostrar diretamente de (afinal, e’ por isto que estamos usando MCMC)
Assim, temos de conviver com
Good acceptance rate
Quanto e’ uma boa aceitação
A(x,x*)?
Depende do algoritmo:
• q indep: acima de 75%