简单线性模型的吉布斯采样——需要似然函数的帮助

机器算法验证 r 机器学习 贝叶斯 Python 马尔可夫链蒙特卡罗
2022-03-16 14:43:55

因此,为了更好地了解 Gibbs 采样,我一直在研究一个相当简单的线性模型,用 Python/R 编写。基本上,我有二维输入数据(x i)和一个标量输出向量(y i)。我希望拟合一个 beta 向量,即β T * x i = y i + ε iε i是噪声)。

因此,我决定对 beta 使用高斯先验,对它们的方差使用逆伽马先验,给我一个高斯的后验分布(感谢共轭!)。因此,我使用了Wikipedia page on conjugate distributions中的公式来获得似然函数,我需要生成我的 beta 系数及其方差的随机样本,给定数据(通过它们的符号x i):

因此,似乎为了进行 Gibbs 采样,我只需遍历β 1γ 1β 2γ 2,从该维基百科页面上列出的分布中生成样本。我的困惑是,我的数据点到底是什么(我用来计算分布参数的“样本”,我需要对自己的 beta 进行抽样,即维基百科页面上的x i)???在我看来,它可能是两件事之一。出于讨论的目的,让我们现在讨论β 1

  1. 第一个想法是,我将遍历每个i ,使用(y i - β 2 *x i,2 ) / x i,1生成我的数据点——基本上,我减去第二个因素的影响并将通过第一个因子“剩余”,得到第一个因子对响应变量的影响。然后我可以使用该总体来获取我的分布参数,最后可以对我的β 1γ 1进行采样。

  2. 第二个想法是,我将遍历每个i,并将我的数据点生成为 ( y i / x i ),这意味着我不会减去其他因素对响应变量的影响;它独立对待一切。

到目前为止,我一直在使用#1,但即使使用人工数据集,我发现它暗示了巨大的 beta 方差,这似乎没有任何意义——但是,它们非常接近样本方差我正在生成的人口(我用来计算这些分布参数的“数据点”)。我究竟做错了什么?#1 或 #2 是做线性模型的正确方法吗?还是我完全错过了什么?

在此先感谢您的帮助!请让我知道是否有任何信息会有所帮助。

1个回答

这是一个统计问题,而不是编程问题,最好在CrossValidated上提出。至少,LaTeX 代码会在那里自动解析:)。此外,这比该网页上现成的更复杂。我会给出一些指导,但只要你想学习如何做事,这不是完整的答案。(如果您不想这样做,我们也可以在网上找到熟答案。)

每个 beta 样本都依赖于完整的数据集。如果您对单独的 y_i 和 x_i 执行此操作,则说明您没有正确执行此操作。在开始使用代码之前,您需要坐下来拿一张纸(信纸大小或 A4,取决于您的地理位置)并推导出 beta 的后验分布:

  1. 这是给定的:y|beta 是正常的,平均 x'beta 和精度 tau
  2. 这是给定的:beta 的先验是正常的,平均 mu 和精度 gamma
  3. 得到这个:y 的边际分布,通过将 beta 积分出来(这很容易做到,因为 y 和 beta 的联合分布是多元正态的,你可以通过核匹配来做到这一点:依赖于 beta 的部分是是 exp[beta 中的二次形式],因此您认识到这是要积分的正态分布分布的相关部分;积分后剩下的应该是 y 中的正态密度和先验参数)
  4. 得到这个:给定 y 的 beta 的后验分布,通过贝叶斯定理(似然乘以先验除以后验;同样,这应该是 exp[在 y 和 beta 中联合二次]的中等复杂组合)
  5. 得到这个:给定 beta_2 和 y 的 beta_1 的条件分布,是上一步获得的多元正态分布的边际之一。

您需要知道如何操纵多元正态分布并从中获得条件分布和边际分布。同样,如果这超出了您的想象,我们可以找到现成的解决方案。

请注意,您还需要一个用于回归误差方差的采样器,除非您将其视为已知(这几乎不是实际情况)。这会稍微复杂一些,因为您需要将另一个维度合并到您的集成过程中。