R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

贝叶斯分析的许多介绍使用相对简单的教学实例 。虽然这可以很好地介绍贝叶斯原理,但将这些原则扩展到回归并不是直截了当的。

这篇文章将概述这些原则如何扩展到简单的线性回归。在此过程中,我将推导出感兴趣的参数的后验条件分布,呈现用于实现Gibbs采样器的R代码,并呈现所谓的网格点方法。

 

贝叶斯模型

假设我们观察到的数据(y_i,x_i)​的我在\ {1,\ dots,n \}​。我们的模型ÿ​是

y_i \ sim N(\ beta_0 + \ beta_1 x_i,\ phi)

有兴趣的是推断\ beta_0​和\ beta_1​。如果我们在方差项上放置系数的正常先验和在方差项之前的反伽马,那么这个数据的完整贝叶斯模型可以写成:

y_i |  \ beta_0,\ beta_1,\ phi \ sim N(\ beta_0 + \ beta_1 x_i,\ phi)
\ beta_0 |  \ mu_0,\ tau_0 \ sim N(\ mu_0,\ tau_0)
\ beta_1 |  \ mu_1,\ tau_1 \ sim N(\ mu_1,\ tau_1)
\ phi |  \ alpha,\ gamma \ sim IG(\ alpha,\ gamma)

假设超参数\ mu_0,\ tau_0,\ mu_1,\ tau_1,\ alpha​并且\伽玛​已知,后验可以写成比例常数,

p(\ beta_0,\ beta_1,\ phi | \ vec y)\ propto \ Big [\ prod_ {i = 1} ^ np(y_i | \ beta_0,\ beta_1,\ phi)\ Big] p(\ beta_0 | \ mu_0,\ tau_0)p(\ beta_1 | \ mu_1,\ tau_1)p(\ phi | \ alpha,\ gamma)

括号中的术语是数据或可能性的联合分布。其他术语包括参数的联合先验分布(因为我们隐含地假定先前独立,联合先前因子)。

这被认为是熟悉的表达方式:

后路\ propto可能性\次先于​。

随附的R代码的第0部分从该模型生成用于指定“真实”参数的数据。我们稍后将使用此数据估计贝叶斯回归模型,以检查我们是否可以恢复这些真实参数。

Gibbs采样器

从这个后验分布中得出,我们可以使用吉布斯采样算法。吉布斯采样是一种迭代算法,它根据每个感兴趣参数的后验分布产生样本。它是通过以下列方式从每个参数的条件后验顺序绘制来实现的:

屏幕截图2017-08-07在下午4点18分

可以证明,在适当的老化期后,1000次抽取的剩余部分是从后部分布中抽出的。这些样本不是独立的。绘制的顺序是在后部空间中的随机游走,并且空间中的每个步骤取决于先前的位置。通常也会使用稀疏期(这里没有这样做)。减薄10意味着我们每10次抽奖。这个想法是,每一个平局可能依赖于以前的平局,但不能  作为依赖于10日以前的平局。

条件后验分布

要使用Gibbs,我们需要确定每个参数的条件后验。

它有助于从完全非标准化的后验开始:

p(\ beta_0,\ beta_1,\ phi | \ vec y)\ propto \ phi ^ { -  n / 2} e ^ { -  \ frac {1} {2 \ phi} \ sum_ {i = 1} ^ {n }(y_i  - (\ beta_0 + \ beta_1x_i))^ 2} e ^ { -  \ frac {1} {2 \ tau_0}(\ beta_0  -  \ mu_0)^ 2} e ^ { -  \ frac {1} {2 \ tau_1}(\ beta_1  -  \ mu_1)^ 2} \ phi ^ { - (\ alpha + 1)e ^ { -  \ frac {\ gamma} {\ phi}}} 

为了找到参数的条件后验,我们简单地从不包括该参数的联合后验中删除所有项。例如,常数项\ beta_0​具有条件后验:

p(\ beta_0 | \ phi,\ beta_1,\ mu_0,\ tau_0,\ vec y)\ propto e ^ { -  \ frac {1} {2 \ phi} \ sum_ {i = 1} ^ n(y_i  - ( \ beta_0 + \ beta_1x_i))^ 2} e ^ { -  \ frac {1} {2 \ tau_0}(\ beta_0  -  \ mu_0)^ 2}

同样的,

p(\ beta_1 | \ beta_0,\ phi,\ mu_1,\ tau_1,\ vec y)\ propto e ^ { -  \ frac {1} {2 \ phi} \ sum_ {i = 1} ^ {n}(y_i - (\ beta_0 + \ beta_1x_i))^ 2} e ^ { -  \ frac {1} {2 \ tau_1}(\ beta_1  -  \ mu_1)^ 2}

条件后验可以被识别为另一个反伽马分布,具有一些代数操作。

\ begin {aligned} p(\ phi | \ beta_0,\ beta_1,\ alpha,\ gamma,\ vec y)&\ propto \ phi ^ { -  n / 2} \ phi ^ { - (\ alpha + 1)e ^ { -  \ frac {\ gamma} {\ phi}}} e ^ { -  \ frac {1} {2 \ phi} \ sum_ {i = 1} ^ {n}(y_i  - (\ beta_0 + \ beta_1x_i) )^ 2} \\&= \ phi ^ { - (\ alpha + \ frac {n} {2} + 1)} exp { -  \ frac {1} {\ phi} \ Big [\ frac {1} { 2 \ phi} \ sum_ {i = 1} ^ {n}(y_i  - (\ beta_0 + \ beta_1x_i))^ 2 + \ gamma \ Big]} \\&= IG(shape = \ alpha + \ frac {n } {2},\ rate = \ frac {1} {2 \ phi} \ sum_ {i = 1} ^ {n}(y_i  - (\ beta_0 + \ beta_1x_i))^ 2 + \ gamma)\ end {aligned }

的条件后验\ beta_0​和\ beta_1​不容易辨认。但是如果我们愿意使用网格方法,我们真的不需要通过任何代数。

网格方法

考虑\ beta_0​。网格方法是一种非常强力的方式(在我看来)从其条件后验分布中进行采样。这种条件分布只是一个函数\ beta_0​。因此,我们可以评估某些\ beta_0​值的密度。在R表示法中,这可以是grid = seq(-10,10,by = .001)。这个序列是点的“网格”。

然后在每个网格点评估的条件后验分布告诉我们该抽取的相对可能性。

然后我们可以使用R中的sample()函数从这些点网格中绘制,采样概率与网格点处的密度评估成比例。

这在随附的R代码的第1部分中的函数rb0cond()和rb1cond()中实现。

在使用网格方法时遇到数值问题是很常见的。由于我们正在评估网格上的非标准化后验,因此结果会变得相当大或很小。这可能会在R中产生Inf和-Inf值。

例如,在函数rb0cond()和rb1cond()中,我实际上计算了导出的条件后验分布的对数。然后,我从所有评估的最大值中减去每个评估,然后从对数标度中取代,然后进行标准化。这倾向于处理这样的数字问题。

我们不需要使用网格方法从条件后验中绘制,\披​因为它来自已知的分布。

请注意,此网格方法有一些缺点。

首先,它的计算成本很高。如我们所做的那样,通过代数并希望得到一个已知的后验分布可以在计算上更有效率\披​。

其次,网格方法需要指定网格点的区域。如果条件后验在我们指定的[-10,10]的网格区间之外有明显的密度怎么办?在这种情况下,我们不会从条件后验得到准确的样本。记住这一点并尝试宽网格间隔非常重要。因此,我们需要聪明地处理数值问题,例如接近Inf的数字和R中的-Inf值。

仿真结果

现在我们可以从每个参数的条件后验中进行采样,我们可以实现Gibbs采样器。这在随附的R代码的第2部分中完成。它编码上面R中概述的相同算法。

结果很好。下图显示了1000个Gibbs样本的序列(删除了老化抽取并且未实施细化)。红线表示我们模拟数据的真实参数值。第四个图显示了截距和斜率项的联合后验,红线表示轮廓。

å±å¹æªå¾2017-08-07 at 5.02.03 PM

屏幕截图2017-08-07 at 5.02.03 PMå±å¹æªå¾2017-08-07 at 5.02.03 PM

总而言之,我们首先导出了一个表达式,用于参数的联合分布。然后我们概述了用于从后部绘制样本的Gibbs算法。在这个过程中,我们认识到Gibbs方法依赖于每个参数的条件后验分布的顺序绘制。因为\披​,这是一个容易识别,已知的分布。对于斜率和截距项,我们决定使用网格方法绕过代数。这样做的好处是我们支持很多代数。成本增加了计算复杂性,在选择适当的网格范围时会出现一些反复试验和数值问题。

还有问题吗?联系我们!

 

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

点击这里给我发消息​QQ:3025393450

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务

【大数据部落】大数据部落提供定制化的一站式数据挖掘和统计分析咨询服务

转载于:https://www.cnblogs.com/tecdat/p/10750592.html

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值