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

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 ^ j​和K = 3​。该模型p(\ beta_j)\ propto 1​在参数矢量的每个元素上具有平坦的先验和在方差参数上具有形状和速率\公测​的反伽马先验。p(\ phi)= InvGam(.5,10000)0.510000

每个条件后验\ 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迭代的值的参数。


  

还有问题吗?联系我们!

 

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

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

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

【服务场景】  

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

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

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

猜你喜欢

转载自www.cnblogs.com/tecdat/p/10751771.html
今日推荐