R语言中Gibbs抽样的Bayesian简单线性回归
贝叶斯分析的许多介绍都使用了相对简单的教学实例(例如,根据伯努利数据给出成功概率的推理)。虽然这很好地介绍了贝叶斯原理,但是这些原则的扩展并不是直截了当的。
这篇文章将概述这些原理如何扩展到简单的线性回归。一路上,我将导出感兴趣参数的后验条件分布,给出用于实现Gibbs采样器的R代码,并提出所谓的网格点方法。
我之前在wordpress中遇到过R代码片段的问题,所以我不会在帖子中提供代码。相反,我将把代码托管在GitHub上。您在阅读帖子时可以跟随代码。
贝叶斯模型
假设我们观察数据
伴随的R代码的第0部分为该指定的“真实”参数从该模型生成数据。我们稍后将用这个数据估计一个贝叶斯回归模型来检查我们是否可以恢复这些真实的参数。
吉布斯采样器
为了从这个后验分布中得出,我们可以使用Gibbs抽样算法。吉布斯采样是一种迭代算法,从每个感兴趣的参数的后验分布产生样本。它通过按照以下方式从每个参数的条件后面依次绘制:
现在我们可以从每个参数的条件后验进行采样,我们可以实现Gibbs采样器。这是在附带的R代码的第2部分中完成的。它编码上面在R中概述的相同的算法。
结果很好。下图显示了1000个吉布斯(Gibbs)样品的序列(其中已经去除了老化抽样并且没有实施稀释)。红线表示我们模拟数据的真实参数值。第四幅图显示了截距和斜率项的后面联合,红线表示轮廓。
总结一下,我们首先推导了一个表达式,用于参数的联合分布。然后我们概述了从后面抽取样本的Gibbs算法。在这个过程中,我们认识到Gibbs方法依赖于每个参数的条件后验分布的顺序绘制。对于
,这是一个容易识别的,已知的分布。对于斜率和截距项,我们决定用网格方法来规避代数。这样做的好处就是我们边走了很多代数。成本增加了计算复杂性,在为电网选择适当的范围时进行一些试验和错误,以及数字问题。