回归参数的置信区间:贝叶斯与经典


15

给定两个长度均为n的数组x和y,我拟合了模型y = a + b * x,并希望计算斜率的95%置信区间。这是(b-delta,b + delta),其中b是通常找到的,

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

se.slope是斜率的标准误差。从R获得斜率标准误差的一种方法是summary(lm(y~x))$coef[2,2]

现在,假设我写出给定x和y的斜率的可能性,将其乘以“平坦”的先验,然后使用MCMC技术从后验分布中得出样本m。限定

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

我的问题:(lims[[2]]-lims[[1]])/2大约等于上面定义的增量吗?

附录下面是一个简单的JAGS模型,这两个模型似乎有所不同。

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

我在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")

得到:

经典置信区间:+/- 4.6939

贝叶斯置信区域:+/- 5.1605

通过多次运行,贝叶斯置信区域始终比经典区域宽。那是由于我选择的先验条件吗?

Answers:


9

“问题”在sigma上已经存在。尝试减少信息量

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

在您的Jags文件中。然后更新一堆

update(10000)

获取参数,并总结您的兴趣量。它应该与经典版本相当一致。

澄清:更新只是为了确保您可以决定要选择的先验条件,尽管像这样的具有漫长先验和随机起始值的模型的链收敛时间更长。在实际问题中,您需要在汇总任何内容之前先检查收敛性,但是收敛性并不是我认为的示例中的主要问题。


@Ringold,什么有效?先前关于sigma还是更新?或两者?您是否对它们进行了单独测试?
好奇

应该是sigma <- pow(tau, -1/2)sigma <- 1/sqrt(tau)
好奇

@Tomas,非常正确。错字固定。
2012年

尽管坦率地说,这可能是差异的根源,因为它在原始代码中……
conjugateprior

6

如果从b的后验取样| y并计算lims(根据您的定义),它应与(b-delta,b + delta)相同。具体来说,如果您计算b |的后验分布,在平坦先验条件下的y与b的经典采样分布相同。

有关更多详细信息,请参阅:Gelman等。(2003)。贝叶斯数据分析。CRC出版社。第3.6节

编辑:

Ringold,您观察到的行为与贝叶斯思想一致。贝叶斯可信区间(CI)通常比经典区间更宽。原因是,正如您正确地猜到的,由于参数未知,超优先考虑了可变性。

对于此类简单情况(一般而言):

贝叶斯CI>经验贝叶斯CI>古典CI; > ==更宽


我使用JAGS添加了一些代码,但似乎得到了不同的答案。我的错误在哪里?这是由于先验而发生的吗?
Ringold

现在我很困惑。首先,您说平坦的先验条件下b | y的后验分布与b的经典采样分布相同。然后您说贝叶斯CI比经典的更宽。如果分布相同,怎么会更宽?
Ringold 2011年

抱歉-我应该告诉@CP他的评论中的内容。从理论上讲,在平坦先验条件下的b | y和经典CI是相同的,但是除非您使用CP建议的非常分散的先验条件并使用大量MCMC迭代,否则在JAGS中实际上无法做到这一点。
suncoolsu 2011年

我已经合并了您的帐户,因此您可以编辑问题并添加评论。但是,请单击此处注册您的帐户:stats.stackexchange.com/users/login ; 您可以在几秒钟内使用Gmail OpenID进行操作,而不必再在此处丢失帐户了。

谢谢,我已经注册了。非常感谢那些回答了这个问题的人。我会先尝试伽玛。
Ringold 2011年

5

对于线性高斯模型,最好使用Bayesm软件包。它实现了先验半共轭系列,而Jeffreys先验是该系列的极限情况。请参阅下面的示例。这些是经典的模拟,无需使用MCMC。

我不记得回归参数的可信度区间是否与通常的最小二乘置信区间完全相同,但是无论如何它们都非常接近。

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

3

鉴于经典线性分析和贝叶斯分析之间的简单线性回归在分析上与Jeffrey的先前方法在分析上是相同的,两者都是分析性的,因此采用诸如MCMC的数值方法进行贝叶斯分析似乎有点奇怪。MCMC只是一个数值积分工具,它允许将贝叶斯方法用于在分析上难以解决的更复杂的问题,就像牛顿-拉普森或费舍尔计分法是解决难以解决的经典问题的数值方法一样。

使用与1 / s成正比的Jeffrey先验p(a,b,s)(其中s是误差的标准偏差)的后验分布p(b | y)是学生t分布,其位置为b_ols,标度为se_b_ols(“ ols”代表“普通最小二乘”估算值),n-2个自由度。但是b_ols的采样分布也是一个学生t,其位置为b,标度为se_b_ols,自由度为n-2。因此,它们是相同的,只是b和b_ols已被交换,因此在创建间隔时,置信区间的“ est +-界限”在可信区间中被反转为“ est-+界限”。

因此,置信区间和可信区间在分析上是相同的,并且使用哪种方法都无关紧要(前提是没有其他先验信息)-因此采用计算上更便宜的方法(例如,矩阵求逆较少的方法)。MCMC的结果表明,与MCMC一起使用的特定近似值给出了一个可信区间,该区间与精确的分析可信区间相比太大。这可能是一件好事(尽管我们希望近似值更好),近似贝叶斯解似乎比精确贝叶斯解更保守。


真的不那么奇怪。使用数值方法找到可以解析解决的问题的答案的原因之一是要确保正确使用该软件。
Ringold 2011年

1
Fβ0β1个βpσÿ>10XX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.