Uso do WinBugs/OpenBugs
Diego Ignacio Gallardo Mateluna
Instituto de Matematica e EstatısticaUniversidade de Sao Paulo
Junho, 2012
Preliminares
O WinBugs e OpenBugs sao softwares livres que permitem simular de dis-tribuicoes a posteriori atraves do uso de algoritmos MCMC. A linguagemutilizada e similar a do R, mas o WinBugs/OpenBugs tem a seguinte estru-tura:
Especificacao da distribuicao da variavel resposta
Especificacao das distribuicoes a priori para os parametros
Leitura do banco de dados
Especificacao dos valores iniciais (optativo)
Preliminares
Entre as distribuicoes que estao disponıveis no WinBugs/OpenBugs estao asseguintes:
Distribuicoes discretas univariadasBernoulliBinomialCategoricaBinomial NegativaPoisson
Preliminares
Distribuicoes contınuas univariadasBetaChi-squaredDouble ExponentialExponentialGammaValor Extremo GeneralizadoGamma GeneralizadaPareto GeneralizadaLog-normalLogısticaNormalParetoT-StudentUniformeWeibull
Preliminares
Distribuicoes discretas multivariadasMultinomial
Distribuicoes contınuas multivariadasDirichletNormal multivariadaT-Student multivariadaWishart
Especificacao da distribuicao da variavel resposta
Por exemplo, se Yi ∼ N(µ, τ), i = 1, . . . , n, entao a especificacao do modeloe
for(i in 1:n)
{
y[i] ~ dnorm(mu,tau)
}
IMPORTANTE: N(µ, τ) no WinBugs/OpenBugs especifica a distribuicaoNormal de media µ e precisao τ . A variancia e dada por σ2 = 1/τ . Sempree bom verificar a parametrizacao utilizada pelo programa atraves do menuhelp/distributions.
Especificacao da distribuicao da variavel resposta
Se no modelo anterior quisermos uma covariavel xi, fazemos
µi = β0 + xiβ1, i = 1, . . . , n.
Nesse caso, a especificacao do modelo e
for(i in 1:n)
{
mu[i]<-beta0+x[i]*beta1
y[i] ~ dnorm(mu[i],tau)
}
Especificacao da distribuicao da variavel resposta
Outro exemplo: Se Yi e uma variavel binaria com probabilidade de sucessop, entao a especificacao do modelo e
for(i in 1:n)
{
y[i] ~ dbern(p)
}
Especificacao da distribuicao da variavel resposta
Se quisermos introduzir uma covariavel xi, esta podem ser incluıda atravesdo parametro p usando (entre outras) uma das seguintes ligacoes:
logito: logito(pi) = β0 + β1xi.
probito: probito(pi) = β0 + β1xi.
complemento log-log: cloglog(pi) = β0 + β1xi.
Por exemplo, para o caso de usar a ligacao logito, tem-se que a especificacaodo modelo e
for(i in 1:n)
{
logit(p[i])<-beta0+beta1*x[i]
y[i] ~ dbern(p[i])
}
Similarmente, as funcoes probito e complemento log-log estao implementadasem WinBugs, probit e cloglog respectivamente.
Especificacao da distribuicao da variavel resposta
Um caso mais geral: Suponha que estamos trabalhando com um modelo cujadistribuicao nao encontramos nas opcoes oferecidas com o WinBugs/OpenBugs,mas sabe-se que a contribuicao de cada indivıduo na funcao de verossimil-hanca e dada por log fi, em que fi e o nucleo da distribuicao da variavelresposta. Uma forma (nao e a unica) de programar esse modelo no Win-Bugs/OpenBugs e a seguinte:
c<-10000
for(i in 1:n)
{
logvero[i]<-logfi (especificar a forma de log fi)
zeros[i]<-0
aux[i]<--logvero[i]+c
zeros[i] ~ dpois(aux[i])
}
Neste caso, zeros e aux sao vetores auxiliares.
Especificacao da distribuicao da variavel resposta
Por exemplo: Em analise de sobrevivencia, suponha que e observado Zi =mın(Ti, Ci) e δi = I(Ti ≤ Ci) para i = 1, . . . , n. Se assumirmos que Ti ∼Exp(λ), entao tem-se que a contribuicao na log-verossimilhanca de cada ob-servacao e
log fi = −λzi + δi log λ, i = 1, . . . , n.
Portanto, neste caso a especificacao do modelo e
c<-10000
for(i in 1:n)
{
logvero[i]<--z[i]*lambda+delta[i]*log(lambda)
zeros[i]<-0
aux[i]<--logvero[i]+c
zeros[i] ~ dpois(aux[i])
}
Especificacao das distribuicoes a priori
A especificacao das distribuicoes a priori e bastante simples. Basta utilizaralguma das distribuicoes disponıveis no WinBugs/OpenBugs. Para β0 e β1
no modelo linear com covariaveis, podemos usar distribuicoes que assumamvalores nos reais. Alguns exemplos:
N(0, 10)
beta0~dnorm(0,0.1)
beta1~dnorm(0,0.1)
t5(0, 1)
beta0~dt(0,1,5)
beta1~dt(0,1,5)
Priori “Uniforme na reta”.
beta0~dflat()
beta1~dflat()
Esta ultima representa a distribuicao uniforme na reta real e so pode serutilizada para parametros que assumem valores em (−∞,∞).
Especificacao das distribuicoes a priori
No mesmo modelo linear, e como τ e positivo, podem ser usadas as seguintesdistribuicoes a priori.
Gama(1,1)
tau~dgamma(1,1)
Log-Normal(0,1)
tau~dlnorm(0,1)
NT(0,1,0) (Normal Padrao Truncada em zero)
tau~dnorm(0,1)I(0,)
Para “simular” o efeito de uma distribuicao impropria para um parametropositivo, pode ser utilizada uma distribuicao propria com uma varianciagrande. Por exemplo, se τ ∼Gama(0.001,0.001), entao a priori E(τ) = 1e V ar(τ) = 1000.
Leitura do banco de dados
A leitura do banco de dados deve ser feita dentro do mesmo codigo do Win-Bugs/OpenBugs, pois trabalhando diretamente com ele, nao pode ser lidoum banco de dados desde um arquivo externo. Serao exemplificadas duasformas de ler o banco de dados no WinBugs/OpenBugs.Uma primeira opcao e atraves do formato de lista. Por exemplo, no casodo modelo linear com uma covariavel, os dados podem ser lidos da seguinteforma:
list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),
y=c(5,3,2.5,2,1.2,6.7,4,3.4,2.9,1))
Leitura do banco de dados
Uma segunda opcao e ler os dados em colunas. Seguindo com o mesmo exem-plo, os dados podem ser lidos da seguinte forma:
list(n=10)
x[] y[]
15 5
24 3
14 2.5
30 2
24 1.2
21 6.7
13 4
14 3.4
17 2.9
18 1
END
E muito importante colocar o comando END no final da leitura do banco dedados quando e utilizada esta forma para ler o banco de dados.
Especificacao de valores iniciais
Em modelos complexos, a especificacao de valores iniciais pode ajudar aconvergencia das cadeias. Mas, este passo e totalmente optativo no programa,pois podem ser usados valores iniciais gerados aleatoriamente. Por exemplo,no modelo linear com uma covariavel, podem ser especificados β0 = 0, β1 = 0e τ = 1.
list(beta0=0,beta1=0,tau=1)
Usando o programa WinBugs/OpenBugs
Agora que ja sabemos a estrutura para utilizar o WinBugs/OpenBugs, ve-remos como ele e utilizado. Tomaremos como exemplo, o modelo linear comuma covariavel.
Usando o programa WinBugs/OpenBugs
Escrevemos o modelo conforme visto anteriormente.
Usando o programa WinBugs/OpenBugs
Vamos ao menu Model/Specification e clicamos em check model.
Se estiver tudo correto, aparecera embaixo a mensagem model is syntacticallycorrect.
Usando o programa WinBugs/OpenBugs
Na mesma janela, selecionamos os dados e clicamos em load data.
Se estiver tudo correto, aparecera embaixo a mensagem data loaded.
Usando o programa WinBugs/OpenBugs
Na mesma janela, clicamos em compile.
Se estiver tudo correto, aparecera embaixo a mensagem model compiled.
Usando o programa WinBugs/OpenBugs
Se desejarmos especificar valores iniciais para os parametros, selecionamosa lista inicial e clicamos em load inits. Se nao desejamos especificar valoresiniciais, clicamos em gen inits.Adicionalmente, pode ser selecionado o numero de cadeias que querem serutilizadas.
Se estiver tudo correto, aparecera embaixo a mensagem model is initialized.
Usando o programa WinBugs/OpenBugs
Uma vez especificado o modelo, comecamos a simular nossas cadeias, as queprecisam de um perıodo de aquecimento. Para isso, vamos ao menu mo-del/update, especificamos o burn-in e clicamos em update.
Se estiver tudo correto, o WinBugs comecara a simular.
Usando o programa WinBugs/OpenBugs
Uma vez feito o burn-in, comecamos a simular valores para nossa amostra deinteresse. Para isso, vamos ao menu Inference/Samples.
Usando o programa WinBugs/OpenBugs
Na opcao node comecamos a introduzir o nome dos nossos parametros deinteresse. Se o nome e valido, clica a opcao set. Repetir o processo paratodos os parametros do modelo.
Usando o programa WinBugs/OpenBugs
Uma vez introduzidos todos os parametros, colocamos * na opcao node. Issoindica que queremos informacao sob todos os parametros introduzidos.
Usando o programa WinBugs/OpenBugs
Agora ja podemos simular valores das distribuicoes a posteriori de nossosparametros. Selecionamos o tamanho de amostra desejada na janela UPDA-TE TOOL anterior e clicamos em update.
Usando o programa WinBugs/OpenBugs
Agora podemos pedir um resumo para cada parametro da amostra simulada.Na janela SAMPLE MONITOR TOOL clicamos em stats e aparecera umajanela como a seguinte:
Usando o programa WinBugs/OpenBugs
Na janela SAMPLE MONITOR TOOL, clicamos em density e serao propor-cionados os graficos das densidades a posteriori marginais estimadas em baseas amostras simuladas.
Usando o programa WinBugs/OpenBugs
Na janela SAMPLE MONITOR TOOL, clicamos em history e serao propor-cionados os graficos das series de valores simuladas para cada parametro.
Usando o programa WinBugs/OpenBugs
Na janela SAMPLE MONITOR TOOL, clicamos em autocor e serao propor-cionados os graficos de autocorrelacoes parciais das series para cada parametro.
Usando o programa WinBugs/OpenBugs
Dentro da mesma janela SAMPLE MONITOR TOOL, aparecem outrasopcoes para a nossa amostra a posteriori simulada. Algumas delas sao:
history: mostra a serie de todos os valores simulados para cadaparametro.
accept: mostra a serie com a probabilidade de aceptacao para iteracao.
auto cor: faz o grafico de autocorrelacao parcial da serie dos valoressimulados para cada parametro. Util para avaliar a dependencia emcada uma das series simuladas.
coda: entrega os valores simulados para cada um dos parametros emcada iteracao. Util para utiliza-los em outros programas.
Algumas dicas
Quando especificar o tamanho de amostra para a simulacao, tenta aumentaro valor da opcao thin para diminuir a correlacao da amostra simulada. Porexemplo, thin=10 indica que por cada 10 valores simulados, so e considerado1 e os outros 9 sao descartados.
Algumas dicas
As vezes, alem de estar interessados em fazer inferencia sob os parametros domodelo, tambem estamos interessados em alguma combinacao dos parametros.Por exemplo, nos poderia interessar o valor esperado para um indivıduo comcovariavel xi = 15. Nesse caso, E(Yi) = β0 + 15β1. Portanto, para obter va-lores simulados da distribuicao a posteriori de E(Yi), basta com definir umno adicional imediatamente depois de especificar as prioris.
Algumas dicas
Se estivermos interessados na variancia de Y em vez da precisao, tambempodemos definir o no σ2 = 1/τ .
Nao esquecer de incluir estas variaveis no monitor do sample para que depoisapareca o resumo delas, suas distribuicoes, correlacoes, etc.
Um exemplo para dados binarios
Suponha que Yi = 1, representa o evento morte em certo experimento deratos. Sao disponibilizadas as covariaveis x1i nıvel de adrenalina no corpo dorato depois de correr 10 minutos e se recebeu um tratamento experimental(x2i = 1) ou um placebo (x2i = 0). Se usarmos a ligacao logito, o modelo e oseguinte.
Um exemplo para dados binarios
Os resultados para uma amostra de tamanho 2000 e thin=10 sao os seguintes.
Um exemplo de analise de sobrevivencia
Suponha que foi observado a variavel Zi o tempo ate uma lampada explodir,mas os dados estao sujeitos a uma possıvel censura por conta do orcamentodo experimento. Entao, δi = 1 indica que a lampada explodiu dentro doprazo estabelecido e δi = 0 indica que a lampada ficou funcionando quandoo experimento acabou. Supondo que o tempo ate a lampada explodir segueuma distribuicao Exponencial, verifica-se que a funcao de verossimilhancapara o problema e
L(λ) ∝n∏i=1
f(zi|λ)δi{S(zi)}1−δi
∝n∏i=1
{λe−λzi}δie−λzi(1−δi)
∝n∏i=1
e−λziλδi
Portanto, a contribuicao da i-esima observacao na verossimilhanca e e−λziλδi .Isso implica que cada observacao contribui na log-verossimilhanca a quanti-dade −λzi + δi log λ, como mencionado anteriormente.
Um exemplo de analise de sobrevivencia
Desse jeito, um programa em WinBugs/OpenBugs para este problema e oseguinte:
Um exemplo de analise de sobrevivencia
Os resultados obtidos vem a seguir.
Referencias
Albert, J. (2007) Bayesian Computation with R. New York: Springer
Top Related