贝叶斯核机器回归拓展R包:bkmrhat

news2024/9/29 13:22:15

1.摘要

bkmrhat包是用于扩展bkmr包的贝叶斯核机器回归(Bayesian Kernel Machine Regression, BKMR)分析工具,支持多链推断和诊断。该包利用future, rstan, 和coda包的功能,提供了在贝叶斯半参数广义线性模型下进行identity链接和 probit 链接的方法。

主要功能包括:多链合并、继续采样、诊断和预测等。包内包含多种函数,如kmbayes_parallel用于并行计算多个链,kmbayes_combinekmbayes_combine_lowmem用于合并链,as.mcmc.bkmrfitbkmrfit对象转换为MCMC对象以进行诊断,以及predict.bkmrfit用于生成预测。

 

2. 函数介绍

2.1 包介绍

  • 提供了扩展bkmr包的贝叶斯核机器回归工具
  • 支持多链推断和诊断
  • 利用future, rstan, coda

2.2 as.mcmc.bkmrfit

  • 函数书写格式:as.mcmc()
  • bkmrfit对象转换为coda包的MCMC对象
  • coda 包支持许多不同类型的单链 MCMC 诊断,包括 geweke.diag、traceplot 和 effectiveSize。还可以使用后总结,例如 HPDinterval 和summary.mcmc。
  • 用于进行单链MCMC诊断和后验概括
示例代码1 
# 加载bkmrhat包
library(bkmrhat)

# 例子
set.seed(111) #设置随机数种子
library(coda) #加载coda包
# 加载bkmr包
library(bkmr) 
# 生成模拟数据
dat <- bkmr::SimData(n = 50, M = 4)
# 提取数据
y <- dat$y
Z <- dat$Z
X <- dat$X

set.seed(111)
#   运行模型
fitkm <- kmbayes(y = y, Z = Z, X = X, iter = 500, verbose = FALSE,
                 varsel = FALSE)
# 应用as.mcmc函数
mcmcobj <- as.mcmc(fitkm, iterstart=251)    
# 从bkmr对象中提取MCMC链,模型参数的后验总结
summary(mcmcobj) 
# 与bkmr包中的默认值进行比较,该默认值省略了链的前1/2
summary(fitkm)

 

2.3 as.mcmc.list.bkmrfit.list

  • 函数书写格式:as.mcmc.list()
  • 转换多链bkmrfit对象为codamcmc.list对象,以进行 coda MCMC 诊断
  • coda 包支持许多不同类型的 MCMC 诊断,包括 geweke.diag、traceplot 和 effectiveSize。还可以使用后总结,例如 HPDinterval 和summary.mcmc。对于某些 MCMC 诊断,例如 gelman.diag 和 gelman.plot,需要使用多个链
  • 适用于多链MCMC诊断
示例代码2 
# 运行 2 个并行马尔可夫链(通常更好)
future::plan(strategy = future::multisession, workers=2)

# 使用kmbayes_parallel函数运行马尔可夫链
fitkm.list <- kmbayes_parallel(nchains=2, y = y, Z = Z, X = X, iter = 1000, verbose = FALSE, varsel = FALSE)

# 将结果转换为mcmc对象
mcmcobj = as.mcmc.list(fitkm.list)

# 打印马尔可夫链的摘要统计信息
summary(mcmcobj)

2.4 ExtractPIPs_parallel

  • 函数书写格式:ExtractPIPs()
  • 计算每个链的后验包含概率
  • “Posterior inclusion probabilities” 🔤后验包含概率🔤
示例代码3 
# 设置并行计算策略为多会话(multisession),使用4个工作进程
future::plan(strategy = future::multisession, workers=2)

# 使用kmbayes_parallel函数运行并行马尔可夫链,生成马尔可夫链结果的列表fitkm.list
fitkm.list <- kmbayes_parallel(nchains=2, y = y, Z = Z, X = X, iter = 500, verbose = FALSE, varsel = TRUE)

# 将所有马尔可夫链的结果合并
bigkm = kmbayes_combine(fitkm.list, excludeburnin=FALSE)

# 从合并的马尔可夫链结果中提取参数估计
ests = ExtractEsts(bigkm)  

# 从合并的马尔可夫链结果中提取变量选择的后验概率
ExtractPIPs(bigkm)

2.5 kmbayes_combine

  • 函数书写格式:kmbayes_combine()
  • 合并多个bkmr
  • 组合包含 BKMR 的多个链适合不同的起始值
  • 可设置自定义燃烧期和是否排除燃烧期
  • MCMC实施中的若干术语:

    贝叶斯统计——6. 贝叶斯统计计算方法-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_52505631/article/details/136207793

参数名参数类型中文解释
fitkm.listoutputbkmrfit 对象的列表,每个对象代表一个 MCMC 链的后验
burninnumeric

自定义的燃烧数(每条链的燃烧迭代数)。

如果为 NULL,则默认为每条链的一半

excludeburninlogical

是否从最终链中排除燃烧迭代次数?注意,所有bkmr包函数会自动从计算

中排除燃烧迭代次数

reorderlogical

确保合并链的前半部分只包含每个单独链的前半部分 - 这允许使用bkmr包中

的标准函数,这些函数会自动修剪迭代的前半部分。这可用于后验总结,

但某些诊断可能效果不好(自相关性,有效样本量),因此应在单独链上

进行诊断检测

示例代码见示例代码3

2.6 kmbayes_combine_lowmem

  • 类似于kmbayes_combine,但降低内存需求
  • 在较低的内存设置中组合多个 BKMR 链
  • 通过部分写入磁盘避免内存不足。此函数将一些结果写入磁盘,而不是尝试在内存中完全处理,这在某些情况下将避免 kmbayes_combine 可能发生的“内存不足【"out of memory"】”错误
示例代码4
# 设置并行计算策略为多会话(multisession),使用2个工作进程
future::plan(strategy = future::multisession, workers=2)

# 使用kmbayes_parallel函数运行并行马尔可夫链,生成马尔可夫链结果的列表fitkm.list
fitkm.list <- kmbayes_parallel(nchains=2, y = y, Z = Z, X = X, iter = 500, verbose = FALSE, varsel = TRUE)

# 将所有马尔可夫链的结果合并,使用kmbayes_combine_lowmem函数,保留全部样本
bigkm = kmbayes_combine_lowmem(fitkm.list, excludeburnin=FALSE)

# 从合并的马尔可夫链结果中提取参数估计
ests = ExtractEsts(bigkm)  # 默认保留样本后半部分

# 从合并的马尔可夫链结果中提取变量选择的后验概率
ExtractPIPs(bigkm)

2.7 kmbayes_continue

  • 继续现有bkmr拟合的采样
  • 不完全从先验开始,而是从最后的参数值开始
  • 使用场景:当您使用 kmbayes 函数进行 MCMC 采样,但您没有获取足够的样本且不想重新开始时,请使用此选项
示例代码5
# 调用 bkmr::kmbayes 函数进行贝叶斯分析,生成初始模型 fitty1
fitty1 = bkmr::kmbayes(y = y, Z = Z, X = X, est.h = TRUE, iter = 100)

# 进行一些诊断分析,以判断100次迭代是否足够(默认设置的迭代次数)
# 添加100个额外的迭代(仅作为示例,仍然不足够)
fitty2 = kmbayes_continue(fitty1, iter = 100)

# 将 fitty2 转换为 mcmc 对象
cobj = as.mcmc(fitty2)

# 输出 mcmc 对象中的变量名称
varnames(cobj)

2.8 kmbayes_diagnose

  • kmbayes_diag
  • 使用rstan包进行MCMC诊断
  • 报告R-hat等指标:使用 Rhat、ess_bulk 和 ess_tail 函数从 rstan 包中为 MCMC 提供诊断。请注意,仅针对 kmbayes_parallel 中的 bkmrfit.list 对象报告 r-hat
示例代码6
# 使用 kmbayes_parallel 函数进行贝叶斯分析,并创建 fitkm.list 列表对象
# nchains=2 表示使用2个链,y、Z、X 是输入的数据,iter=1000 表示迭代次数为1000,verbose=FALSE 表示关闭冗长的输出,varsel=TRUE 表示进行变量选择
fitkm.list <- kmbayes_parallel(nchains = 2, y = y, Z = Z, X = X, iter = 1000, verbose = FALSE, varsel = TRUE)

# 运行 kmbayes_diag 函数对 fitkm.list 进行诊断分析
kmbayes_diag(fitkm.list)

# 运行 kmbayes_diag 函数对第一个链(fitkm.list[[1]])进行诊断分析
kmbayes_diag(fitkm.list[[1]])

# 关闭所有连接
closeAllConnections()

2.9 kmbayes_parallel

  • 并行运行多个bkmr
  • 利用future包加速计算:从 kmbayes 函数拟合平行链。这些链利用future包中的并行处理,可以加速拟合并实现依赖于分散初始值的多个马尔可夫链的诊断。
示例代码见示例代码7

2.10 kmbayes_parallel_continue

  • 继续kmbayes_parallel拟合的采样
  • 使用场景:当您使用 kmbayes_parallel 函数进行 MCMC 采样,但您没有获取足够的样本且不想重新开始时,请使用此选项。
  • 返回多链bkmrfit对象

示例代码7
# 并行计算策略,同时指定2个工作进程
future::plan(strategy = future::multisession, workers = 2)

# 使用 kmbayes_parallel 函数进行贝叶斯分析,创建 fitty1p 对象
fitty1p = kmbayes_parallel(nchains = 2, y = y, Z = Z, X = X)

# 使用 kmbayes_parallel_continue 函数继续在 fitty1p 上进行贝叶斯分析,迭代次数设置为3000,创建 fitty2p 对象
fitty2p = kmbayes_parallel_continue(fitty1p, iter = 3000)

# 将 fitty2p 转换为 mcmc.list 格式,创建 cobj 对象
cobj = as.mcmc.list(fitty2p)

# 绘制 MCMC 对象 cobj 的图形
plot(cobj)

2.11 predict.bkmrfit

  • 函数书写格式:predict()
  • 生成基于后验均值或标准差的预测值
  • 适合与SuperLearner等集成:提供基于后验均值的观察水平预测,或者生成观察预测的后验标准差。此函数对于与仅使用点估计的 SuperLearner 等集成机器学习包进行交互时非常有用。
示例代码8
# 加载bkmr库
library(bkmr)

# 设置种子以确保结果的可复现性
set.seed(111)

# 生成模拟数据
dat <- bkmr::SimData(n = 50, M = 4)
y <- dat$y # 响应变量
Z <- dat$Z # 块变量
X <- dat$X # 协变量

# 再次设置种子以确保结果的可复现性
set.seed(111)

# 拟合贝叶斯知识迁移回归模型
fitkm <- kmbayes(y = y, Z = Z, X = X, iter = 200, verbose = FALSE, varsel = TRUE)

# 预测后验均值
postmean = predict(fitkm)

# 使用Z的一半值进行预测,得到预测结果的均值差异
postmean2 = predict(fitkm, Znew = Z/2)

# 计算后验均值的均值差异
mean(postmean - postmean2)

2.12 OverallRiskSummaries_parallel

  • 按链计算总体风险概览
  • 参数设置参考bmkr包的OverallRiskSummaries()
  • bkmr包
    • ​​​​贝叶斯核机回归估计混合物健康效应 【BKMR包】——理论篇-CSDN博客
    • 贝叶斯核机回归估计混合物健康效应 【BKMR包】——实操篇-CSDN博客

2.13 PredictorResponseBivar_parallel

  • 按链计算二元预测变量响应
  • 参数设置参考bmkr包的PredictorResponseBivar()

2.14 PredictorResponseUnivar_parallel

  • 按链计算单变量预测响应摘要
  • 参数设置参考bmkr包的PredictorResponseUnivar()

2.15 SamplePred_parallel

  • 按链获取E(Y|h(Z),X,beta)的后验样本
  • 参数设置参考bmkr包的SamplePred()

2.16 SingVarRiskSummaries_parallel

  • 按链计算单一变量摘要
  • 参数设置参考bmkr包的SingVarRiskSummaries()

参考文献

bkmrhat: Parallel Chain Tools for Bayesian Kernel Machine Regression (r-project.org)icon-default.png?t=N7T8https://cran.r-project.org/web/packages/bkmrhat/bkmrhat.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 通过共享内存调用C++ 算法

需求&#xff1a; C#程序调用 C开发的dll. 一种C# 程序调用c 算法方案_算法怎么被c#调用-CSDN博客 上回书说到&#xff0c;将c算法封装为dll 插件&#xff0c;c加载后&#xff0c;暴露C风格接口&#xff0c;然后供C#调用。但是这样有几个问题&#xff1a; 1&#xff0c;一是…

Django后台管理(二)

一、自定义注册管理类介绍 官网:Django 管理站点 | Django 文档 | Django 注册模型除了使用 Django 默认的管理类admin,也可以自定义,比如: class StudentAdmin(admin.ModelAdmin):pass admin.site.register(Student, StudentAdmin)ModelAdmin 类是管理界面中模型的表示。…

Java四大引用详解:强引用、软引用、弱引用、虚引用

在JDK1.2以前的版本中&#xff0c;当一个对象不被任何变量引用&#xff0c;那么程序就无法再使用这个对象。也就是说&#xff0c;只有对象处于可触及状态&#xff0c;程序才能使用它。这就像在商店购买了某样物品后&#xff0c;如果有用就一直保留它&#xff0c;否则就把它扔到…

【深度学习】微调ChatGlm3-6b

1.前言 指令微调ChatGlm3-6b。微调教程在github地址中给出&#xff0c;微调环境是Qwen提供的docker镜像为环境。 镜像获取方式&#xff1a;docker pull qwenllm/qwen:cu117 github地址&#xff1a;https://github.com/liucongg/ChatGLM-Finetuning 2.微调过程 github地址中的教…

网络防御-VPN概述

目录 VPN的概述VPN的分类根据建设的单位不同分类根据组网方式不同分类根据VPN技术实现的层次来进行分类 VPN其他常用技术身份认证技术 --- 身份认证是VPN技术的前提。加解密技术 --- 以此来抵抗网络中的一些被动攻击数据认证技术 --- 验货 --- 保证数据的完整性密钥管理技术 VP…

CS_上线三层跨网段机器(完整过程还原)

以前讲过用cs_smb_beacon上线不出网机器&#xff0c;但是真实的网络拓扑肯定不止这么一层的网络&#xff01; 所以我就来搭建一个复杂一点的网络环境&#xff01;&#xff01; 当然了&#xff0c;这三台电脑之间都是不同的网段&#xff0c;&#xff08;但是同属于一个域环境&a…

C# 学习第二弹

一、变量 存储区&#xff08;内存&#xff09;中的一个存储单元 &#xff08;一&#xff09;变量的声明和初始化 1、声明变量——根据类型分配空间 ①声明变量的方式 —变量类型 变量名 数值&#xff1b; —变量类型 变量名&#xff1b; 变量名 数值&#xff1b; —变…

【Rust】简介、安装和编译

文章目录 一、Rust简介二、Rust 安装三、Rust 程序结构3.1 模块&#xff08;Modules&#xff09;&#xff1a;3.2 函数&#xff08;Functions&#xff09;&#xff1a;3.3 变量&#xff08;Variables&#xff09;&#xff1a;3.4 控制流&#xff08;Control Flow&#xff09;&a…

Coursera吴恩达机器学习专项课程02:Advanced Learning Algorithms 笔记 Week03

Week 03 of Advanced Learning Algorithms 笔者在2022年7月份取得这门课的证书&#xff0c;现在&#xff08;2024年2月25日&#xff09;才想起来将笔记发布到博客上。 Website: https://www.coursera.org/learn/advanced-learning-algorithms?specializationmachine-learnin…

Centos配置SSH并禁止密码登录

CentOS8 配置SSH使用密钥登录并禁止密码登录 一、概念 SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。 SSH提供两个级别的认证&#xff1a; 基于口令的认证 基于密钥的认证 基本使…

SkyWalking微服务链路追踪实战

目录 skywalking是什么&#xff1f; Skywalking主要功能特性 Skywalking整体架构 SkyWalking 环境搭建部署 SkyWalking快速开始 SkyWalking Agent追踪微服务 通过jar包方式接入 在IDEA中使用Skywalking Skywalking跨多个微服务追踪 Skywalking集成日志框架 Skywalki…

【c语言】if 选择语句

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

计网Lesson16 - TCP选择重传和流量控制

文章目录 1. 选择性确认&#xff08;SACK&#xff09;2. TCP流量控制2.1 基本情况2.2 特殊情况 1. 选择性确认&#xff08;SACK&#xff09; TCP通信中&#xff0c;发送序列中的某一包丢失&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5 中 3 丢失&#…

Promise 介绍与基本使用 - 学习笔记

Promise 介绍与基本使用 1、 Promise 是什么&#xff1f;2、创建 Promise 实例对象3、Promise 实例方法4、Promise 的基本工作流程5、实例方法6、静态方法7、async 和 await7.1、关键字7.2、实例7.3、区别7.4、为什么使用 async/await 比较好&#xff1f; 1、 Promise 是什么&a…

NUS神经网络生成我感觉解读过于夸大了

网上对其解读有点过了&#xff0c;只是合成了最后标准化层的参数&#xff0c;或者是更多的其他层参数。而不是网络结构。对于新任务下的网络结构以及参数如何生成&#xff0c;应该是做不到的&#xff0c;论文意义有限。 论文片段&#xff1a;我们提出了神经网络扩散&#xff0…

数据可视化引领智慧仓储新时代

随着科技的飞速发展&#xff0c;数据可视化已然成为智慧仓储领域的璀璨明珠&#xff0c;其强大的功能和多面的作用让智慧仓储焕发出勃勃生机。让我们一同探索&#xff0c;数据可视化究竟在智慧仓储中起到了怎样的作用。下面我就以可视化从业者的角度来简单谈谈这个话题。 在这…

【练习——打印每一位数】

打印一个数的每一位 举个例子&#xff1a;我们现在要求打印出123的每一位数字。我们需要去想123%10等于3&#xff0c;就可以把3单独打印出来了&#xff0c;然后再将123/10可以得到12&#xff0c;将12%10就可以打印出2&#xff0c;而我们最后想打印出1&#xff0c;只需要1%10就…

数据隐私安全趋势

在当今社交媒体和开源开发的世界中&#xff0c;共享似乎已成为社会常态。毕竟&#xff0c;我们都被教导分享就是关怀。这不仅适用于个人&#xff0c;也适用于公司&#xff1a;无论是有意在社交媒体帐户和公司网站上&#xff0c;还是无意中通过员工的行为&#xff0c;公司可能会…

树莓派使用git clone时报错failed: The TLS connection was non-properly terminated.

fatal: unable to access https://github.com/jacksonliam/mjpg-streamer.git/: gnutls_handshake() failed: The TLS connection was non-properly terminated. 原因&#xff1a;权限不足 解决办法&#xff1a;sudo git clone 加对应网址。 sudo git clone https://github.co…

golang gin单独部署vue3.0前后端分离应用

概述 因为公司最近的项目前端使用vue 3.0&#xff0c;后端api使用golang gin框架。测试通过后&#xff0c;博文记录&#xff0c;用于备忘。 步骤 npm run build&#xff0c;构建出前端项目的dist目录&#xff0c;dist目录的结构具体如下图 将dist目录复制到后端程序同级目录…