R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例...
原文链接:http://tecdat.cn/?p=23236
在频率学派中,观察样本是随机的,而参数是固定的、未知的数量(点击文末“阅读原文”获取完整代码数据)。
相关视频
什么是频率学派?
概率被解释为一个随机过程的许多观测的预期频率。
有一种想法是 "真实的",例如,在预测鱼的生活环境时,盐度和温度之间的相互作用有一个回归系数?
什么是贝叶斯学派?
在贝叶斯方法中,概率被解释为对信念的主观衡量。
所有的变量--因变量、参数和假设都是随机变量。我们用数据来确定一个估计的确定性(可信度)。
这种盐度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 算法
开始:
跳到一个新的候选位置:
计算后验:
如果
如果
转到第2步
Metropolis-Hastings: 硬币例子
你抛出了5个正面。你对θ的最初 "猜测 "是
MCMC:
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.newp.old <- p.new}
画图:
hist(thetas\[-(1:100)\] )
curve(6*x^5 )
点击标题查阅往期内容
R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资
左右滑动查看更多
01
02
03
04
采样链:调整、细化、多链
那个 "朝向 "平稳的初始过渡被称为 "预烧期",必须加以修整。
怎么做?用眼睛看
采样过程(显然)是自相关的。
如何做?通常是用眼看,用acf()作为指导。
为了保证你收敛到正确的分布,你通常会从不同的位置获得多条链(例如4条)。
有效样本量
MCMC 诊断法
R软件包帮助分析MCMC链。一个例子是线性回归的贝叶斯拟合(α,β,σ
plot(line)
预烧部分:
plot(line\[\[1\]\], start=10)
MCMC诊断法
查看后验分布(同时评估收敛性)。
density(line)
参数之间的关联性,以及链内的自相关关系
levelplot(line\[\[2\]\])
acfplot(line)
统计摘要
运行MCMC的工具(在R内部)
逻辑Logistic回归:婴儿出生体重低
logitmcmc(low~age+as.factor(race)+smoke )
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拟合一个模型,步骤是:
为模型生成一个STAN语法伪代码(在JAGS和BUGS中相同
运行一个R命令,用C++语言编译该模型
使用生成的函数来拟合你的数据
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()。还要注意的是,为了给你的模型提供数据,它必须是列表的形式
模拟一些数据。
X <- runif(100,0,20)
Y <- rnorm(100, beta0+beta1*X, sigma)
进行取样!
sampling(stan, Data)
这里有大量的输出,因为它计算了
print(fit, digits = 2)
MCMC诊断法
为了应用coda系列的诊断工具,你需要从STAN拟合对象中提取链,并将其重新创建为mcmc.list。
extract(stan.fit
alply(chains, 2, mcmc)
点击文末“阅读原文”
获取全文完整代码数据资料。
本文选自《R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例》。
点击标题查阅往期内容
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
MATLAB随机森林优化贝叶斯预测分析汽车燃油经济性
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采样用于回归的贝叶斯估计
相关文章:

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例...
原文链接:http://tecdat.cn/?p23236 在频率学派中,观察样本是随机的,而参数是固定的、未知的数量(点击文末“阅读原文”获取完整代码数据)。 相关视频 什么是频率学派? 概率被解释为一个随机过程的许多观测…...

若依前后端分离如何解决匿名注解启动报错?
SpringBoot2.6.0默认是ant_path_matcher解析方式,但是2.6.0之后默认是path_pattern_parser解析方式。 所以导致读取注解类方法需要对应的调整,当前若依项目默认版本是2.5.x,如果使用大于2.6.x,需要将info.getPatternsCondition().getPatterns()修改为info.getPathPatterns…...

Spring面试题4:面试官:说一说Spring由哪些模块组成?说一说JDBC和DAO之间的联系和区别?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring由哪些模块组成? Spring是一个开源的Java框架,由多个模块组成,每个模块都提供不同的功能和特性。下面是Spring框架的主要模块: S…...

【再识C进阶3(上)】详细地认识字符串函数、进行模拟字符串函数以及拓展内容
小编在写这篇博客时,经过了九一八,回想起了祖国曾经的伤疤,勿忘国耻,振兴中华!加油,逐梦少年! 前言 💓作者简介: 加油,旭杏,目前大二,…...

docker启动mysql8目录挂载改动
5.7版本: 拉取mysql镜像 docker pull mysql:5.7启动 docker run -p 3306:3306 --name mysql5 \ -v /Users/zhaosichun/data/dockerData/log:/var/log/mysql \ -v /Users/zhaosichun/data/dockerData/data:/var/lib/mysql \ -v /Users/zhaosichun/data/dockerData…...

CHATGPT中国免费网页版有哪些-CHATGPT中文版网页
CHATGPT中国免费网页版,一个强大的人工智能聊天机器人。如果你曾经感到困惑、寻求答案,或者需要一些灵感,那么CHATGPT国内网页版可能会成为你的好朋友。 CHATGPT国内免费网页版:你的多面“好朋友” 随着人工智能技术的不断发展&a…...

docker network create命令
docker network create命令用于创建一个新的网络连接。 DRIVER接受内置网络驱动程序的桥接或覆盖。如果安装了第三方或自己的自定义网络驱动程序,则可以在此处指定DRIVER。 如果不指定--driver选项,该命令将为您自动创建一个桥接网络。 当安装Docker Eng…...

4G版本云音响设置教程腾讯云平台版本
文章目录 4G本云音响设置教程介绍一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用USB连接设备4.设置参数 三、腾讯云物联网套件协议使用说明1.推送协议信息2.topic规则说明…...

Grafana离线安装部署以及插件安装
Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性:灵活丰富的图形…...

非独立随机变量的概率上界估计
目前的概率论或者随机变量书籍过分强调对独立随机变量的大数定律,中心极限定理,遗憾上界的估计。而对于非独立随机变量的研究很少,在《概率论的极限定理》中曾给出过一般随机变量求和的渐进分布簇的具体形式,然而形式却太过复杂。…...

常见电子仪器及其用途
常见电子仪器及其用途包括: 示波器:示波器是一种用途十分广泛、易于使用且功能强大的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图像,便于我们研究各种电现象的变化过程。示波器可以直接用来测量电信号的波形,是电子…...

配置测试ip、正式ip、本地ip
目的:npm run serve启动本地服务,npm run test打包测试环境,npm run build打包正式环境。 具体做法如下: 一、在项目中新增三个环境的文件 .env.development VITE_BASE_URLhttp://192.168.1.12:8080/ .env.production VITE_…...

Linux 系统移植(一)-- 系统组成
参考资料: linux系统移植篇(一)—— linux系统组成【野火Linux移植篇】1-uboot初识与编译/烧录步骤 文章目录 一、linux系统组成二、Uboot三、Linux内核四、设备树 本篇为Linux系统移植系列的第一篇文章,介绍了一个完整可运行的L…...

利用git的贮藏功能
可以将自己分支的当前状态贮藏切换到其它分支再切换回来的时候,应用就行了...

第52节:cesium 3DTiles模型特效+选中高亮(含源码+视频)
结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-navigation...

day03_基础语法
今日内容 零、复习昨日 一、Idea安装,配置 二、Idea使用 三、输出语句 四、变量 五、数据类型 附录: 单词 零、 复习昨日 1 装软件(typora,思维导图) 2 gpt(学会让他帮你解决问题) 3 java发展(常识) 4 HelloWorld程序 5 编码规范 6 安装jdk,配置环境变量 电脑常识 任…...

数据结构与算法-时间复杂度与空间复杂度
数据结构与算法 🎈1.概论🔭1.1什么是数据结构?🔭1.2什么是算法? 🎈2.算法效率🔭2.1如何衡量一个算法的好坏?🔭2.2算法的复杂度🔭2.3时间复杂度📖2…...

数组的去重
根据您提供的代码片段,看起来您尝试使用嵌套的 for 循环将数组 data 中的元素添加到新数组 newData 中。然而,在您给出的代码中,if 语句的条件部分为空,可能是因为您还没有确定用于判断重复项的条件。如果您想要去除数组中的重复项…...

Electron自动化测试技术选型调研
Electron简介 Electron是一个开源的框架,用于构建跨平台的桌面应用程序。它由GitHub开发并于2013年首次发布。Electron允许开发人员使用Web技术(如HTML、CSS和JavaScript)来构建桌面应用程序,同时可以在Windows、macOS和Linux等操…...

微服务学习(九):安装OpenOffice
微服务学习(九):安装OpenOffice 一、下载OpenOffice 下载地址:OpenOffice 二、开始安装 上传资源到服务器 解压资源包 tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-rpm_zh-CN.tar.gz进入zh-CN/RPMS目录下安装…...

SAP Oracle表空间扩展技术手册
1、DBACOCKPIT下查看表空间 当表空间不足(达到99%)时,需要按以下步骤扩充表空间(每次扩充20000M,20G): (也可以通过DB13,DB02查看表空间) 新浪博客 Tablespace PSAPSR3 is 100% used | SAP Community Oracle是通过增加数据文件的方式来为表空间扩容。为指定表空间增…...

Linux系统编程——线程的学习
学习参考博文: Linux多线程编程初探 Linux系统编程学习相关博文 Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——进程间通信的学习Linux系统编程——网络编程的学习 Linux系统编程——线程的学习 一、概述1. 进程与线程的区别2. 使…...

zemaxMIF曲线图
调制传递函数( Modulation Transfer Function,MTF )是用来形容光学系统成像质量的重要指标。 通过对光学系统像空间进行傅里叶变换,可以得到一张分析图表,来描述像面上对比度和空间频率之间的对应关系。 对比度&…...

【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
前言 🍊缘由 Iphone15来了,两年之约你还记得吗? 两年前,与特别的人有一个特别的约定。虽物是人非,但思念仍在。 遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提…...

什么是WhatsApp群发,WhatsApp协议,WhatsApp云控
那么WhatsApp群控云控可以做什么呢? 1、获客 自动化引流,强大的可控性,产品快速拓客 2、导流 一键式傻瓜化自动加好友,群发,朋友圈营销 3、群控 一键式拉群好友,建群,进群 …...

RealVNC viewer 窗口指定默认显示
RealVNC Viewer关于显示器(monitor)的参数有两个,一个是monitor,一个是useallmonitor。 monitor就是指定viewer窗体在哪个显示器上显示的,windows下的默认值是空白,改为\\.\DISPLAY2 就可以在打开远程窗口的时候默认在副屏上显…...

图论20(Leetcode1254.统计封闭岛屿的数目)
代码: class Solution {static int[][] dirs {{1,0},{-1,0},{0,1},{0,-1}};public int closedIsland(int[][] grid) {int num 0; for(int i0;i<grid.length;i){for(int j0;j<grid[0].length;j){if(grid[i][j]0){int[] start {i,j};if(getIsland(start,gri…...

Docker 的基本概念和优势,以及在应用程序开发中的实际应用
Docker是一种开源的容器化平台,它可以将应用程序打包成容器,并且可以在不同的环境中运行。Docker的基本概念包括: 镜像(Image):Docker镜像是一个可执行的包,它包含了运行应用程序所需的所有文件…...

数据仓库整理
数仓 olap vs oltp OLTP主要用于支持日常的业务操作,如银行交易、电子商务等,强调数据的准确性、实时性和并发性。OLAP主要用于支持复杂的数据分析,如数据仓库、决策支持等,强调数据的维度、聚合和可视化。 将OLTP数据库的数据…...

《C++API设计》读书笔记(3):模式
本章内容 本章涵盖了一些与CAPI设计相关的设计模式和惯用法。 “设计模式(Design Pattern)”表示软件设计问题的一些通用解决方案。该术语来源于《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Softwar…...