Você está na página 1de 38

Markov Chain Monte Carlo

Cristiano de Carvalho Santos


cristcarvalhosan@gmail.com

Departamento de Estatística,
Universidade Federal de Minas Gerais (UFMG)
Introdução

I Métodos MCMC (Markov Chain Monte Carlo) são métodos


que podem ser utilizados para gerar de uma distribuição que
aproxima uma distribuição alvo f .

I Estes métodos se diferenciam dos métodos anteriores de


simulação por sua natureza iterativa e pelo fato de que eles
são adaptados para problemas muito diversos e difíceis.

I Métodos MCMC englobam um grupo geral de métodos


introduzidos por Metropolis et al. e Hastings para integração
Monte Carlo.
I A abordagem MCMC para amostrar de f (·) é a construção de
uma cadeia de Markov irredutível e aperiódica com
distribuição estacionária f (·), e rodar a cadeia por um tempo
suficientemente longo até que a cadeia convirja
(aproximadamente) para a distribuição estacionária.

I Por generalização da lei forte dos grandes números, se


{X0 , X1 , X2 , . . .} é uma realização de uma cadeia de Markov
ergódica, irredutível com distribuição estacionária φ, então
m
1 X
g(X )m = g(Xt )
m t=1

converge com probabilidade 1 para E [g(X )] quando m → ∞,


em que X tem distribuição estacionária π e a esperança é com
respeito a π.
Algoritmo Metropolis-Hastings

O método inicia em t = 0 com a seleção de X (0) = x (0) , em que


(t)
X (t) = (X1 , . . . , Xp(t) )t , amostrando de alguma distribuição inicial
g, com a condição de que f (x (0) ) > 0.

Dado X (t) = x (t) , o algoritmo para gerar de X (t+1) é dado por:


Passo 1: Gere um candidato X ∗ de uma distribuição proposta
g(·|x (t) ).

Passo 2: Calcule a razão R(x (t) , X ∗ ), em que

f (v)g(u|v)
R(u, v) = .
f (u)g(v|u)
Passo 3: Gere um valor para X (t+1) de acordo com

X ∗ com probabilidade min {R(x (t) , X ∗ ), 1},
X (t+1) =
x (t) caso contrário.

Passo 4: Incremente t e retorne ao passo 1.


Observações:
I É uma boa ideia iniciar o algoritmo Metropolis-Hastings de
múltiplos pontos iniciais para verificar a consistência dos
resultados.
I Quando a proposta é simétrica tal que g(x (t) |x ∗ ) = g(x ∗ |x (t) )
o método é conhecido como algoritmo Metropolis e então
R(x (t) , X ∗ ) = f (X ∗ )/f (x (t) ).
I A cadeia construída via o algoritmo Metropolis-Hastings é de
Markov dado que X (t+1) depende apenas de X (t) .
I Se a cadeia é irredutível e aperiódica depende da distribuição
proposta escolhida e o usuário deve checar estas condições .
Se as condições são atendidas, então a cadeia gerada pelo
algoritmo tem uma distribuição estacionária limite (condições
suficientes para convergência).
Distribuição Proposta
I Uma boa distribuição proposta produz valores candidatos que
cobrem o suporte da distribuição estacionária em um número
razoável de iterações e produz valores candidatos rejeitados
frequentemente também.
I Se a distribuição proposta é difusa se comparada a distribuição
alvo, os valores candidatos serão rejeitados frequentemente e
muitas iterações serão necessárias para explorar
adequadamente o espaço da distribuição alvo.
I Se a distribuição proposta é muito concentrada, então a
cadeia pode permanecer em uma pequena região da
distribuição alvo por muitas iterações enquanto outras regiões
não são adequadamente exploradas.
Cadeias independentes
Suponha que a distribuição proposta é escolhida tal que
g(x ∗ |x (t) ) = g(x ∗ ). Isto produz uma cadeia independente, em que
cada candidato é gerado independentemente do passado. Neste
caso,
f (X ∗ )g(x (t) ) ω∗
R(x (t) , X ∗ ) = = ,
f (x (t) )g(X ∗ ) ω (t)
em que
ω ∗ = f (X ∗ )/g(X ∗ ) e ω (t) = f (x (t) )/g(x (t) ).

I Se ω (t) for muito alto (por exemplo, o valor atual esta na


cauda e g tem cauda mais leve do que f ), a cadeia pode
permanecer por um longo período no valor atual.
I A distribuição proposta g deve assemelhar-se a distribuição
alvo f , mas deve cobrir f nas caudas.
Exemplo: Inferência Bayesiana

Métodos MCMC são ferramentas populares para inferência


Bayesiana, em que alguns dados y são observados com função de
verossimilhança L(θ|y) para o vetor de parâmetros θ que tem
distribuição a priori p(θ).

Inferência Bayesiana é baseada na distribuição a posteriori

p(θ|y) = cp(θ)L(θ|y),

em que c é uma constante desconhecida.


Estratégia simples: Para obter amostras da distribuição a
posteriori (distribuição alvo: f (θ) = p(θ|y)) podemos utilizar a
distribuição a priori como proposta (g(θ ∗ ) = p(θ ∗ )).

Desta forma,
L(θ ∗ |y)
R(x (t) , X ∗ ) =
L(θ (t) |y)
e, por definição, o suporte da distribuição a priori cobre o suporte
da distribuição a posteriori, então a distribuição estacionária desta
cadeia é a distribuição a posteriori desejada.
Outro exemplo

Suponha que observamos dados y1 , . . . , y100 amostrados


independentemente e identicamente distribuídos da mistura de
distribuições

δ N(7, 0, 52 ) + (1 − δ) N(10, 0, 52 ).

Desejamos amostrar da distribuição a posteriori de δ quando


assumimos uma Unif(0, 1) como distribuição a priori para δ.

Neste caso,
n h i
δN(yi |7, 0, 52 ) + (1 − δ)N(yi |10, 0, 52 ) .
Y
p(δ|y) ∝ L(δ|y) =
i=1
Cadeia passeio aleatório

É uma variação do algoritmo em que

X ∗ = x (t) + ,

com  ∼ h(). Neste caso, g(x ∗ |x (t) ) = h(x ∗ − x (t) ).

Escolhas comuns para h incluem:


1. Uniforme sobre uma bola centrada na origem;
2. Normal com média zero;
3. t-Student com parâmetro de escala.

Se a região de suporte de f é contínua e h é positiva na vizinhança


de 0, a cadeia resultante é irredutível e aperiódica.
Exemplo: Continuação das misturas

Suponha que desejamos utilizar uma cadeia com passeio aleatório


para amostrar da distribuição a posteriori de δ.

I Opção 1: adicionar um incremento Unif (−a, a) no valor


corrente δ (t) . Candidatos fora do [0, 1] serão gerados.

I Opção 2: uma melhor abordagem envolve reparametrização


(U = logit{δ} = log {δ/(1 − δ)}). Podemos gerar um passeio
aleatório para U, fazendo U ∗ = u (t) +  com  ∼ Unif (−b, b).
Existem dois caminhos para reparametrizar:
I Rodar a cadeia no espaço de δ. A razão do
Metropolis-Hastings para o valor δ ∗ proposto é dado por

f (δ ∗ )g(logit{δ (t) }|logit{δ ∗ })|J(δ (t) )|


,
f (δ (t) )g(logit{δ ∗ }|logit{δ (t) })|J(δ ∗ )|

em que |J(δ (t) )| é o jacobiano para a transformação δ para u,


avaliado em δ (t) .

I Rodar a cadeia no espaço de U. A razão do


Metropolis-Hastings para o valor u ∗ proposto é dado por

f (logit −1 {u ∗ })|J(u ∗ )|g(u (t) |u ∗ )


,
f (logit −1 {u (t) })|J(u (t) )|g(u ∗ |u (t) )
exp {U}
em que J(u ∗ ) = 1/|J(δ (∗) )| e δ = logit −1 {U} = 1+exp {U}
.
Exemplo: t-Student

Implementação de um amostrador Metropolis versão passeio


aleatório para gerar da distribuição alvo t-Student com ν graus de
liberdade, usando da distribuição proposta N(xt , σ 2 ).

A densidade da t-Student é proporcional a (1 + x 2 /ν)−(ν+1)/2 ,


então

f (Y ) (1 + y 2 /ν)−(ν+1)/2
R(x(t) , y ) = = 2
f (x(t) ) (1 + x(t) /ν)−(ν+1)/2 ,
em que x(t) é o valor atual e y é o valor candidato.
Tabela: Comparando os percentis
Teórico rw1 rw2 rw3 rw4
1% -3.75 23.58 -2.54 -3.15 -3.56
5% -2.13 23.93 -1.70 -1.95 -1.70
10% -1.53 24.16 -1.24 -1.54 -1.26
20% -0.94 24.68 -0.74 -0.90 -0.87
30% -0.57 24.99 -0.39 -0.56 -0.53
40% -0.27 25.34 -0.12 -0.27 -0.21
50% 0.00 25.70 0.15 0.00 0.01
60% 0.27 25.96 0.43 0.22 0.22
70% 0.57 26.12 0.74 0.50 0.50
80% 0.94 26.30 1.19 0.84 0.81
90% 1.53 26.63 2.10 1.49 1.31
95% 2.13 26.87 3.58 2.10 1.93
99% 3.75 27.08 19.63 3.73 3.07
Amostrador de Gibbs

I O amostrador de Gibbs é especificamente adaptado para


distribuições alvo multidimensionais.

I O objetivo é construir uma cadeia de Markov com distribuição


estacionária igual a distribuição alvo f .

I O amostrador de Gibbs é dado por uma amostragem


sequencial de distribuições condicionais univariadas que,
frequentemente, possuem forma fechada conhecida.
Seja X = (X1 , . . . , Xp )t e X −i = (X1 , . . . , Xi−1 , Xi+1 , . . . , Xp )t .
Suponha que as densidade condicional de Xi |X −i = x −i , denotada
por f (xi |x −i ), é facilmente amostrada para i = 1, . . . , p.

O amostrador de Gibbs é dado por:


1. Selecione valores iniciais x (0) e faça t = 0.

2. Gere
(t+1) (t)
X1 |· ∼ f (x1 |x2 , . . . , xp(t) )
(t+1) (t+1) (t)
X2 |· ∼ f (x2 |x1 , x3 , . . . , xp(t) )
..
.
(t+1) (t+1) (t+1) (t+1)
Xp−1 |· ∼ f (xp−1 |x1 , x2 , . . . , xp−2 , xp(t) )
(t+1) (t+1) (t+1)
Xp(t+1) |· ∼ f (xp |x1 , x2 , . . . , xp−1 ),
em que |. denota a mais recente atualização de todos os
outros componentes de X.

3. Aumente t e volte ao passo 2.


A conclusão do passo 2 para todos os elementos de X é conhecida
como um ciclo.
Exemplo

Gere, usando o Gibbs sampling, uma distribuição normal bivariada


com vetor de médias (µ1 , µ2 ), variâncias σ12 e σ22 e correlação ρ.

No caso bivariado, X = (X1 , X2 )t , X −1 = X2 e X −2 = X1 . As


densidades condicionais da distribuição normal bivariada são
normais univariadas com os parâmetros
σ2
E [X2 |x1 ] = µ2 + ρ (x1 − µ1 )
σ1
Var [X2 |x1 ] = (1 − ρ2 )σ22 .
A cadeia pode ser gerada por amostrar de
σ1
f (x1 |x2 ) ∼ Normal( µ1 + ρ (x2 − µ2 ), (1 − ρ2 )σ12 )
σ2
σ2
f (x2 |x1 ) ∼ Normal( µ2 + ρ (x1 − µ1 ), (1 − ρ2 )σ22 )
σ1

Para uma distribuição de (X1 , X2 ), a cada iteração t do amostrador


de Gibbs:
1. Faça (x1 , x2 ) = X (t−1) ;
2. Gere X1∗ de f (X1 |x2 );
3. Atualize x1 = X1∗ ;
4. Gere X2∗ de f (X2 |x1 );
5. Faça X (t) = (X1∗ , X2∗ ).
No R:

s1 <- sqrt(1-rho^2)*sigma1
s2 <- sqrt(1-rho^2)*sigma2

###### generate the chain #####


X[1, ] <- c(mu1, mu2) #initialize

for (i in 2:N) {
x2 <- X[i-1, 2]
m1 <- mu1 + rho * (x2 - mu2) * sigma1/sigma2
X[i, 1] <- rnorm(1, m1, s1)
x1 <- X[i, 1]
m2 <- mu2 + rho * (x1 - mu1) * sigma2/sigma1
X[i, 2] <- rnorm(1, m2, s2)
}
Simulando uma cadeia de tamanho N = 5000 (burn-in de 1000) tal
que ρ = −0, 75, µ1 = 0, µ2 = 2, σ1 = 1 e σ2 = 0, 5.
Verificando alguns resumos da amostra gerada

> colMeans(x)
[1] -0.01008353 2.00231640
> cov(x)
[,1] [,2]
[1,] 1.0779176 -0.4096599
[2,] -0.4096599 0.2668481
> cor(x)
[,1] [,2]
[1,] 1.0000000 -0.7638334
[2,] -0.7638334 1.0000000
Aspectos ligados a implementação

I A blocagem é uma modificação do amostrador de Gibbs.


Elementos de X que são muito correlacionados podem ser
amostrados em um bloco. Isto pode acelerar a convergência
em problemas com um número grande de parâmetros.

I Quando a densidade condicional de um ou mais elementos de


X não possui forma fechada conhecida, é possível passos de
Metropolis-Hastings (ou outro algoritmo) dentro do
Amostrador de Gibbs.
I Escolha da proposta:
I Mixing: Diz respeito a quão rápido uma cadeia consegue
explorar completamente o suporte da distribuição alvo e quão
longe valores gerados devem estar para serem considerados
aproximadamente independentes.
I Reparametrização é a principal estrategia para diminuir
dependência entre os valores gerados e melhorar a
convergência. No entanto, as abordagens utilizadas são
específicas para cada problema abordado.
I Se f /g é limitado, a convergência da cadeia de Markov para
a distribuição estacionaria é rápida no geral.
I Para um algoritmo Metropolis, tem sido sugerido que a taxa
de aceitação deve estar entre 25% e 45%, sendo que a melhor
escolha por volta de 45% para problemas unidimensionais ou
bidimensionais e decrescendo para algo perto de 23% em
problemas com alta dimensão.

I Múltiplas cadeias podem ser consideradas para avaliar a


convergência, principalmente quando a distribuição alvo é
multimodal.

I Burn-in: As primeiras D iterações da cadeia são descartadas


para reduzir a dependência dos valores iniciais e pelo fato de
que a cadeia não ter atingido a distribuição limite.
I Lag: Em geral, é considerada uma sub-amostra sistemática
(toda k-ésima iteração após o burn-in) para diminuir
problemas decorrentes das amostras serem positivamente
correlacionadas. Isto afeta principalmente a estimativa do erro
padrão.
Utilizando Variáveis auxiliares

I Especificamos uma variável auxiliar U e a distribuição


conjunta f (X , U) tal que
Z
f (x ) = f (x , u)du.

I Amostra uma cadeia para atualizar (X , U) usando


Metropolis-Hastings ou Gibbs sampler.

I Uma amostra de X é obtida por marginalização.


Exemplo

Suponha que observamos dados y1 , . . . , y100 amostrados


independentemente e identicamente distribuídos tal que

Yi ∼ δ N(7, 0, 52 ) + (1 − δ) N(10, 0, 52 ).

Podemos escrever

Yi ∼ N(µi , 0, 52 )
µi = 7I{Ui =1} + 10(1 − I{Ui =1} )
Ui ∼ Bernoulli(δ),

em que IA é uma função indicadora do evento A.


Assim,
f (Yi , Ui ) = f (Yi |Ui )f (Ui ).

Desejamos amostrar da distribuição a posteriori de δ quando


assumimos uma Unif(0, 1) como distribuição a priori para δ.

Neste caso,
n
N(yi |µi , 0, 52 )δ ui (1 − δ)1−ui ,
Y
p(δ, U|y) ∝
i=1

em que U = (U1 , . . . , Un ).
No Gibbs,
n n
!
X X
δ|U ∼ Beta ui + 1, n − ui + 1
i=1 i=1
Ui |δ ∼ Bernoulli(pi ),

tal que
2
n o
i −7)
δ exp − (y
2(0.52 )
pi = n 2
i −7)
o n
i −10)
2
o.
δ exp − (y
2(0.52 )
+ (1 − δ) exp − (y2(0.52)
Slice Sampler

Considere MCMC para uma variável univariada X ∼ f (x ), e


suponha que é impossível gerar diretamente de f .
I Introduzimos uma variável auxiliar U e consideramos a
densidade alvo para (X , U) ∼ f (x , u) = f (x )f (u|x ).
I O truque é escolher uma variável U que acelera o mixing para
X.

Na iteração t + 1 do Slice Sampler, geramos X (t+1) e U (t+1) de


acordo com

U (t+1) |x (t) ∼ Unif (0, f (x (t) ))


X (t+1) |u (t+1) ∼ Unif {x : f (x ) ≥ u (t+1) }.
Exemplo

Exemplo dos pesos para mistura no script2...