首页 > 编程语言 >R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据|附代码数据

R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据|附代码数据

时间:2023-09-20 21:26:26浏览次数:50  
标签:siga MCMC 模型 NUTS 贝叶斯 beta Stan 后验 RStan

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

原文出处:拓端数据部落公众号

最近我们被客户要求撰写关于RStan 的研究报告,包括一些图形和统计输出。

如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯。
但是,你没有共轭先验。你可能会花费很长时间编写 Metropolis-Hastings 代码,优化接受率和提议分布,或者你可以使用 RStan。 

Hamiltonian Monte Carlo(HMC)

HMC 是一种为 MH 算法生成提议分布的方法,该提议分布被接受的概率很高。具体算法过程请查看参考文献。
打个比方:
给粒子一些动量。
它在滑冰场周围滑行,大部分时间都在密度高的地方。
拍摄这条轨迹的快照为后验分布提供了一个建议样本。
然后我们使用 Metropolis-Hastings 进行校正。

NUTS采样器(No-U-turn Sampler)

HMC,像RWMH一样,需要对步骤的数量和大小进行一些调整。
No-U-Turn Sampler "或NUTs(Hoffman和Gelman(2014)),对这些进行了自适应的优化。
NUTS建立了一组可能的候选点,并在轨迹开始自相矛盾时立即停止。

Stan 的优点

可以产生高维度的提议,这些提议被接受的概率很高,而不需要花时间进行调整。
有内置的诊断程序来分析MCMC的输出。
在C++中构建,所以运行迅速,输出到R。

示例

如何使用 LASSO 构建贝叶斯线性回归模型。

构建 Stan 模型


数据:n、p、Y、X 先验参数,超参数
参数:
模型:高斯似然、拉普拉斯和伽玛先验。
输出:后验样本,后验预测样本。

数据

   

int<lwer=0> n;
vectr[n] y;
rel<loer=0> a;

参数

   

vetor[p+1] beta;
real<lowr=0> siga;

转换后的参数(可选)

   
vectr[n] liped;
lnpred = X*bea;

模型

   
bta ~ dolexneial(0,w);
siga ~ gama(a,b);


或没有矢量化,

   
for(i in 1:n){
y[i]~noral(X[i,]*beta,siga);
}

生成的数量(可选)

   
vecor[n] yprict;
for(i in 1:n){
prdit[i] = nrmlrng(lnprd[i],siga);

对后验样本的每一个元素都要评估一次这个代码。

职业声望数据集

这里我们使用职业声望数据集,它有以下变量

教育:职业在职者的平均教育程度,年。

收入:在职者的平均收入,元。

女性:在职者中女性的百分比。

威望:Pineo-Porter的职业声望得分,来自一项社会调查。

普查:人口普查的职业代码。

类型:职业的类型

bc: 蓝领
prof: 专业、管理和技术
wc: 白领

 在R中运行

   
library(rstan)
stan(file="byLASO",iter=50000)

 在3.5秒内运行25000次预热和25000次采样。
第一次编译c++代码,所以可能需要更长的时间。

绘制后验分布图

   

par(mrow=c(1,2))
plot(denty(prs$bea)


预测分布

   
plot(density)


链诊断

   
splas[[1][1:5,]

链诊断

   
trac("beta" )


链诊断

   
pa(pars="beta")


更多链诊断

Stan 还可以从链中提取各种其他诊断,如置信区间、有效样本量和马尔可夫链平方误差。
链的值与各种链属性、对数似然、接受率和步长之间的比较图。

Stan 出错

stan使用的步骤太大。
可以通过手动增加期望的平均接受度来解决。
adapt_delta,高于其默认的0.8

   
stan(cntl = list(datta = 0.99, mxrh = 15))


这会减慢你的链的速度,但可能会产生更好的样本。

自制函数

Stan 也兼容自制函数。
如果你的先验或似然函数不标准,则很有用。

   
model {
beta ~ doubexp(0,w);
for(i in 1:n){
logprb(‐0.5*fs(1‐(exp(normalog(
siga))/yde));
}
}

结论

不要浪费时间编码和调整 RWMH.
Stan 运行得更快,会自动调整,并且应该会产生较好的样本。

参考文献

Alder, Berni J, and T E Wainwright. 1959. “Studies in Molecular Dynamics. I. General Method.” The Journal of Chemical Physics 31 (2). AIP: 459–66.

Hoffman, Matthew D, and Andrew Gelman. 2014. “The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo.” Journal of Machine Learning Research 15 (1): 1593–1623.


最受欢迎的见解

1.matlab使用贝叶斯优化的深度学习

2.matlab贝叶斯隐马尔可夫hmm模型实现

3.R语言Gibbs抽样的贝叶斯简单线性回归仿真

4.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

5.R语言中的Stan概率编程MCMC采样的贝叶斯模型

6.Python用PyMC3实现贝叶斯线性回归模型

7.R语言使用贝叶斯 层次模型进行空间数据分析

8.R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

9.matlab贝叶斯隐马尔可夫hmm模型实现

标签:siga,MCMC,模型,NUTS,贝叶斯,beta,Stan,后验,RStan
From: https://www.cnblogs.com/tecdat/p/17718421.html

相关文章

  • APR does not understand this error code【Svn】
     背景:金蝶云星空协同开发模式,源代码使用的是svn。 业务场景:打开BOS设计器,svn报错:发生时间:2023-09-1808:44:01错误来源:System.Windows.Forms错误信息:Errorrunningcontext:APRdoesnotunderstandthiserrorcode====================================......
  • Understanding UML in seconds
    UML是一种分析设计语言,也就是一种建模语言。UML结构解析UML其结构主要包括以下几个部分:视图(View)多个图形组成的集合;图(Diagram)图的种类有13种图,但常用的也就两种(1.需求用例图,2.开发类图);模型元素(ModelElement)如类、对象、消息以及这些概念之间的关系,如关联关系、依赖关系......
  • 【ICML2022】Understanding The Robustness in Vision Transformers
    来自NUS&NVIDIA文章地址:[2204.12451]UnderstandingTheRobustnessinVisionTransformers(arxiv.org)项目地址:https://github.com/NVlabs/FAN一、MotivationCNN使用滑动窗的策略来处理输入,ViT将输入划分成一系列的补丁,随后使用自注意力层来聚合补丁并产生他们的表示,ViT的......
  • matlab用马尔可夫链蒙特卡罗 (MCMC) 的Logistic逻辑回归模型分析汽车实验数据|附代码
    原文链接:http://tecdat.cn/?p=24103此示例说明如何使用逻辑回归模型进行贝叶斯推断 ( 点击文末“阅读原文”获取完整代码数据 )。统计推断通常基于最大似然估计(MLE)。MLE选择能够使数据似然最大化的参数,是一种较为自然的方法。在MLE中,假定参数是未知但固定的数值,并在一定......
  • Proj CDeepFuzz Paper Reading: An Extensive Study on Pre-trained Models for Progr
    Abstract1.Intro2.Background2.1ProgramUnderstandingandGenerationTasks2.2NL-PLPre-TrainedModels3.TheExtensiveStudy3.1SubjectsandDataset3.2ResearchQuestionsRQ1:Howdopre-trainedmodelsperformforprogramunderstandingandgene......
  • AT_donuts_2015_3 题解
    根据题意,发现我们要维护一个身高递减的序列。因此,我们可以直接使用单调栈维护第\(i\)个人能看到的人数即可。答案就是当前栈内的元素数量。注意应先输出答案再将当前高度入栈。#include<cstdio>intn;inth[100010];intst[100010];inttop;intmain(){ scanf("%d",&......
  • R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样|附代码数据
    全文链接:http://tecdat.cn/?p=17884最近我们被客户要求撰写关于BUGS/JAGS贝叶斯分析的研究报告,包括一些图形和统计输出。在许多情况下,我们没有足够的计算能力评估空间中所有n维像素的后验概率 。在这些情况下,我们倾向于利用称为Markov-ChainMonteCarlo算法的程序 。此方法......
  • R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样|附代码数据
    原文链接:http://tecdat.cn/?p=3772原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于MCMC的研究报告,包括一些图形和统计输出。创建测试数据第一步,我们创建一些测试数据,用来拟合我们的模型。我们假设预测变量和因变量之间存在线性关系,所以我们用线性模型并添加一些噪音......
  • Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化
    全文链接:https://tecdat.cn/?p=33436原文出处:拓端数据部落公众号尽管贝叶斯方法相对于频率主义方法的理论优势已经在其他地方进行了详细讨论,但其更广泛采用的主要障碍是“可用性”。而使用贝叶斯方法,客户可以按照自己认为合适的方式定义模型。线性回归在此示例中,我们将帮助客......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法: sim<-svsim(1000,mu=-9,phi=0.97,sigma=0.15)......