全文链接:http://tecdat.cn/?p=24456
如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯(点击文末“阅读原文”获取完整代码数据)。
相关视频
但是,你没有共轭先验。你可能会花费很长时间编写 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)
点击标题查阅往期内容
R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断
左右滑动查看更多
01
02
03
04
链诊断
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.
点击文末“阅读原文”
获取全文完整资料。
本文选自《R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据》。
点击标题查阅往期内容
R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断
【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享
R语言实现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采样用于回归的贝叶斯估计