首页 > 其他分享 >R语言Gibbs抽样的贝叶斯简单线性回归仿真分析|附代码数据

R语言Gibbs抽样的贝叶斯简单线性回归仿真分析|附代码数据

时间:2023-06-27 23:55:51浏览次数:77  
标签:采样 抽样 后验 语言 回归 网格 贝叶斯 Gibbs

全文下载链接:http://tecdat.cn/?p=4612

最近我们被客户要求撰写关于贝叶斯简单线性回归的研究报告,包括一些图形和统计输出。

贝叶斯分析的许多介绍都使用了相对简单的教学实例(例如,根据伯努利数据给出成功概率的推理)。虽然这很好地介绍了贝叶斯原理,但是这些原则的扩展并不是直截了当的

 

这篇文章将概述这些原理如何扩展到简单的线性回归。我将导出感兴趣参数的后验条件分布,给出用于实现Gibbs采样器的R代码,并提出所谓的网格点方法。

贝叶斯模型

假设我们观察数据

对于图片我们的模型是

图片

图片

有兴趣的是作出推论

图片

如果我们在方差项之前放置正态前向系数和反伽马,那么这个数据的完整贝叶斯模型可以写成:

图片

图片

图片

图片

图片

假设超参数

图片是已知的,后面可以写成一个常数的比例,

图片

图片

括号中的术语是数据或可能性的联合分布。其他条款包括参数的联合先验分布(因为我们隐含地假设独立前,联合先验因素)。

图片

伴随的R代码的第0部分为该指定的“真实”参数从该模型生成数据。我们稍后将用这个数据估计一个贝叶斯回归模型来检查我们是否可以恢复这些真实的参数。

 
tphi<-rinvgamma(1, shape=a, rate=g)
tb0<-rnorm(1, m0, sqrt(t0) )
tb1<-rnorm(1, m1, sqrt(t1) )
tphi; tb0; tb1;

y<-rnorm(n, tb0 + tb1*x, sqrt(tphi))

吉布斯采样器

为了从这个后验分布中得出,我们可以使用Gibbs抽样算法。吉布斯采样是一种迭代算法,从每个感兴趣的参数的后验分布产生样本。它通过按照以下方式从每个参数的条件后面依次绘制:

图片

可以看出,剩下的1,000个抽签是从后验分布中抽取的。这些样本不是独立的。绘制顺序是随机游走在后空间,空间中的每一步取决于前一个位置。通常还会使用间隔期(这里不做)。这个想法是,每一个平局可能依赖于以前的平局,但不能作为依赖于10日以前的平局。


点击标题查阅往期内容

图片

使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

条件后验分布

要使用Gibbs,我们需要确定每个参数的条件后验。

它有助于从完全非标准化的后验开始:

图片

为了找到参数的条件后验,我们简单地删除不包含该参数的关节后验的所有项。例如,常数项

条件后验:

图片

图片

同样的,

图片

条件后验可以被认为是另一个逆伽马分布,有一些代数操作。

图片

条件后验图片不那么容易识别。但是如果我们愿意使用网格方法,我们并不需要经过任何代数。

图片考虑网格方法。网格方法是非常暴力的方式(在我看来)从其条件后验分布进行抽样。这个条件分布只是一个函数图片。所以我们可以评估一定的密度图片值。在R表示法中,这可以是grid = seq(-10,10,by = .001)。这个序列是点的“网格”。

那么在每个网格点评估的条件后验分布告诉我们这个抽取的相对可能性。

然后,我们可以使用R中的sample()函数从这些网格点中抽取,抽样概率与网格点处的密度评估成比例。

 

  for(i in 1:length(p) ){
    p[i]<- (-(1/(2*phi))*sum( (y - (grid[i]+b1*x))^2 ))  + ( -(1/(2*t0))*(grid[i] - m0)^2)
  }
  

  draw<-sample(grid, size = 1, prob = exp(1-p/max(p)))

这在R代码的第一部分的函数rb0cond()和rb1cond()中实现。

使用网格方法时遇到数值问题是很常见的。由于我们正在评估网格中未标准化的后验,因此结果可能会变得相当大或很小。这可能会在R中产生Inf和-Inf值。

例如,在函数rb0cond()和rb1cond()中,我实际上评估了派生的条件后验分布的对数。然后,我通过从所有评估的最大值减去每个评估之前归一化,然后从对数刻度取回。

我们不需要使用网格方法来从条件的后面绘制。

因为它来自已知的分布图片

请注意,这种网格方法有一些缺点。

首先,这在计算上是复杂的。通过代数,希望得到一个已知的后验分布,从而在计算上更有效率。

其次,网格方法需要指定网格点的区域。如果条件后验在我们指定的[-10,10]的网格间隔之外具有显着的密度?在这种情况下,我们不会从条件后验得到准确的样本。记住这一点非常重要,并且需要广泛的网格间隔进行实验。所以,我们需要聪明地处理数字问题,例如在R中接近Inf和-Inf值的数字。

仿真结果

现在我们可以从每个参数的条件后验进行采样,我们可以实现Gibbs采样器。这是在附带的R代码的第2部分中完成的。它编码上面在R中概述的相同的算法。

 
iter<-1000
burnin<-101
phi<-b0<-b1<-numeric(iter)
phi[1]<-b0[1]<-b1[1]<-6

结果很好。下图显示了1000个吉布斯(Gibbs)样品的序列。红线表示我们模拟数据的真实参数值。第四幅图显示了截距和斜率项的后面联合,红线表示轮廓。

 
z <- kde2d(b0, b1, n=50)
plot(b0,b1, pch=19, cex=.4)
contour(z, drawlabels=FALSE, nlevels=10, col='red', add=TRUE)

图片

总结一下,我们首先推导了一个表达式,用于参数的联合分布。然后我们概述了从后面抽取样本的Gibbs算法。在这个过程中,我们认识到Gibbs方法依赖于每个参数的条件后验分布的顺序绘制。这是一个容易识别的已知的分布。对于斜率和截距项,我们决定用网格方法来规避代数。


图片

点击文末 “阅读原文”

获取全文完整资料。

本文选自《R语言Gibbs抽样的贝叶斯简单线性回归仿真分析》。

点击标题查阅往期内容

python贝叶斯随机过程:马尔可夫链Markov-Chain,MC和Metropolis-Hastings,MH采样算法可视化
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据
R语言BUGS序列蒙特卡罗SMC、马尔可夫转换随机波动率SV模型、粒子滤波、Metropolis Hasting采样时间序列分析
R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据
R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
Python贝叶斯回归分析住房负担能力数据集
R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析
Python用PyMC3实现贝叶斯线性回归模型
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据
R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
R语言贝叶斯线性回归和多元线性回归构建工资预测模型
R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例
R语言stan进行基于贝叶斯推断的回归模型
R语言中RStan贝叶斯层次模型分析示例
R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较
R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样
R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例
R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型
R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

标签:采样,抽样,后验,语言,回归,网格,贝叶斯,Gibbs
From: https://www.cnblogs.com/tecdat/p/17510234.html

相关文章

  • R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间|附代码数据
    原文链接:http://tecdat.cn/?p=23652最近我们被客户要求撰写关于贝叶斯回归的研究报告,包括一些图形和统计输出。本文为读者提供了如何进行贝叶斯回归的基本教程。包括完成导入数据文件、探索汇总统计和回归分析 ( 点击文末“阅读原文”获取完整代码数据******** )。在本文中,我......
  • 贝叶斯算法人生
    哈喽大家好,我是咸鱼之前看到过耗子叔写的一篇文章《程序算法与人生选择》,这篇文章中耗子叔结合计算机中的经典算法(排序、动态规划等等),让大家在人生道路的选择上获得了一些启发我最近看了一些关于贝叶斯思想的文章,觉得还挺有感触的,于是打算写一篇相关的文章今天这篇文章不会跟大......
  • R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样|附代码数据
    全文链接:http://tecdat.cn/?p=17884最近我们被客户要求撰写关于BUGS/JAGS贝叶斯分析的研究报告,包括一些图形和统计输出。在许多情况下,我们没有足够的计算能力评估空间中所有n维像素的后验概率 。在这些情况下,我们倾向于利用称为Markov-ChainMonteCarlo算法的程序 。此方法......
  • Python贝叶斯回归分析住房负担能力数据集|附代码数据
    原文链接:http://tecdat.cn/?p=11664最近我们被客户要求撰写关于贝叶斯回归的研究报告,包括一些图形和统计输出。我想研究如何使用pymc3在贝叶斯框架内进行线性回归。根据从数据中学到的知识进行推断 贝叶斯规则是什么? 本质上,我们必须将已经知道的知识与世界上的事实相结合。......
  • 简单易学的机器学习算法——朴素贝叶斯
    一、贝叶斯定理  1、条件概率B发生的情况下,事件A发生的概率,用表示。  2、全概率公式     含义是:如果和构成样本空间的一个划分,那么事件B的概率,就等于和的概率分别乘以B对这两个事件的条件概率之和。  3、贝叶斯推断        其中称为先验概率,即......
  • R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交
    全文链接:http://tecdat.cn/?p=32760原文出处:拓端数据部落公众号航班延误是航空公司、旅客和机场管理方面都面临的一个重要问题。航班延误不仅会给旅客带来不便,还会对航空公司和机场的运营产生负面影响。因此,对航班延误的影响因素进行预测分析,对于航空公司、旅客和机场管理方面都......
  • 3.4 朴素贝叶斯算法
    1什么是朴素贝叶斯算法2概率基础2.1概率(Probability)定义概率定义为一件事情发生的可能性扔出一个硬币,结果头像朝上某天是晴天P(X):取值在[0,1]2.2女神是否喜欢计算案例在讲这两个概率之前我们通过一个例子,来计算一些结果:问题:一直小明是产品经理,体重超重,问......
  • R语言用贝叶斯层次模型进行空间数据分析|附代码数据
    阅读全文:http://tecdat.cn/?p=10932最近我们被客户要求撰写关于贝叶斯层次模型的研究报告,包括一些图形和统计输出。在本文中,我将重点介绍使用集成嵌套拉普拉斯近似方法的贝叶斯推理。可以估计贝叶斯层次模型的后边缘分布。鉴于模型类型非常广泛,我们将重点关注用于分析晶格数据......
  • 《机器学习实战》学习笔记(3)—— 朴素贝叶斯
    1朴素贝叶斯算法描述工作原理:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。2计算概率的伪代码计算每个类别中的文档数目:对每篇训练文档:对每个类别:If词条出现在文档中:增加该词条的计数值......
  • 9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解
    ApacheHive系列文章[1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解][2、hive相关概念详解--架构、读写文件机制、数据存储][3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表][4、hive的使用示例详解-事务表、......