Sei sulla pagina 1di 41

Uso do WinBugs/OpenBugs

Diego Ignacio Gallardo Mateluna


Instituto de Matemtica e Estat a stica Universidade de So Paulo a

Junho, 2012

Preliminares

O WinBugs e OpenBugs so softwares livres que permitem simular de disa tribuioes a posteriori atravs do uso de algoritmos MCMC. A linguagem c ` e utilizada similar a do R, mas o WinBugs/OpenBugs tem a seguinte estrue ` tura: Especicaao da distribuiao da varivel resposta c c a Especicaao das distribuioes a priori para os parmetros c c ` a Leitura do banco de dados Especicaao dos valores iniciais (optativo) c

Preliminares

Entre as distribuioes que esto dispon c a veis no WinBugs/OpenBugs esto as a seguintes: Distribuioes discretas univariadas c
Bernoulli Binomial Categrica o Binomial Negativa Poisson

Preliminares

Distribuioes cont c nuas univariadas


Beta Chi-squared Double Exponential Exponential Gamma Valor Extremo Generalizado Gamma Generalizada Pareto Generalizada Log-normal Log stica Normal Pareto T-Student Uniforme Weibull

Preliminares

Distribuioes discretas multivariadas c


Multinomial

Distribuioes cont c nuas multivariadas


Dirichlet Normal multivariada T-Student multivariada Wishart

Especicao da distribuio da varivel resposta ca ca a

Por exemplo, se Yi N (, ), i = 1, . . . , n, ento a especicaao do modelo a c e for(i in 1:n) { y[i] ~ dnorm(mu,tau) } IMPORTANTE: N (, ) no WinBugs/OpenBugs especica a distribuiao c Normal de mdia e preciso . A varincia dada por 2 = 1/ . Sempre e a a e bom vericar a parametrizaao utilizada pelo programa atravs do menu e c e help/distributions.

Especicao da distribuio da varivel resposta ca ca a

Se no modelo anterior quisermos uma covarivel xi , fazemos a i = 0 + xi 1 , Nesse caso, a especicaao do modelo c e for(i in 1:n) { mu[i]<-beta0+x[i]*beta1 y[i] ~ dnorm(mu[i],tau) } i = 1, . . . , n.

Especicao da distribuio da varivel resposta ca ca a

Outro exemplo: Se Yi uma varivel binria com probabilidade de sucesso e a a p, ento a especicaao do modelo a c e for(i in 1:n) { y[i] ~ dbern(p) }

Especicao da distribuio da varivel resposta ca ca a

Se quisermos introduzir uma covarivel xi , esta podem ser inclu atravs a da e do parmetro p usando (entre outras) uma das seguintes ligaoes: a c logito: logito(pi ) = 0 + 1 xi . probito: probito(pi ) = 0 + 1 xi . complemento log-log: cloglog(pi ) = 0 + 1 xi . Por exemplo, para o caso de usar a ligao logito, tem-se que a especicaao ca c do modelo e for(i in 1:n) { logit(p[i])<-beta0+beta1*x[i] y[i] ~ dbern(p[i]) } Similarmente, as funoes probito e complemento log-log esto implementadas c a em WinBugs, probit e cloglog respectivamente.

Especicao da distribuio da varivel resposta ca ca a

Um caso mais geral: Suponha que estamos trabalhando com um modelo cuja distribuiao no encontramos nas opoes oferecidas com o WinBugs/OpenBugs, c a c mas sabe-se que a contribuiao de cada indiv c duo na funao de verossimilc hana dada por log fi , em que fi o ncleo da distribuiao da varivel c e e u c a resposta. Uma forma (no a unica) de programar esse modelo no Wina e Bugs/OpenBugs a seguinte: e 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 so vetores auxiliares. a

Especicao da distribuio da varivel resposta ca ca a

Por exemplo: Em anlise de sobrevivncia, suponha que observado Zi = a e e m i , Ci ) e i = I(Ti Ci ) para i = 1, . . . , n. Se assumirmos que Ti n(T Exp(), ento tem-se que a contribuiao na log-verossimilhana de cada oba c c servaao c e log fi = zi + i log , i = 1, . . . , n. Portanto, neste caso a especicaao do modelo c 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]) }

Especicao das distribuies ` priori ca co a

A especicaao das distribuioes a priori bastante simples. Basta utilizar c c ` e alguma das distribuioes dispon c veis no WinBugs/OpenBugs. Para 0 e 1 no modelo linear com covariveis, podemos usar distribuioes que assumam a c valores 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 distribuiao uniforme na reta real e s pode ser c o utilizada para parmetros que assumem valores em (, ). a

Especicao das distribuies ` priori ca co a

No mesmo modelo linear, e como positivo, podem ser usadas as seguintes e distribuioes a priori. c ` Gama(1,1) tau~dgamma(1,1) Log-Normal(0,1) tau~dlnorm(0,1) NT(0,1,0) (Normal Padro Truncada em zero) a tau~dnorm(0,1)I(0,) Para simular o efeito de uma distribuiao imprpria para um parmetro c o a positivo, pode ser utilizada uma distribuiao prpria com uma varincia c o a grande. Por exemplo, se Gama(0.001,0.001), ento a priori E( ) = 1 a e V ar( ) = 1000.

Leitura do banco de dados

A leitura do banco de dados deve ser feita dentro do mesmo cdigo do Wino Bugs/OpenBugs, pois trabalhando diretamente com ele, no pode ser lido a um banco de dados desde um arquivo externo. Sero exemplicadas duas a formas de ler o banco de dados no WinBugs/OpenBugs. Uma primeira opao atravs do formato de lista. Por exemplo, no caso c e e do modelo linear com uma covarivel, os dados podem ser lidos da seguinte a forma: 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 opao ler os dados em colunas. Seguindo com o mesmo exemc e 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 nal da leitura do banco de dados quando utilizada esta forma para ler o banco de dados. e

Especicao de valores iniciais ca

Em modelos complexos, a especicao de valores iniciais pode ajudar a ca ` convergncia das cadeias. Mas, este passo totalmente optativo no programa, e e pois podem ser usados valores iniciais gerados aleatoriamente. Por exemplo, no modelo linear com uma covarivel, podem ser especicados 0 = 0, 1 = 0 a e = 1. list(beta0=0,beta1=0,tau=1)

Usando o programa WinBugs/OpenBugs

Agora que j sabemos a estrutura para utilizar o WinBugs/OpenBugs, vea remos como ele utilizado. Tomaremos como exemplo, o modelo linear com e uma covarivel. a

Usando o programa WinBugs/OpenBugs


Escrevemos o modelo conforme visto anteriormente.

Usando o programa WinBugs/OpenBugs


Vamos ao menu Model/Specication e clicamos em check model.

Se estiver tudo correto, aparecer embaixo a mensagem model is syntactically a correct.

Usando o programa WinBugs/OpenBugs


Na mesma janela, selecionamos os dados e clicamos em load data.

Se estiver tudo correto, aparecer embaixo a mensagem data loaded. a

Usando o programa WinBugs/OpenBugs


Na mesma janela, clicamos em compile.

Se estiver tudo correto, aparecer embaixo a mensagem model compiled. a

Usando o programa WinBugs/OpenBugs


Se desejarmos especicar valores iniciais para os parmetros, selecionamos a a lista inicial e clicamos em load inits. Se no desejamos especicar valores a iniciais, clicamos em gen inits. Adicionalmente, pode ser selecionado o nmero de cadeias que querem ser u utilizadas.

Se estiver tudo correto, aparecer embaixo a mensagem model is initialized. a

Usando o programa WinBugs/OpenBugs


Uma vez especicado o modelo, comeamos a simular nossas cadeias, as que c precisam de um per odo de aquecimento. Para isso, vamos ao menu model/update, especicamos o burn-in e clicamos em update.

Se estiver tudo correto, o WinBugs comear a simular. c a

Usando o programa WinBugs/OpenBugs


Uma vez feito o burn-in, comeamos a simular valores para nossa amostra de c interesse. Para isso, vamos ao menu Inference/Samples.

Usando o programa WinBugs/OpenBugs


Na opao node comeamos a introduzir o nome dos nossos parmetros de c c a interesse. Se o nome vlido, clica a opo set. Repetir o processo para e a ca todos os parmetros do modelo. a

Usando o programa WinBugs/OpenBugs


Uma vez introduzidos todos os parmetros, colocamos * na opao node. Isso a c indica que queremos informaao sob todos os parmetros introduzidos. c a

Usando o programa WinBugs/OpenBugs


Agora j podemos simular valores das distribuioes a posteriori de nossos a c ` parmetros. Selecionamos o tamanho de amostra desejada na janela UPDAa TE TOOL anterior e clicamos em update.

Usando o programa WinBugs/OpenBugs

Agora podemos pedir um resumo para cada parmetro da amostra simulada. a Na janela SAMPLE MONITOR TOOL clicamos em stats e aparecer uma a janela como a seguinte:

Usando o programa WinBugs/OpenBugs

Na janela SAMPLE MONITOR TOOL, clicamos em density e sero propora cionados os grcos das densidades a posteriori marginais estimadas em base a ` as amostras simuladas. `

Usando o programa WinBugs/OpenBugs

Na janela SAMPLE MONITOR TOOL, clicamos em history e sero propora cionados os grcos das series de valores simuladas para cada parmetro. a a

Usando o programa WinBugs/OpenBugs

Na janela SAMPLE MONITOR TOOL, clicamos em autocor e sero propora cionados os grcos de autocorrelaoes parciais das series para cada parmetro. a c a

Usando o programa WinBugs/OpenBugs

Dentro da mesma janela SAMPLE MONITOR TOOL, aparecem outras opoes para a nossa amostra a posteriori simulada. Algumas delas so: c ` a history: mostra a serie de todos os valores simulados para cada parmetro. a accept: mostra a serie com a probabilidade de aceptao para iteraao. ca c auto cor: faz o grco de autocorrelaao parcial da serie dos valores a c simulados para cada parmetro. Util para avaliar a dependncia em a e cada uma das series simuladas. coda: entrega os valores simulados para cada um dos parmetros em a cada iteraao. Util para utiliz-los em outros programas. c a

Algumas dicas
Quando especicar o tamanho de amostra para a simulaao, tenta aumentar c o valor da opao thin para diminuir a correlaao da amostra simulada. Por c c exemplo, thin=10 indica que por cada 10 valores simulados, s considerado oe 1 e os outros 9 so descartados. a

Algumas dicas
As vezes, alm de estar interessados em fazer inferncia sob os parmetros do e e a modelo, tambm estamos interessados em alguma combinaao dos parmetros. e c a Por exemplo, nos poderia interessar o valor esperado para um indiv duo com covarivel xi = 15. Nesse caso, E(Yi ) = 0 + 151 . Portanto, para obter vaa lores simulados da distribuio a posteriori de E(Yi ), basta com denir um ca n adicional imediatamente depois de especicar as prioris. o

Algumas dicas
Se estivermos interessados na varincia de Y em vez da preciso, tambm a a e podemos denir o n 2 = 1/ . o

No esquecer de incluir estas variveis no monitor do sample para que depois a a aparea o resumo delas, suas distribuioes, correlaoes, etc. c c c

Um exemplo para dados binrios a


Suponha que Yi = 1, representa o evento morte em certo experimento de ratos. So disponibilizadas as covariveis x1i n de adrenalina no corpo do a a vel rato depois de correr 10 minutos e se recebeu um tratamento experimental (x2i = 1) ou um placebo (x2i = 0). Se usarmos a ligaao logito, o modelo o c e seguinte.

Um exemplo para dados binrios a

Os resultados para uma amostra de tamanho 2000 e thin=10 so os seguintes. a

Um exemplo de anlise de sobrevivncia a e


Suponha que foi observado a varivel Zi o tempo at uma lmpada explodir, a e a mas os dados esto sujeitos a uma poss censura por conta do oramento a vel c do experimento. Ento, i = 1 indica que a lmpada explodiu dentro do a a prazo estabelecido e i = 0 indica que a lmpada cou funcionando quando a o experimento acabou. Supondo que o tempo at a lmpada explodir segue e a uma distribuiao Exponencial, verica-se que a funao de verossimilhana c c c para o problema e
n

L()

i=1 n

f (zi |)i {S(zi )}1i {ezi }i ezi (1i )


i=1 n

ezi i
i=1

Portanto, a contribuiao da i-sima observaao na verossimilhana ezi i . c e c c e Isso implica que cada observao contribui na log-verossimilhana a quantica c dade zi + i log , como mencionado anteriormente.

Um exemplo de anlise de sobrevivncia a e


Desse jeito, um programa em WinBugs/OpenBugs para este problema o e seguinte:

Um exemplo de anlise de sobrevivncia a e

Os resultados obtidos vem a seguir.

Referncias e

Albert, J. (2007) Bayesian Computation with R. New York: Springer

Potrebbero piacerti anche