因此,为了更好地了解 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。
第一个想法是,我将遍历每个i ,使用(y i - β 2 *x i,2 ) / x i,1生成我的数据点——基本上,我减去第二个因素的影响并将通过第一个因子“剩余”,得到第一个因子对响应变量的影响。然后我可以使用该总体来获取我的分布参数,最后可以对我的β 1和γ 1进行采样。
第二个想法是,我将遍历每个i,并将我的数据点生成为 ( y i / x i ),这意味着我不会减去其他因素对响应变量的影响;它独立对待一切。
到目前为止,我一直在使用#1,但即使使用人工数据集,我发现它暗示了巨大的 beta 方差,这似乎没有任何意义——但是,它们非常接近样本方差我正在生成的人口(我用来计算这些分布参数的“数据点”)。我究竟做错了什么?#1 或 #2 是做线性模型的正确方法吗?还是我完全错过了什么?
在此先感谢您的帮助!请让我知道是否有任何信息会有所帮助。