首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bayesian vs OLS

Bayesian vs OLS
EN

Stack Overflow用户
提问于 2017-06-04 21:10:10
回答 2查看 2.3K关注 0票数 2

我在网上发现了这个问题。有谁能详细解释一下,为什么使用OLS更好?难道只是因为样本数量不够吗?另外,为什么不使用所有的1000个样本来估计先前的分布呢?

我们有1000个随机抽样的数据点。目的是试图从k个回归变量中建立一个只有一个响应变量的回归模型。1. (贝叶斯回归)利用前500个样本来估计假设的先验分布的参数,然后用最后500个样本对后验分布的先验进行更新,在最后的回归模型中使用后验估计。2. (OLS回归)对所有1000个回归变量使用一个简单的普通最小二乘回归模型。

EN

回答 2

Stack Overflow用户

发布于 2017-06-06 18:58:51

“更好”总是一个意见问题,它在很大程度上取决于背景。

与频域OLS方法的优点是:更简单、更快、更容易被更广泛的受众访问(因此更少解释)。我的一位睿智的教授曾经说过:“当一个飞石能起作用的时候,你不需要建造一个原子击击器。”

相对于等价贝叶斯方法的优势:更灵活地进一步开发模型,可以直接建模导出/计算量的后验(还有更多,但这些都是我进行贝叶斯分析的动机)。注意“等效”这个词--在贝叶斯框架中,有些事情你不能用频率论的方法去做。

嘿,这里有一个R的探索,首先模拟数据,然后使用典型的OLS方法。

代码语言:javascript
复制
N <- 1000
x <- 1:N
epsilon <- rnorm(N, 0, 1)
y <- x + epsilon

summary(lm(y ~ x))
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.9053 -0.6723  0.0116  0.6937  3.7880 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) 0.0573955  0.0641910    0.894    0.371    
## x           0.9999997  0.0001111 9000.996   <2e-16 ***
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## 
## Residual standard error: 1.014 on 998 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 8.102e+07 on 1 and 998 DF,  p-value: < 2.2e-16

...and这里有一个等价的贝叶斯回归,使用非信息先验的回归参数和所有1000个数据点。

代码语言:javascript
复制
library(R2jags)
cat('model {
  for (i in 1:N){
    y[i] ~ dnorm(y.hat[i], tau)
    y.hat[i] <- a + b * x[i]
  }
  a ~ dnorm(0, .0001)
  b ~ dnorm(0, .0001)
  tau <- pow(sigma, -2)
  sigma ~ dunif(0, 100)
}', file="test.jags")

test.data <- list(x=x,y=y,N=1000)
test.jags.out <- jags(model.file="test.jags", data=test.data, 
                  parameters.to.save=c("a","b","tau","sigma"), n.chains=3, n.iter=10000)
test.jags.out$BUGSoutput$mean$a
## [1] 0.05842661
test.jags.out$BUGSoutput$sd$a
## [1] 0.06606705
test.jags.out$BUGSoutput$mean$b
## [1] 0.9999976
test.jags.out$BUGSoutput$sd$b
## [1] 0.0001122533

请注意,参数估计和标准误差/标准差基本上是等效的!

这是另一个贝叶斯回归,用前500个数据点来估计先验值,然后用最后500个数据点来估计后验值。

代码语言:javascript
复制
test.data <- list(x=x[1:500],y=y[1:500],N=500)
test.jags.out <- jags(model.file="test.jags", data=test.data, 
                  parameters.to.save=c("a","b","tau","sigma"), n.chains=3, n.iter=10000)

cat('model {
  for (i in 1:N){
    y[i] ~ dnorm(y.hat[i], tau)
    y.hat[i] <- a + b * x[i]
  }
  a ~ dnorm(a_mn, a_prec)
  b ~ dnorm(b_mn, b_prec)
  a_prec <- pow(a_sd, -2)
  b_prec <- pow(b_sd, -2)
  tau <- pow(sigma, -2)
  sigma ~ dunif(0, 100)
}', file="test.jags1")

test.data1 <- list(x=x[501:1000],y=y[501:1000],N=500,
                   a_mn=test.jags.out$BUGSoutput$mean$a,a_sd=test.jags.out$BUGSoutput$sd$a,
                   b_mn=test.jags.out$BUGSoutput$mean$b,b_sd=test.jags.out$BUGSoutput$sd$b)
test.jags.out1 <- jags(model.file="test.jags1", data=test.data1, 
                  parameters.to.save=c("a","b","tau","sigma"), n.chains=3, n.iter=10000)

test.jags.out1$BUGSoutput$mean$a
## [1] 0.01491162
test.jags.out1$BUGSoutput$sd$a
## [1] 0.08513474
test.jags.out1$BUGSoutput$mean$b
## [1] 1.000054
test.jags.out1$BUGSoutput$sd$b
## [1] 0.0001201778

有趣的是,这些推论与OLS的结果相似,但几乎没有那么多。这让我怀疑用来训练优先者的500个数据点在分析中并没有像最后500个数据点那么有分量,而且前面的数据点实际上正在被淘汰,尽管我不确定这一点。

无论如何,我也想不出为什么不使用所有的1000个数据点(以及不提供信息的优先数据),特别是因为我怀疑500+500使用的是前500和最后500不同。

因此,所有这些的答案可能是:I信任OLS和1000点贝叶斯结果比500+500更多,而OLS更简单。

票数 7
EN

Stack Overflow用户

发布于 2020-03-22 18:36:20

在我看来,这不是一个更好的问题,而是一个你习惯的推理方法的问题。

你必须记住,OLS来自于频率学派的推断和估计是donde ML过程,对于这个特殊问题,它与距离最小化的几何论证相吻合(在我个人看来,这是非常奇怪的,因为我们应该是在处理一种亲密现象)。

另一方面,在贝叶斯方法中,通过后验分布进行推断,即先验乘积(表示决策者关于该现象的先前信息)和可能性的乘积。

同样,问题在于你对何种推理方法感到满意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44358806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档