Análise Bayesiana de Dados
Márcia D'Elia Branco
Universidade de São Paulo Instituto de Matemática e Estatística
Aplicações em R usando MCMC
Os algoritmos de Metropolis-Hasting com propostas Passeio Aleatório e Independente estão implementados no pacote Learn Bayes, respectivamente, nas seguintes funções: rwmetrop e indepmetrop .
A proposta passeio aleatório normal é dada por θ∗ =θt−1+sZ
onde Z tem distribuição normal multivariada com vetor de médias zero e matriz de covariâncias sV .
A proposta independente considera uma normal multivariada com vetor de médias e matriz de covariâncias xados.
MCMC no Learn Bayes do R
É necessário primeiro escrever a função logposterior.
Se necessário, reparametrizar a posteriori de maneira a ter todos os parâmetros assumindo valores reais (Rd).
Usualmente considera-se a aproximação normal da posteriori para denir as propostas.
Para obtenção do vetor de médias e matriz de covariância da aproximação normal a posteriori, usa-se a função laplace
Exemplo 1: Erros Cauchy
x = (x1, . . . ,xn)amostra de uma v.a. Cauchy não centrada f(x |µ, σ) =
πσ(1+z2)−1
onde z= (x−µ)/σ. Priori não informativa f(µ, σ)∝σ−1 A log posteriori será proporcional a
n
X
i=1
−λ−log 1+exp(−2λ)(xi −µ)2 comλ=logσ .
MCMC no Learn Bayes do R
Escrevendo a função a posteriori no R cauchyerrorpost= function(theta,y) { mu=theta[,1]; lambda=theta[,2]
sigma=exp(lambda) val=0*mu
for ( i in 1:length(y))
{val=val+log(dt((y[i]-mu)/sigma , df=1) / sigma } return(val) }
Aplicando no conjunto de dados darwin para a variável dierence
> data(darwin)
> attach(darwin)
Obtendo os valores para aproximação normal da posteriori
> laplace(cauchyerrorpost, array(c(21.6,3.6),c(1,2),10, dierence) Resulta no seguinte vetor de moda a posteriori(24.7,2.77) para (µ, λ)e na seguinte matriz de covariâncias:
34.965 0.367 0.367 0.138
Desenhando o gráco de contornos da verdadeira densidade a posteriori conjunta.
> mycontour(cauchyerrorpost, c(-10,60,1,4.5), dierence)
> title(xlab=mu, ylab=log sigma)
Gráco de contornos posteriori modelo cauchy
Desenhando o gráco de contornos da aproximação normal para posteriori.
> tlaplace = laplace(cauchyerrorpost, array(c(21.6,3.6),c(1,2),10, dierence)
> mycontour(lbinorm, c(-10,60,1,4.5), list(m=tlaplace$mode, v=tlaplace$var))
> title(xlab=mu, ylab=log sigma)
Gráco de contornos posteriori modelo cauchy
Incluindo no gráco os valores simulados da posteriori via algoritmo de MH.
>proposal=list(var=tlaplace$var, scale=2.5)
> start=array(c(20,3),c(1,2))
> m=1000
> s=rwmetrop(cauchyerrorpost, proposal, start,m,dierence)
> mycontour(cauchyerrorpost, c(-10,60,1,4.5), dierence)
> title(xlab=mu, ylab=log sigma)
> points(s$par[,1],s$par[,2])