R语言用Backfitting MCMC抽样算法进行贝叶斯推理案例

原文链接: http://tecdat.cn/?p=3429

 

BART是贝叶斯非参数模型,可以使用Backfitting MCMC进行拟合 。 

 我不使用任何软件包...... MCMC是从头开始实现的。

考虑协变量数据 X和成果 ÿñ主题, (y_i,x_i)_ {1:n}。在这个 示例中,数据看起来像这样:

我们可能会考虑以下概率模型

  y_i |  x_i,\ beta,\ phi \ sim N(\ mu_i,\ phi) 


 

\ mu_i = \ sum_ {j = 0} ^ 3 x_i ^ j \ beta_j

基本上我们使用三次多项式对条件均值进行建模。请注意,这是更一般的 模型的特例

\ mu_i = \ sum_ {i = 0} ^ k f_j(x_i)\ beta_j

在这种情况下 f_j(x_i)= x_i ^ jK = 3。该模型 p(\ beta_j)\ propto 1在参数矢量的每个元素上具有平坦的先验和在方差参数上具有形状和速率 \公测的反伽马先验。 p(\ phi)= InvGam(.5,10000) 0.5 10000

每个条件后验 \ beta_j都是高斯(因为共轭)。我们可以使用共轭Gibbs或Metropolis从中进行采样。我们也可以将整个参数矢量 \公测作为一个块进行采样,但是在这篇文章中我们将坚持反向拟合 - 这本身就是一个Gibbs采样器。我们仍然从其他条件的每个 \ beta_j条件的条件后验中进行抽样 \公测。然而,我们利用关键的洞察力,每个条件后验 \ beta_j取决于其他beta  \测试_ { -  J},仅由残差表示

R_j = y_i  -  \ sum_ {k \ neq j} x_i ^ k \ beta_k

直观地, R_j是在减去 义其他项(非 Ĵ)所解释的部分之后的左手平均值的部分。它也是正常分布的,

R_j \ sim N(x_i ^ j \ beta_j,\ phi)

在正常之前 \ beta_j,后验可以通过共轭来计算

p(\ beta_j | R_j,\ phi)\ sim N \ big(\ frac {\ sum_ {i = 1} ^ n R_ {ij} \ cdot x_i ^ j} {\ sum_ {i = 1} ^ n [x_i ^ j] ^ 2},\ frac {\ phi} {\ sum_ {i = 1} ^ n [x_i ^ j] ^ 2} \ big)

Backfitting MCMC如下进行。首先,初始化所有测试版除外 \ beta_1。这完全是任意的 - 您可以从任何参数开始。然后,在每个Gibbs迭代中,

  1. 计算 R_1与值 \测试_ { -  1}在当前迭代。来自后验的样本   \ beta_1 \ sim p(\ beta_1 | R_1,\ phi)以电流抽取为条件 \披
  2. 计算 R_2与值 \测试_ { -  2}在当前迭代。注意, \ beta_1使用步骤1中的值。来自后部的样本   \ beta_2 \ sim p(\ beta_2 | R_2,\ phi)
  3. 对所有beta参数继续此过程。
  4. \公测绘制完所有参数后,进行采样 \ phi \ sim p(\ phi | y,\ beta)。这个后验是另一个反伽马。

术语反向拟合似乎是合适的,因为在每次迭代中,我们都“退出”  \ beta_j我们想要使用其他测试版进行采样的分布。

为了获得拟合的回归线,我们需要从后验预测分布中进行采样。我们在每个Gibbs迭代中的步骤4之后通过绘制 ñ值来执行此操作

\ hat {y} _i |  x_i,\ beta ^ {[k]},\ phi ^ {[k]} \ sim N(\ mu_i ^ {[k]},\ phi ^ {[k]}),i \ in \ {1,2 ,\ dots,n \}

上标 [K]表示使用来自 K ^ {}第Gibbs迭代的值的参数。


  

 

非常感谢您阅读本文,有任何问题请在下面留言!


请使用浏览器的分享功能分享到微信等