Intervalos de confiança para parâmetros de regressão: Bayesiano x clássico

15

Dadas duas matrizes x e y, ambas de comprimento n, ajustei um modelo y = a + b * x e quero calcular um intervalo de confiança de 95% para a inclinação. Este é (b - delta, b + delta) onde b é encontrado da maneira usual e

delta = qt(0.975,df=n-2)*se.slope

e se.slope é o erro padrão na inclinação. Uma maneira de obter o erro padrão da inclinação de R é summary(lm(y~x))$coef[2,2].

Agora, suponha que eu escreva a probabilidade da inclinação dada x e y, multiplique isso por um "plano" anterior e use uma técnica MCMC para extrair uma amostra m da distribuição posterior. Definir

lims = quantile(m,c(0.025,0.975))

Minha pergunta: é (lims[[2]]-lims[[1]])/2aproximadamente igual ao delta, conforme definido acima?

Adendo Abaixo está um modelo JAGS simples em que esses dois parecem ser diferentes.

model {
 for (i in 1:N) {
  y[i] ~ dnorm(mu[i], tau)
  mu[i] <- a + b * x[i]
 }
 a ~ dnorm(0, .00001)
 b ~ dnorm(0, .00001)
 tau <- pow(sigma, -2)
 sigma ~ dunif(0, 100)
}

Eu executo o seguinte em R:

N <- 10
x <- 1:10
y <- c(30.5,40.6,20.5,59.1,52.5,
       96.0,121.4,78.9,112.1,128.4)
lin <- lm(y~x)

#Calculate delta for a 95% confidence interval on the slope
delta.lm <- qt(0.975,df=N-2)*summary(lin)$coef[2,2]

library('rjags')
jags <- jags.model('example.bug', data = list('x' = x,'y' = y,'N' = N),
                   n.chains = 4,n.adapt = 100)
update(jags, 1000)
params <- jags.samples(jags,c('a', 'b', 'sigma'),7500)
lims <- quantile(params$b,c(0.025,0.975))
delta.bayes <- (lims[[2]]-lims[[1]])/2

cat("Classical confidence region: +/-",round(delta.lm, digits=4),"\n")
cat("Bayesian confidence region:  +/-",round(delta.bayes,digits=4),"\n")

E pegue:

Região de confiança clássica: +/- 4.6939

Região de confiança bayesiana: +/- 5.1605

Ao executar isso várias vezes, a região de confiança bayesiana é consistentemente mais ampla que a região clássica. Então isso é devido aos priores que eu escolhi?

Ringold
fonte

Respostas:

9

O "problema" está no sigma. Tente uma configuração menos informativa

tau ~ dgamma(1.0E-3,1.0E-3)
sigma <- pow(tau, -1/2)

no seu arquivo jags. Então atualize um monte

update(10000)

pegue os parâmetros e resuma sua quantidade de interesse. Deve alinhar-se razoavelmente bem com a versão clássica.

Esclarecimento: A atualização é apenas para garantir que você chegue aonde quer que esteja antes de decidir, embora cadeias de modelos como este com anteriores difusos e valores iniciais aleatórios demorem mais tempo para convergir. Em problemas reais, você verificaria a convergência antes de resumir qualquer coisa, mas a convergência não é a questão principal no seu exemplo, eu acho.

conjugado
fonte
@ Ringold, o que funcionou? O anterior no sigma ou a atualização? Ou ambos? Você os testou separadamente?
curioso
deve ser sigma <- pow(tau, -1/2)ousigma <- 1/sqrt(tau)
Curioso
@ Tomas, muito bem. Erro de digitação corrigido.
conjugateprior
Embora, francamente, que pode ser a fonte da diferença, já que é no código original ...
conjugateprior
6

Se você provar da parte posterior de b | ye calcular lims (como você define), deve ser o mesmo que (b - delta, b + delta). Especificamente, se você calcular a distribuição posterior de b | y sob um plano anterior, é igual à distribuição clássica de amostragem de b.

Para mais detalhes, consulte: Gelman et al. (2003). Análise Bayesiana de Dados. CRC Pressione. Seção 3.6

Editar:

Ringold, o comportamento observado por você é consistente com a idéia bayesiana. O Intervalo Credível Bayesiano (IC) é geralmente mais amplo que os clássicos. E o motivo é, como você adivinhou corretamente, os hiperpriors levados em conta a variabilidade por causa dos parâmetros desconhecidos.

Para cenários simples como estes (NÃO EM GERAL):

IC Baysiano> CI Bayesiano Empírico> CI Clássico; > == mais amplo

suncoolsu
fonte
Adicionei algum código usando JAGS, onde parece que estou recebendo uma resposta diferente. Onde está meu erro? Isso está acontecendo por causa dos anteriores?
quer
Agora estou confuso. Primeiro você disse que a distribuição posterior de b | y sob um plano anterior é igual à distribuição clássica de amostragem de b. Então você disse que o IC Bayesiano é mais amplo que o clássico. Como poderia ser mais amplo se as distribuições forem iguais?
Ringold
Desculpe - eu deveria ter dito o que o @CP sugeriu nos comentários dele. Teoricamente, b | y sob um IC simples anterior e clássico são os mesmos, mas você não pode fazer isso praticamente no JAGS, a menos que use um anterior muito muito difuso, como o CP sugerido, e use muitas iterações do MCMC.
suncoolsu
Mesclamos suas contas para que você possa editar suas perguntas e adicionar comentários. No entanto, registre sua conta clicando aqui: stats.stackexchange.com/users/login ; você pode usar o GID OpenID para fazer isso em alguns segundos e não perderá mais a sua conta aqui.
Obrigado, eu me registrei. E muito obrigado a quem respondeu a essa pergunta. Vou tentar a gama antes.
Ringold
5

Para modelos gaussianos lineares, é melhor usar o pacote bayesm. Ele implementa a família semi-conjugada de priores, e o prior de Jeffreys é um caso limite dessa família. Veja meu exemplo abaixo. Estas são simulações clássicas, não há necessidade de usar o MCMC.

Não me lembro se os intervalos de credibilidade sobre os parâmetros de regressão são exatamente os mesmos que os intervalos normais de confiança dos mínimos quadrados, mas, em qualquer caso, eles são muito próximos.

> # required package
> library(bayesm)
> # data
> age <- c(35,45,55,65,75)
> tension <- c(114,124,143,158,166)
> y <- tension
> # model matrix
> X <- model.matrix(tension~age)
> # prior parameters
> Theta0 <- c(0,0)
> A0 <- 0.0001*diag(2)
> nu0 <- 0
> sigam0sq <- 0
> # number of simulations
> n.sims <- 5000
> # run posterior simulations
> Data <- list(y=y,X=X)
> Prior <- list(betabar=Theta0, A=A0, nu=nu0, ssq=sigam0sq)
> Mcmc <- list(R=n.sims)
> bayesian.reg <- runireg(Data, Prior, Mcmc)
> beta.sims <- t(bayesian.reg$betadraw) # transpose of bayesian.reg$betadraw
> sigmasq.sims <- bayesian.reg$sigmasqdraw
> apply(beta.sims, 1, quantile, probs = c(0.025, 0.975))
[,1] [,2]
2.5% 53.33948 1.170794
97.5% 77.23371 1.585798
> # to be compared with: 
> frequentist.reg <- lm(tension~age)
Stéphane Laurent
fonte
3

Dado que a regressão linear simples é analiticamente idêntica entre a análise clássica e bayesiana com a anterior de Jeffrey, ambas analíticas, parece um pouco estranho recorrer a um método numérico como o MCMC para fazer a análise bayesiana. O MCMC é apenas uma ferramenta de integração numérica, que permite que os métodos bayesianos sejam usados ​​em problemas mais complicados que são analiticamente intratáveis, assim como Newton-Rhapson ou Fisher Scoring são métodos numéricos para resolver problemas clássicos que são intratáveis.

A distribuição posterior p (b | y) usando o p (a, b, s) anterior de Jeffrey proporcional a 1 / s (onde s é o desvio padrão do erro) é uma distribuição t de estudante com o local b_ols, escala se_b_ols (" ("estimativa dos mínimos quadrados ordinários") e n-2 graus de liberdade. Mas a distribuição amostral de b_ols também é um aluno t com o local b, escala se_b_ols e n-2 graus de liberdade. Portanto, eles são idênticos, exceto que b e b_ols foram trocados; portanto, quando se trata de criar o intervalo, o "limite est + -" do intervalo de confiança é revertido para um "limite est - +" no intervalo credível.

Portanto, o intervalo de confiança e o intervalo credível são analiticamente idênticos, e não importa qual método é usado (desde que não haja informações prévias adicionais). O que o seu resultado com o MCMC mostra é que a aproximação específica usada com o MCMC fornece um intervalo credível que é muito amplo em comparação com o intervalo exato e credível analítico. Provavelmente, é uma coisa boa (embora desejemos que a aproximação seja melhor) que a solução bayesiana aproximada pareça mais conservadora do que a solução bayesiana exata.

probabilityislogic
fonte
Na verdade, não é tão estranho. Uma razão para usar um método numérico para encontrar uma resposta para um problema que pode ser resolvido analiticamente é garantir que alguém esteja usando o software corretamente.
Ringold
1
Outro motivo para usar simulações: você também obtém simulações posteriores para qualquer função f(β0 0,β1,...,βp,σ)dos parâmetros. Por exemplo, eu uso essa possibilidade para obter um intervalo de credibilidade sobre a probabilidadePr(Y>10x) por algum valor xda covariável. Não sei como obter um intervalo de confiança freqüentista sobre essa probabilidade.
Stéphane Laurent