R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

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

本文将介绍如何在R中用rstan和rjags做贝叶斯回归分析,R中有不少包可以用来做贝叶斯回归分析,比如最早的(同时也是参考文献和例子最多的)R2WinBUGS包。这个包会调用WinBUGS软件来拟合模型,后来的JAGS软件也使用与之类似的算法来做贝叶斯分析。然而JAGS的自由度更大,扩展性也更好。近来,STAN和它对应的R包rstan一起进入了人们的视线。STAN使用的算法与WinBUGS和JAGS不同,它改用了一种更强大的算法使它能完成WinBUGS无法胜任的任务。同时Stan在计算上也更为快捷,能节约时间。

相关视频

例子

设Yi为地区i=1,…,ni=1,…,n从2012年到2016年支持率增加的百分比。我们的模型

2069b23643f3053f28b573d049825324.png

式中,Xji是地区i的第j个协变量。所有变量均中心化并标准化。我们选择σ2∼InvGamma(0.01,0.01)和α∼Normal(0100)作为误差方差和截距先验分布,并比较不同先验的回归系数。

加载并标准化选举数据

# 加载数据



 load("elec.RData")

 Y    <- Y[!is.na(Y+rowSums(X))]
 X    <- X[!is.na(Y+rowSums(X)),]
 n    <- length(Y)
 p    <- ncol(X)
## [1] 3111
p
## [1] 15
X    <- scale(X)

# 将模型拟合到大小为100的训练集,并对剩余的观测值进行预测

 test  <- order(runif(n))>100
 table(test)
## test
## FALSE  TRUE 
##   100  3011
Yo    <- Y[!test]    # 观测数据
 Xo    <- X[!test,]

 Yp    <- Y[test]     # 为预测预留的地区
 Xp    <- X[test,]

选举数据的探索性分析 

boxplot(X, las = 3

62d9b4a237c6bc60a63c8e2eda02c196.png

image(1:p, 1:p, main = "预测因子之间的相关性")

点击标题查阅往期内容

67ae75057fa5595d82b9c6f6ea9f5b96.jpeg

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

outside_default.png

左右滑动查看更多

outside_default.png

01

2b93fbf39c0e6a3cb0a0b46b06569e6f.png

02

8f7d12c0a5d526e2a958820792aa6d71.png

03

fcb5b0276851d5d3e5c4e30eb57fc4dd.png

04

5a653af843b3d16e7c2847afb40a1c77.png

c07da41c09d32cd860996527a44d5517.png

rstan中实现

统一先验分布

如果模型没有明确指定先验分布,默认情况下,Stan将在参数的合适范围内发出一个统一的先验分布。注意这个先验可能是不合适的,但是只要数据创建了一个合适的后验值就可以了。

data {
  int<lower=0> n; // 数据项数
  int<lower=0> k; // 预测变量数
  matrix[n,k] X; // 预测变量矩阵
  vector[n] Y; // 结果向量
}
parameters {
  real alpha; // 截距
  vector[k] beta; // 预测变量系数
  real<lower=0> sigma; // 误差
rstan_options(auto_write = TRUE)

#fit <- stan(file = 'mlr.stan', data = dat)
print(fit)

8e53947944e563a46da90637dee74a87.png

hist(fit, pars = pars)

0cc1155436e5fd7c695173662b28bb4c.png

dens(fit)

0b1361df4c99b6bdd26b6d6b5de00f6a.png

traceplot(fit)

81e860ed4bd986d97be8be1b10ac3247.png

e50a4cf5fa70df7bb8980d348b232ab8.png

ddc362c70472fb7b7667aa87663071f7.png

797130830b789b828a3a577de1065631.png

00c7ab9bc682beddf2387370fc0d651a.png

5246521e8d8bce5a2dccf0c0bf73bf59.png

rjags中实现

用高斯先验拟合线性回归模型

library(rjags)

model{
#  预测
  for(i in 1:np){
    Yp[i]  ~ dnorm(mup[i],inv.var)
    mup[i] <- alpha + inprod(Xp[i,],beta[])

  # 先验概率

  alpha     ~ dnorm(0, 0.01)
  inv.var   ~ dgamma(0.01, 0.01)
  sigma     <- 1/sqrt(inv.var)

在JAGS中编译模型

# 注意:Yp不发送给JAGS
jags.model(model, 
                    data = list(Yo=Yo,no=no,np=np,p=p,Xo=Xo,Xp=Xp))
coda.samples(model, 
        variable.names=c("beta","sigma","Yp","alpha"),

e7622355fd590c096e67419ea9072de8.png

350a20747a6de60b66ff87f1be8bffef.png

从后验预测分布(PPD)和JAGS预测分布绘制样本

#提取每个参数的样本

 samps       <- samp[[1]]
 Yp.samps    <- samps[,1:np] 

#计算JAGS预测的后验平均值

 beta.mn  <- colMeans(beta.samps)


# 绘制后验预测分布和JAGS预测

 for(j in 1:5)
    # JAGS预测
    y  <- rnorm(20000,mu,sigma.mn)
    plot(density(y),col=2,xlab="Y",main="PPD")

    # 后验预测分布
    lines(density(Yp.samps[,j]))

    # 真值
    abline(v=Yp[j],col=3,lwd=2)

48e4c7e2cc2886a4f24262143a2b21d8.png

f722af3869632f2059018079467ec5dd.png

d738e3d323f37bcda2c8da81d0c55f5c.png

b2befad9cc1878822ae6c24aae77850d.png

3fde604fe99016cf436b582d11edc21f.png

# 95% 置信区间
 alpha.mn+Xp%*%beta.mn - 1.96*sigma.mn
 alpha.mn+Xp%*%beta.mn + 1.96*sigma.mn
## [1] 0.9452009
# PPD 95% 置信区间
 apply(Yp.samps,2,quantile,0.025)
 apply(Yp.samps,2,quantile,0.975)
## [1] 0.9634673

请注意,PPD密度比JAGS预测密度略宽。这是考虑β和σ中不确定性的影响,它解释了JAGS预测的covarage略低的原因。但是,对于这些数据,JAGS预测的覆盖率仍然可以。

3ec89cec260d91772bcf9050ac4edab9.jpeg

点击文末“阅读原文”

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

本文选自《R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据》。

f1f51f9d58e78c0d7b3c5e5d414ee1c1.jpeg

本文中的选举数据分享到会员群,扫描下面二维码即可加群!

dca87be5abe8105678360e56b2be9017.png

点击标题查阅往期内容

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

使用贝叶斯层次模型进行空间数据分析

MCMC的rstan贝叶斯回归模型和标准线性回归模型比较

python贝叶斯随机过程:马尔可夫链Markov-Chain,MC和Metropolis-Hastings,MH采样算法可视化

Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

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

贝叶斯线性回归和多元线性回归构建工资预测模型

Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据

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

R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像

贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据

R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间

R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户

R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

随机森林优化贝叶斯预测分析汽车燃油经济性

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

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

92f066056c106662e195359f87529f48.png

8835046c08c4e746e5f3160dcdc1c7e3.jpeg

a1d4458feb9e2702313081c1ced79bf7.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值