首页 > 其他分享 >R语言和Stan,JAGS:用rstan,rjags建立贝叶斯多元线性回归预测选举数据|附代码数据

R语言和Stan,JAGS:用rstan,rjags建立贝叶斯多元线性回归预测选举数据|附代码数据

时间:2023-09-21 20:23:04浏览次数:51  
标签:## mn 贝叶斯 Stan JAGS rstan

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

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

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

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

例子

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

式中,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

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

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)

 

   
hist(fit, pars = pars)

   
dens(fit)

   
traceplot(fit)

 

 

 

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"), 

从后验预测分布(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)

 

 

 

   
 # 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预测的覆盖率仍然可以。


最受欢迎的见解

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模型实现

标签:##,mn,贝叶斯,Stan,JAGS,rstan
From: https://www.cnblogs.com/tecdat/p/17720865.html

相关文章

  • R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实
    原文链接:http://tecdat.cn/?p=23236 原文出处:拓端数据部落公众号最近我们被客户要求撰写关于贝叶斯MCMC的研究报告,包括一些图形和统计输出。什么是频率学派?在频率学派中,观察样本是随机的,而参数是固定的、未知的数量。概率被解释为一个随机过程的许多观测的预期频率。有一......
  • R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据|附代码
    原文链接:http://tecdat.cn/?p=24456原文出处:拓端数据部落公众号最近我们被客户要求撰写关于RStan的研究报告,包括一些图形和统计输出。如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯。但是,你没有共轭先验。你可能会花费很长时间编写Metr......
  • R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性|
    原文链接:http://tecdat.cn/?p=24334最近我们被客户要求撰写关于贝叶斯线性回归的研究报告,包括一些图形和统计输出。像任何统计建模一样,贝叶斯建模可能需要为你的研究问题设计合适的模型,然后开发该模型,使其符合你的数据假设并运行1.了解 Stan统计模型可以在R或其他统计语言的......
  • Three.js中实现对InstanceMesh的碰撞检测
    1.概述之前的文章提到,在Three.js中使用InstanceMesh来实现性能优化,可以实现单个Mesh的拾取功能那,能不能实现碰撞检测呢?肯定是可以的,不过Three.js中并没有直接的API可以实现对InstanceMesh的碰撞检测,需要手动实现回顾本文的描述的Three.js的场景前提:使用InstanceMesh来构建数......
  • 基于pHash+hammingdistance的图片相似度比较
    参考文献图片相似度计算方法总结-知乎(zhihu.com)PythonOpenCV视觉特征提取和匹配-知乎(zhihu.com)图像相似度中的Hash算法-Yumeka-博客园(cnblogs.com)汉明距离及其高效计算方式(zhihu.com)开源仓库https://github.com/python-pillow/Pillowhttps://github.com/cybe......
  • 每日一题:如何判断是否是数组,一个既简单又复杂的问题。(不要再用Object.prototype.toStr
    1、不要使用Object.prototype.toString.call()正常情况下:constarr=[1,2,3,4,5]constobj={}console.log(Object.prototype.toString.call(arr))//[Object,Array]console.log(Object.prototype.toString.call(obj))//[Object,Object]过去我们能够通过判断Object.proto......
  • 题解 [ARC165C] Social Distance on Graph
    赛时:看不懂题,啊这!赛后:就这?题目描述有一个简单相连的无向图,其顶点数为\(n\),编号为\(1\)至\(n\)。图中有\(m\)条加权边,第\(i\)条边连接顶点\(a_i\)和\(b_i\),权重为\(w_i\)。此外,连接两个顶点的简单路径的权重是简单路径中包含的边的权重之和。我们给每个顶点涂上红......
  • [879] Run stand-alone scripts of arcpy
    Ref:Runstand-alonescriptsplainpasteinWindows:shift+ctrl+VHowdoIrunastand-alonescript?InotherArcGISproducts,a Pythonscriptisrunfromacommandpromptasfollows:c:\python27\ArcGIS10.8\python.exemy_script.pyIn ArcGISPro,y......
  • APR does not understand this error code【Svn】
     背景:金蝶云星空协同开发模式,源代码使用的是svn。 业务场景:打开BOS设计器,svn报错:发生时间:2023-09-1808:44:01错误来源:System.Windows.Forms错误信息:Errorrunningcontext:APRdoesnotunderstandthiserrorcode====================================......
  • AOMEI Partition Assistant(分区助手) v10.2
    123网盘:https://www.123pan.com/s/DMeA-7B8xA.html......