首页 > 编程语言 >R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例|附代码数据

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

时间:2023-09-21 20:22:07浏览次数:64  
标签:Metropolis MCMC GLM 回归 贝叶斯 Gibbs 模型 Hastings

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

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

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

什么是频率学派?

在频率学派中,观察样本是随机的,而参数是固定的、未知的数量。

概率被解释为一个随机过程的许多观测的预期频率。

有一种想法是 "真实的",例如,在预测鱼的生活环境时,盐度和温度之间的相互作用有一个回归系数?

什么是贝叶斯学派?

在贝叶斯方法中,概率被解释为对信念的主观衡量。

所有的变量--因变量、参数和假设都是随机变量。我们用数据来确定一个估计的确定性(可信度)。

这种盐度X温度的相互作用反映的不是绝对的,而是我们对鱼的生活环境所了解的东西(本质上是草率的)。

目标

频率学派

保证正确的误差概率,同时考虑到抽样、样本大小和模型。

  • 缺点:需要对置信区间、第一类和第二类错误进行复杂的解释。
  • 优点:更具有内在的 "客观性 "和逻辑上的一致性。

贝叶斯学派

分析更多的信息能在多大程度上提高我们对一个系统的认识。

  • 缺点:这都是关于信仰的问题! ...有重大影响。
  • 优点: 更直观的解释和实施,例如,这是这个假设的概率,这是这个参数等于这个值的概率。可能更接近于人类自然地解释世界的方式。

实际应用中:为什么用贝叶斯

  • 具有有限数据的复杂模型,例如层次模型,其中

  • 实际的先验知识非常少

贝叶斯法则:

一些典型的贝叶斯速记法。

注意:

  • 贝叶斯的最大问题在于确定先验分布。先验应该是什么?它有什么影响?

目标:

计算参数的后验分布:π(θ|X)。

点估计是后验的平均值。

一个可信的区间是

你可以把它解释为一个参数在这个区间内的概率 。

计算

皮埃尔-西蒙-拉普拉斯(1749-1827)(见:Sharon Bertsch McGrayne: The Theory That Would Not Die)


  • 有些问题是可分析的,例如二项式似然-贝塔先验。

    • 如果你有几个参数,而且是奇数分布,你可以用数值乘以/整合先验和似然(又称网格近似)。

      • 但如果你有很多参数,这是不可能完成的操作
  • 尽管该理论可以追溯到1700年,甚至它对推理的解释也可以追溯到19世纪初,但它一直难以更广泛地实施,直到马尔科夫链蒙特卡洛技术的发展。

MCMC

MCMC的思想是对参数值θi进行 "抽样"。

回顾一下,马尔科夫链是一个随机过程,它只取决于它的前一个状态,而且(如果是遍历的),会生成一个平稳的分布。

技巧 "是找到渐进地接近正确分布的抽样规则(MCMC算法)。

有几种这样的(相关)算法。

  • Metropolis-Hastings抽样
  • Gibbs 抽样
  • No U-Turn Sampling (NUTS)
  • Reversible Jump

一个不断发展的文献和工作体系!

Metropolis-Hastings 算法

  1. 开始:
  2. 跳到一个新的候选位置:
  3. 计算后验:
  4. 如果
  5. 如果
  6. 转到第2步

Metropolis-Hastings: 硬币例子

你抛出了5个正面。你对θ的最初 "猜测 "是

MCMC:

  r
 
p.old <- prior *likelihood 
while(length(thetas) <= n){
  theta.new <- theta + rnorm(1,0,0.05)
  p.new <- prior *likelihood 
  if(p.new > p.old | runif(1) < p.new/p.old){
    theta <- theta.new
    p.old <- p.new
  }

画图:

  r
hist(thetas[-(1:100)] )
curve(6*x^5 )

 

采样链:调整、细化、多链

  • 那个 "朝向 "平稳的初始过渡被称为 "预烧期",必须加以修整。

    • 怎么做?用眼睛看
  • 采样过程(显然)是自相关的。

    • 如何做?通常是用眼看,用acf()作为指导。
  • 为了保证你收敛到正确的分布,你通常会从不同的位置获得多条链(例如4条)。

  • 有效样本量

MCMC 诊断法

R软件包帮助分析MCMC链。一个例子是线性回归的贝叶斯拟合(α,β,σ

  r
plot(line)


预烧部分:

  r
plot(line[[1]], start=10)

MCMC诊断法

查看后验分布(同时评估收敛性)。

  r
density(line)


参数之间的关联性,以及链内的自相关关系

  r
levelplot(line[[2]])
acfplot(line)

统计摘要

运行MCMC的工具(在R内部)

逻辑Logistic回归:婴儿出生体重低

  r
logitmcmc(low~age+as.factor(race)+smoke )


  r
plot(mcmc)

MCMC与GLM逻辑回归的比较

MCMC与GLM逻辑回归的比较

对于这个应用,没有很好的理由使用贝叶斯建模,除非--你是 "贝叶斯主义者"。 你有关于回归系数的真正先验信息(这基本上是不太可能的)。

一个主要的缺点是 先验分布棘手的调整参数。

但是,MCMC可以拟合的一些更复杂的模型(例如,层次的logit MCMChlogit)。

Metropolis-Hastings

Metropolis-Hastings很好,很简单,很普遍。但是对循环次数很敏感。而且可能太慢,因为它最终会拒绝大量的循环。

Gibbs 采样


在Gibbs吉布斯抽样中,你不是用适当的概率接受/拒绝,而是用适当的条件概率在参数空间中行进。 并从该分布中抽取一次。

然后你从新的条件分布中抽取下一个参数。

比Metropolis-Hastings快得多。有效样本量要高得多!

BUGS(OpenBUGS,WinBUGS)是使用吉布斯采样器的贝叶斯推理。

JAGS是 "吉布斯采样器"

其他采样器

汉密尔顿蒙特卡洛(HMC)--是一种梯度的Metropolis-Hastings,因此速度更快,对参数之间的关联性更好。

No-U Turn Sampler(NUTS)--由于不需要固定的长度,它的速度更快。这是STAN使用的方法(见http://arxiv.org/pdf/1111.4246v1.pdf)。


(Hoffman and Gelman 2011)

其他工具

你可能想创建你自己的模型,使用贝叶斯MC进行拟合,而不是依赖现有的模型。为此,有几个工具可以选择。

  • BUGS / WinBUGS / OpenBUGS (Bayesian inference Using Gibbs Sampling) - 贝叶斯抽样工具的鼻祖(自1989年起)。WinBUGS是专有的。OpenBUGS的支持率很低。
  • JAGS(Just Another Gibbs Sampler)接受一个用类似于R语言的语法编写的模型字符串,并使用吉布斯抽样从这个模型中编译和生成MCMC样本。可以在R中使用rjags包。
  • Stan(以Stanislaw Ulam命名)是一个类似于JAGS的相当新的程序--速度更快,更强大,发展迅速。从伪R/C语法生成C++代码。安装:http://mc-stan.org/rstan.html**
  • Laplace’s Demon 所有的贝叶斯工具都在R中: http://www.bayesian-inference.com/software

STAN

 


要用STAN拟合一个模型,步骤是:

  1. 为模型生成一个STAN语法伪代码(在JAGS和BUGS中相同
  2. 运行一个R命令,用C++语言编译该模型
  3. 使用生成的函数来拟合你的数据

STAN示例--线性回归

STAN代码是R(例如,具有分布函数)和C(即你必须声明你的变量)之间的一种混合。每个模型定义都有三个块。

1.数据块:

   
  int n; //
  vector[n] y; // Y 向量

这指定了你要输入的原始数据。在本例中,只有Y和X,它们都是长度为n的(数字)向量,是一个不能小于0的整数。

2. 参数块

   
  real beta1;  // slope

这些列出了你要估计的参数:截距、斜率和方差。


3. 模型块

   
    sigma ~ inv_gamma(0.001, 0.001); 

    yhat[i] <- beta0 + beta1 * (x[i] - mean(x));}
    y ~ normal(yhat, sigma); 

注意:

  • 你可以矢量化,但循环也同样快
  • 有许多分布(和 "平均值 "等函数)可用

请经常参阅手册! https://github.com/stan-dev/stan/releases/download/v2.9.0/stan-reference-2.9.0.pdf

2. 在R中编译模型

你把你的模型保存在一个单独的文件中, 然后用stan_model()命令编译这个模型。

这个命令是把你描述的模型,用C++编码和编译一个NUTS采样器。相信我,自己编写C++代码是一件非常非常痛苦的事情(如果没有很多经验的话),而且它保证比R中的同等代码快得多。

注意:这一步可能会很慢。

3. 在R中运行该模型

这里的关键函数是sampling()。还要注意的是,为了给你的模型提供数据,它必须是列表的形式

模拟一些数据。

  r

X <- runif(100,0,20)
Y <- rnorm(100, beta0+beta1*X, sigma)

进行取样!

  r
sampling(stan, Data)

这里有大量的输出,因为它计算了


  r
print(fit, digits = 2)

MCMC诊断法

为了应用coda系列的诊断工具,你需要从STAN拟合对象中提取链,并将其重新创建为mcmc.list。

  r
extract(stan.fit
alply(chains, 2, mcmc)


最受欢迎的见解

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

标签:Metropolis,MCMC,GLM,回归,贝叶斯,Gibbs,模型,Hastings
From: https://www.cnblogs.com/tecdat/p/17720870.html

相关文章

  • 回归测试策略指南
    作为一名软件测试人员,我们需要进行回归测试,以确保代码修改后软件的既有功能不会受到影响。那么如何设计和执行有效的回归测试策略呢?本文将为大家提供一些专业建议。明确回归测试的范围回归测试不可能也不需要对软件做完整测试,要识别出核心功能和关键业务场景,将回归测试的范围控......
  • R语言RStan MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据|附代码
    原文链接:http://tecdat.cn/?p=24456原文出处:拓端数据部落公众号最近我们被客户要求撰写关于RStan的研究报告,包括一些图形和统计输出。如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯。但是,你没有共轭先验。你可能会花费很长时间编写Metr......
  • R语言中使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据|附代码数据
    原文链接:http://tecdat.cn/?p=20828 最近我们被客户要求撰写关于非凸惩罚函数回归的研究报告,包括一些图形和统计输出。本文使用lasso或非凸惩罚拟合线性回归,GLM和Cox回归模型的正则化,特别是最小最大凹度惩罚函数 (MCP) 和光滑切片绝对偏差惩罚(SCAD),以及其他L2惩罚的选项(“弹......
  • R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、负指数方程、幂函
    全文链接:https://tecdat.cn/?p=33742原文出处:拓端数据部落公众号简介在选择最佳拟合实验数据的方程时,可能需要一些经验。当我们没有文献信息时该怎么办?我们建立模型的方法通常是经验主义的。也就是说,我们观察过程,绘制数据并注意到它们遵循一定的模式。例如,我们的客户可能观察......
  • R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性|
    原文链接:http://tecdat.cn/?p=24334最近我们被客户要求撰写关于贝叶斯线性回归的研究报告,包括一些图形和统计输出。像任何统计建模一样,贝叶斯建模可能需要为你的研究问题设计合适的模型,然后开发该模型,使其符合你的数据假设并运行1.了解 Stan统计模型可以在R或其他统计语言的......
  • R语言逻辑回归Logistic选股因素模型交易策略及沪深300指数实证|附代码数据
    全文链接:http://tecdat.cn/?p=32071原文出处:拓端数据部落公众号最近我们被客户要求撰写关于交易策略的研究报告,包括一些图形和统计输出。随着中国的证券市场规模的不断壮大、市场创新不断深化、信息披露不断完善、市场监管不断强化,随着现代投资组合理论的发展和计算机技术的进......
  • 16G内存+CPU本地部署ChatGLM2/Baichuan2推理(Windows/Mac/Linux)
    概述本文使用chatglm.cpp对中文大语言模型(LLM)进行量化与推理,支持ChatGLM2-6B、Baichuan2-13B-Chat等模型在CPU环境16G内存的个人电脑上部署,实现类似ChatGPT的聊天功能。支持的操作系统包括Windows、MacOS、Linux等。其中,量化过程需要临时使用一台内存较大的服务器。4bit量化后......
  • 最小二乘法求解线性回归模型
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • pytorch(2) softmax回归
    https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.4_softmax-regression '''softmax将未规范化的预测变换为非负数并且总和为1我们首先对每个未规范化的预测求幂,这样可以保证输出非负。同时令模型可保持导的性质为了保证最终输出的概率值总和为1......
  • 解决 ChatGLM.CPP+clBlast 编译错误(也适用于SD.CPP)
    首先安装OpenCL和clblast:vcpkginstallopenclclblast下载GitHub上的源码:gitclone--recurse-submoduleshttps://github.com/li-plus/chatglm.cppcdchatglm.cpp这个项目GGML子仓库中,third_party/ggml/src/CMakeList.txt有个错误。打开并找到178-183行: find_......