R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

news2025/1/17 5:54:52

全文链接:http://tecdat.cn/?p=19664 

MCMC是从复杂概率模型中采样的通用技术。

  1. 蒙特卡洛

  2. 马尔可夫链

  3. Metropolis-Hastings算法点击文末“阅读原文”获取完整代码数据)。

问题

如果需要计算有复杂后验pdf p(θ| y)的随机变量θ的函数f(θ)的平均值或期望值。

d1c525d7ef41c4baad82d64e33a595e5.png

您可能需要计算后验概率分布p(θ)的最大值。

19c712bd5bc12cc73f55248e62bbf5e8.png

解决期望值的一种方法是从p(θ)绘制N个随机样本,当N足够大时,我们可以通过以下公式逼近期望值或最大值

59b8020c4621baf42005004875388421.png

将相同的策略应用于通过从p(θ| y)采样并取样本集中的最大值来找到argmaxp(θ| y)。

相关视频


解决方法

1.1直接模拟

1.2逆CDF

1.3拒绝/接受抽样

如果我们不知道精确/标准化的pdf或非常复杂,则MCMC会派上用场。


马尔可夫链

4ba56660c5b4e2c0072925dbb06f4e1a.png

为了模拟马尔可夫链,我们必须制定一个 过渡核T(xi,xj)。过渡核是从状态xi迁移到状态xj的概率。

 马尔可夫链的收敛性意味着它具有平稳分布π。马尔可夫链的统计分布是平稳的,那么它意味着分布不会随着时间的推移而改变。

Metropolis算法

 对于一个Markov链是平稳的。基本上表示

处于状态x并转换为状态x'的概率必须等于处于状态x'并转换为状态x的概率

9f1ffb3f268651a2c4f3efe69bf6afd7.png

或者

10cd0a2a22a87f44ee95f2eccd9e2470.png

方法是将转换分为两个子步骤;候选和接受拒绝。

令q(x'| x)表示 候选密度,我们可以使用概率 α(x'| x)来调整q  。

候选分布 Q(X'| X)是给定的候选X的状态X'的条件概率,

和 接受分布 α(x'| x)的条件概率接受候选的状态X'-X'。我们设计了接受概率函数,以满足详细的平衡。

该 转移概率 可以写成:

cd5224a25334f873a6028ddc7535fe61.png

插入上一个方程式,我们有

3d23a61e458ca1ee39669320379b7162.png

Metropolis-Hastings算法 

A的选择遵循以下逻辑。

1fc70e414ed4d9a4399a60c465f29447.png

在q下从x到x'的转移太频繁了。因此,我们应该选择α(x | x')=1。但是,为了满足 细致平稳,我们有

17d43c73676b68729dcdac808e92d85b.png

下一步是选择满足上述条件的接受。Metropolis-Hastings是一种常见的 选择:

cf4370ffd0e28259d333f45eb34a6ddb.png

即,当接受度大于1时,我们总是接受,而当接受度小于1时,我们将相应地拒绝。因此,Metropolis-Hastings算法包含以下内容:

  1. 初始化:随机选择一个初始状态x;

  2. 根据q(x'| x)随机选择一个新状态x';

3.接受根据α(x'| x)的状态。如果不接受,则不会进行转移,因此无需更新任何内容。否则,转移为x';

4.转移到2,直到生成T状态;

5.保存状态x,执行2。

原则上,我们从分布P(x)提取保存的状态,因为步骤4保证它们是不相关的。必须根据候选分布等不同因素来选择T的值。 重要的是,尚不清楚应该使用哪种分布q(x'| x);必须针对当前的特定问题进行调整。


属性

Metropolis-Hastings算法的一个有趣特性是它 仅取决于比率

bc1f05a0302056b006bb755b4cbe3644.png

是候选样本x'与先前样本xt之间的概率,

5a6c883526d189a33ff1f69e6242ef48.png

是两个方向(从xt到x',反之亦然)的候选密度之比。如果候选密度对称,则等于1。

马尔可夫链从任意初始值x0开始,并且算法运行多次迭代,直到“初始状态”被“忘记”为止。这些被丢弃的样本称为预烧(burn-in)。其余的x可接受值集代表分布P(x)中的样本


Metropolis采样

一个简单的Metropolis-Hastings采样

让我们看看从 伽玛分布 模拟任意形状和比例参数,使用具有Metropolis-Hastings采样算法。

下面给出了Metropolis-Hastings采样器的函数。该链初始化为零,并在每个阶段都建议使用N(a / b,a /(b * b))个候选对象。

cd2a535b9ac3580734b83b0dc0597515.png

基于正态分布且均值和方差相同gamma的Metropolis-Hastings独立采样

  1. 从某种状态开始xt。代码中的x。

  2. 在代码中提出一个新的状态x'候选

  3. 计算“接受概率”

    b989cf6df7c2a34067cf99a44bebe2c2.png

  4. 从[0,1] 得出一些均匀分布的随机数u;如果u <α接受该点,则设置xt + 1 = x'。否则,拒绝它并设置xt + 1 = xt。

MH可视化

set.seed(123)
        for (i in 2:n) {
                can <- rnorm(1, mu, sig)
                aprob <- min(1, (dgamma(can, a, b)/dgamma(x, 
                        a, b))/(dnorm(can, mu, sig)/dnorm(x, 
                        mu, sig)))
                u <- runif(1)
                if (u < aprob) 
                        x <- can
                vec[i] <- x

画图

设置参数。

nrep<- 54000
burnin<- 4000
shape<- 2.5
rate<-2.6

修改图,仅包含预烧期后的链

vec=vec[-(1:burnin)]
#vec=vec[burnin:length(vec)]
par(mfrow=c(2,1)) # 更改主框架,在一帧中有多少个图形
plot(ts(vec), xlab="Chain", ylab="Draws")
abline(h = mean(vec), lwd="2", col="red" )

59179db41bb06fdfbd7b5c3176855902.png


点击标题查阅往期内容

3940859f97c44a7a744e91a22889b82d.png

Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法

outside_default.png

左右滑动查看更多

outside_default.png

01

7a88fd3144168ccbfc7996747b360ecc.png

02

32ac5d7585ce6786f58c6f204df44955.png

03

626bc961ee95c57ca4c455ee98ae2bfe.png

04

af459a7045c1f0e1c0bcc9b9e80102e5.png

Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
0.007013 0.435600 0.724800 0.843300 1.133000 3.149000
var(vec[-(1:burnin)])
[1] 0.2976507

初始值

第一个样本 vec 是我们链的初始/起始值。我们可以更改它,以查看收敛是否发生了变化。

x <- 3*a/b
        vec[1] <- x

选择方案

如果候选密度与目标分布P(x)的形状匹配,即q(x'| xt)≈P(x')q(x'|),则该算法效果最佳。 xt)≈P(x')。如果使用正态候选密度q,则在预烧期间必须调整方差参数σ2。

通常,这是通过计算接受率来完成的,接受率是在最后N个样本的窗口中接受的候选样本的比例。

如果σ2太大,则接受率将非常低,因为候选可能落在概率密度低得多的区域中,因此a1将非常小,且链将收敛得非常慢。


示例2:回归的贝叶斯估计

Metropolis-Hastings采样用于贝叶斯估计回归模型。

201b848f72c4ffc755fff29490bcc1c6.png


设定参数


DGP和图

# 创建独立的x值,大约为零
x <- (-(Size-1)/2):((Size-1)/2)
# 根据ax + b + N(0,sd)创建相关值
y <-  trueA * x + trueB + rnorm(n=Size,mean=0,sd=trueSd)

4b1a564cf6fb81d3975ce556dfaf57df.png


正态分布拟然

pred = a*x + b
    singlelikelihoods = dnorm(y, mean = pred, sd = sd, log = T)
    sumll = sum(singlelikelihoods)

为什么使用对数

似然函数中概率的对数,这也是我求和所有数据点的概率(乘积的对数等于对数之和)的原因。

我们为什么要做这个?强烈建议这样做,因为许多小概率相乘的概率会变得很小。在某个阶段,计算机程序会陷入数值四舍五入或下溢问题。

因此, 当您编写概率时,请始终使用对数


示例:绘制斜率a的似然曲线

# 示例:绘制斜率a的似然曲线
plot (seq(3, 7, by=.05), slopelikelihoods , type="l")

c75597af5c37967619c9a54103ee0bba.png


先验分布

这三个参数的均匀分布和正态分布。

# 先验分布
# 更改优先级,log为True,因此这些均为log
density/likelihood
    aprior = dunif(a, min=0, max=10, log = T)
    bprior = dnorm(b, sd = 2, log = T)
    sdprior = dunif(sd, min=0, max=30, log = T)

后验

先验和概率的乘积是MCMC将要处理的实际量。此函数称为后验函数。同样,这里我们使用和,因为我们使用对数。

posterior <- function(param){
   return (likelihood(param) + prior(param))
}

Metropolis算法

该算法是从 后验密度中采样最常见的贝叶斯统计应用之一 。

上面定义的后验。

  1. 从随机参数值开始

  2. 根据某个候选函数的概率密度,选择一个接近旧值的新参数值

  3. 以概率p(new)/ p(old)跳到这个新点,其中p是目标函数,并且p> 1也意味着跳跃

  4. 请注意,我们有一个 对称的跳跃/ 候选分布 q(x'| x)。

094608af4fe08984697c8228dc482ede.png

标准差σ是固定的。f11ea6737433084a149261930e1fb65b.png

所以接受概率等于

2f712d43d8cab239493fa76852a1dc43.png

######## Metropolis 算法 ################
    for (i in 1:iterations){
        probab = exp(posterior(proposal) - posterior(chain[i,]))
        if (runif(1) < probab){
            chain[i+1,] = proposal
        }else{
            chain[i+1,] = chain[i,]
        }

实施

(e)输出接受的值,并解释。

chain = metrMCMC(startvalue, 5500)
burnIn = 5000
accep = 1-mean(duplicated(chain[-(1:burnIn),]))

算法的第一步可能会因初始值而有偏差,因此通常会被丢弃来进行进一步分析(预烧期)。令人感兴趣的输出是接受率:候选多久被算法接受拒绝一次?候选函数会影响接受率:通常,候选越接近,接受率就越大。但是,非常高的接受率通常是无益的:这意味着算法在同一点上“停留”,这导致对参数空间(混合)的处理不够理想。

我们还可以更改初始值,以查看其是否更改结果/是否收敛。

startvalue = c(4,0,10)

小结

V1              V2                V3        
 Min.   :4.068   Min.   :-6.7072   Min.   : 6.787  
 1st Qu.:4.913   1st Qu.:-2.6973   1st Qu.: 9.323  
 Median :5.052   Median :-1.7551   Median :10.178  
 Mean   :5.052   Mean   :-1.7377   Mean   :10.385  
 3rd Qu.:5.193   3rd Qu.:-0.8134   3rd Qu.:11.166  
 Max.   :5.989   Max.   : 4.8425   Max.   :19.223
#比较:
summary(lm(y~x))
Call:
lm(formula = y ~ x)
Residuals:
    Min      1Q  Median      3Q     Max 
-22.259  -6.032  -1.718   6.955  19.892 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -3.1756     1.7566  -1.808    0.081 .  
x             5.0469     0.1964  25.697   <2e-16 ***
---
Signif. codes:  0 ?**?0.001 ?*?0.01 ??0.05 ??0.1 ??1
Residual standard error: 9.78 on 29 degrees of freedom
Multiple R-squared:  0.9579,    Adjusted R-squared:  0.9565 
F-statistic: 660.4 on 1 and 29 DF,  p-value: < 2.2e-16
summary(lm(y~x))$sigma
[1] 9.780494
coefficients(lm(y~x))[1]
(Intercept) 
  -3.175555
coefficients(lm(y~x))[2]
x 
5.046873

总结:

### 总结: #######################
par(mfrow = c(2,3))
hist(chain[-(1:burnIn),1],prob=TRUE,nclass=30,col="109" 
abline(v = mean(chain[-(1:burnIn),1]), lwd="2")

e1b690459d262ad7fb592a40a517ce84.png


08c72e27db5f94a6051249eef8dbd2e9.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计》。

点击标题查阅往期内容

Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间

R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例

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采样用于回归的贝叶斯估计

146fba30a63fa454295c44e89c6b9e4c.png

219863fb12c180bcd7639c836e8c8c89.jpeg

1e105b0f86b3b9350f1840e26185b0fe.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中远通创业板IPO过会:上半年营收7.3亿 拟募资2.3亿

雷递网 雷建平 11月28日深圳市核达中远通电源技术股份有限公司&#xff08;简称&#xff1a;“中远通”&#xff09;日前IPO过会&#xff0c;准备在深交所创业板上市。中远通计划募资2.3亿元。其中&#xff0c;1.3亿元用于研发中心改造提升项目&#xff0c;3248万元用于企业信息…

规则引擎Drools在贷后催收业务中的应用

作者&#xff1a;vivo 互联网服务器团队- Feng Xiang 在日常业务开发工作中我们经常会遇到一些根据业务规则做决策的场景。为了让开发人员从大量的规则代码的开发维护中释放出来&#xff0c;把规则的维护和生成交由业务人员&#xff0c;为了达到这种目的通常我们会使用规则引擎…

(十八)Spring6集成MyBatis3.5

文章目录实现步骤具体实现第一步&#xff1a;准备数据库表第二步&#xff1a;IDEA中创建一个模块&#xff0c;并引入依赖第三步&#xff1a;基于三层架构实现&#xff0c;所以提前创建好所有的包第四步&#xff1a;编写pojo第五步&#xff1a;编写mapper接口第六步&#xff1a;…

怎么建网站?【模版建站】

关于怎么建网站&#xff0c;除了公司企业&#xff0c;甚至有些个人用户都想了解。大家印象中的建站网站都是要会编程&#xff0c;不然就是找外包公司解决。其实现在建网站也是比较简单的&#xff0c;模版建站一般都能解决基本的建站需求。下面我们一起来看看怎么建网站吧。 一…

考阿里云ACE需要准备什么?考试内容难不难?

最近几年云计算技术发展得越来越好&#xff0c;市场上大多数企业已经选择转型&#xff0c;使用云计算技术来发展自己的新业务&#xff0c;这样一来就需要大量的人才来维持市场的运行。另一方面&#xff0c;为了在现在内卷的社会中的脱颖而出&#xff0c;获得一份稳定、高薪的工…

目标级联分析法( Analytical Target Cascading , ATC )理论matlab程序

目标级联分析法&#xff08; Analytical Target Cascading &#xff0c; ATC &#xff09;理论matlab程序 目标级联分析法&#xff08;Analytical Target Cascading&#xff0c;ATC&#xff09;是一种采用并行思想解决复杂系统的设计方法&#xff0c;最初由密执安大学研究人员…

微服务框架 SpringCloud微服务架构 4 Ribbon 4.1 负载均衡原理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构4 Ribbon4.1 负载均衡原理4.1.1 负载均衡流程4 Ribbon 4.1 负载均衡原理 …

基于STM32单片机电子相册设计全套资料

资料编号&#xff1a;188 功能介绍&#xff1a; 本系统采用STM32f103单片机通过SPI接口读取sd卡模块中的图片数据。并在单片机为sd卡模块生成fat文件系统。方便读取sd卡中的文件信息。将Bmp格式的图片存放到sd卡的picture文件夹中&#xff0c;然后单片机进行Bmp解码&#xff0…

GEE批量下载 Python本地快速下载GEE数据(比网页版保存到网盘再下载快几十倍,尤其是在下载几十年的长时间系列数据时,速度提升更加明显)

前言 可根据研究区直接裁剪数据以及进行一些计算处理后再下载&#xff0c;GEE成为了大家下载数据的重要途径&#xff0c;然而直接通过官网网页将数据先保存到网盘再下载的下载方法速度太慢&#xff0c;新号速度还好&#xff0c;越用速度越来越慢&#xff0c;本文提供了一种直接…

DolphinScheduler 机器学习工作流预测今年 FIFA 世界杯冠军大概率是荷兰!

点击蓝字&#xff0c;关注我们作者 | DolphinScheduler Committer 周捷光2022 FIFA 世界杯火热进行中&#xff01;这段时间&#xff0c;这场盛宴吸引了全球球迷的目光。除了让人心跳加快的赛况和被大家调侃像馄饨皮的吉祥物之外&#xff0c;预测和投注哪支队伍将会夺冠绝对是球…

Antd中Table列表行默认包含修改及删除功能的封装

一、前言 ant-design是非常不错、方便的一款前端组件库&#xff0c;而这次用到的ProComponents则是在 Ant Design 上进行了自己的封装&#xff0c;更加易用&#xff0c;与 Ant Design 设计体系一脉相承&#xff0c;无缝对接 antd 项目&#xff0c;样式风格与 antd 一脉相承&am…

Java:多线程基础(二)-线程生命周期

目录 线程生命周期 Thread类的常用方法 构造方法 静态方法 常用实例方法 线程生命周期 线程有其创建、就绪、运行、阻塞、死亡的过程&#xff0c;将其称之为“线程的生命周期”。如下图所示&#xff0c; 对应以上5个状态&#xff0c;jdk-Thread类的源码中定义了枚举类Stat…

计算机网络第五章知识点回顾(自顶向下)

1. 网络层控制面 1.1 网络层功能 1.2选路问题 选路问题的描述&#xff1a; 给定一组路由器和连接路由器的链路&#xff0c;寻找一条从源路由器到目的路由器的最佳路径。 1.3 什么是最佳路径&#xff1f; 1.4 图抽象 1.5 选路算法分类 1.6 链路状态&#xff08;LS&#xff0…

“生成式技术”正在颠覆人类创作!

整理 | 王启隆在过去的半年里&#xff0c;AI 写小说、绘画和剪视频等热点新闻火爆全球&#xff0c;现在只需要在键盘上敲几个关键词&#xff0c;AI 就能在烧着我们显卡的同时画出一幅幅优美的图画&#xff0c;一个全新的应用世界向未来的初创公司敞开了大门。人类现在拥有着一大…

碳中和专利创新专题:各省市县专利面板(原始文件)、低碳专利授权数等多指标数据

一、各省市县专利面板含原始文件 1、数据来源&#xff1a;国家知识产权局 2、时间跨度&#xff1a;1985-2019年 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 来源 序号 标题 合享价值度 链接到incoPat 公开&#xff08;公告&#xff09;号 公开&#xff08…

数据结构之线性表中的栈和队列【详解】

文章目录引言&#xff1a;栈和队列的讲解&#xff08;一、&#xff09;什么是栈1.栈的概念、结构和图解&#xff1a;&#xff08;1.&#xff09;顺序表和链表的对比&#xff08;严格来说这两个结构是相辅相成的&#xff09;&#xff08;2.&#xff09;栈的概念和结构&#xff0…

[MyBatis]一级缓存/二级缓存/三方缓存

缓存是一种临时存储少量数据至内存或者是磁盘的一种技术.减少数据的加载次数,可以降低工作量,提高程序响应速度 缓存的重要性是不言而喻的。mybatis的缓存将相同查询条件的SQL语句执行一遍后所得到的结果存在内存或者某种缓存介质当中&#xff0c;当下次遇到一模一样的查询SQL时…

[附源码]Python计算机毕业设计Djangossm新能源电动汽车充电桩服务APP

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

UICollectionView

文章目录前言基础概念UICollectionView与相关对象关系注意事项强大的控件相关的类重新使用视图提高性能例子一些方法前言 本篇&#xff1a;进行UICollectionView的学习 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 基础 概念 UICollectionView是我…

【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计(原理图工程+源码工程+仿真工程+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源码工程仿真工程答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源…