uso do winbugs/openbugs - ime-uspmbranco/aula3diego.pdf · do modelo linear com uma covari avel, os...

41
Uso do WinBugs/OpenBugs Diego Ignacio Gallardo Mateluna Instituto de Matem´atica e Estat´ ıstica Universidade de S˜ao Paulo Junho, 2012

Upload: dinhhuong

Post on 11-Feb-2019

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Uso do WinBugs/OpenBugs

Diego Ignacio Gallardo Mateluna

Instituto de Matematica e EstatısticaUniversidade de Sao Paulo

Junho, 2012

Page 2: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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)

Page 3: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Preliminares

Entre as distribuicoes que estao disponıveis no WinBugs/OpenBugs estao asseguintes:

Distribuicoes discretas univariadasBernoulliBinomialCategoricaBinomial NegativaPoisson

Page 4: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Preliminares

Distribuicoes contınuas univariadasBetaChi-squaredDouble ExponentialExponentialGammaValor Extremo GeneralizadoGamma GeneralizadaPareto GeneralizadaLog-normalLogısticaNormalParetoT-StudentUniformeWeibull

Page 5: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Preliminares

Distribuicoes discretas multivariadasMultinomial

Distribuicoes contınuas multivariadasDirichletNormal multivariadaT-Student multivariadaWishart

Page 6: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 7: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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)

}

Page 8: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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)

}

Page 9: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 10: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 11: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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])

}

Page 12: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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 (−∞,∞).

Page 13: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 14: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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))

Page 15: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 16: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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)

Page 17: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 18: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Usando o programa WinBugs/OpenBugs

Escrevemos o modelo conforme visto anteriormente.

Page 19: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 20: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 21: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Usando o programa WinBugs/OpenBugs

Na mesma janela, clicamos em compile.

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

Page 22: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 23: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 24: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 25: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 26: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Usando o programa WinBugs/OpenBugs

Uma vez introduzidos todos os parametros, colocamos * na opcao node. Issoindica que queremos informacao sob todos os parametros introduzidos.

Page 27: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 28: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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:

Page 29: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 30: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 31: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 32: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 33: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 34: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 35: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 36: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 37: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Um exemplo para dados binarios

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

Page 38: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

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.

Page 39: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Um exemplo de analise de sobrevivencia

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

Page 40: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Um exemplo de analise de sobrevivencia

Os resultados obtidos vem a seguir.

Page 41: Uso do WinBugs/OpenBugs - IME-USPmbranco/aula3Diego.pdf · do modelo linear com uma covari avel, os dados podem ser lidos da seguinte forma: list(n=10,x=c(15,24,14,30,24,21,13,14,17,18),

Referencias

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