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

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$Xset.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://xiahunao.cn/news/2811928.html

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

相关文章

企业想要高效上云?如何实现?

进入数字化、智能化时代以后&#xff0c;企业数字化转型已成为企业发展的必然趋势。浪潮之中&#xff0c;越来越多的企业开始积极探索上云路径&#xff0c;云上创新已经成为企业加速数字化转型&#xff0c;提升竞争力的必经之路。 赞奇与华为携手共创云桌面SaaS产品—赞奇云工作…

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说&#xff0c;你要一部分原生代码开发&#xff0c;你就需要自己把 android 项目单独出去做&#xff08;其实就相当于android 项目引用 Flutter的dart部分&#xff09;。也就是说&#xff0c;在 Flutter…

鲲鹏arm64架构下安装KubeSphere

鲲鹏arm64架构下安装KubeSphere 官方参考文档: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基础上最小化安装 KubeSphere 前提条件 官方参考文档: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…

uniapp的微信小程序授权头像昵称(最新版)

前面我出过两期博客关于小程序授权登录,利用php实现一个简单的小程序授权登录并存储授权用户信息到数据库的完整流程。无奈&#xff0c;小程序官方又整幺蛾子了。wx.getUserInfo接口收回&#xff0c;wx.getUserProfile接口也不让用。导致我的个人小程序&#xff1a;梦缘 的授权…

Unity中URP下实现水体(水面高光)

文章目录 前言一、实现高光反射原理1、原理&#xff1a;2、公式&#xff1a; 二、实现1、定义 _SpecularColor 作为高光反射的颜色2、定义 _SpecularIntensity 作为反射系数&#xff0c;控制高光反射的强度3、定义 _Smoothness 作为高光指数&#xff0c;用于模型高光范围4、模拟…

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition&#xff0c;特别是其【中文进阶版 Win/Mac】&#xff0c;是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化&#xff0c;并兼容W…

SpringCache缓存专题

SpringCache缓存专题 学习目标 1、理解缓存存在的意义 2、掌握redis与SpringCache的集成方式 3、掌握SpringCache注解的使用 4、掌握项目集成SpringCache流程 第一章 基于SpringCache缓存方案 1.为什么需要缓存 ​ 前台请求&#xff0c;后台先从缓存中取数据&#xff0…

将SU模型导入ARCGIS,并获取高度信息,多面体转SHP文件(ARCMAP)

问题:将Sketchup中导出的su模型,导入arcgis并得到面shp文件,进而获取各建筑的高度、面积等信息。 思路: (1)导入arcgis得到多面体 (2)转为面shp文件 (3)计算高度/面积等 1、【3D Analyst工具】【转换】【由文件转出】【导入3D文件】(在此步骤之间,建议先建立一个…

【Flink精讲】Flink状态及Checkpoint调优

RocksDB大状态调优 RocksDB 是基于 LSM Tree 实现的&#xff08;类似 HBase&#xff09; &#xff0c;写数据都是先缓存到内存中&#xff0c; 所以 RocksDB 的写请求效率比较高。 RocksDB 使用内存结合磁盘的方式来存储数据&#xff0c;每 次获取数据时&#xff0c;先从内存中 …

NVIDIA的RTX 500和1000系列专业Ada世代笔记本GPU,让你随时随地享受AI增强的工作流程

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式&#xff1a;从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发&#xff0c;逐步深入&#xff0c;最终结合代码实战&#xff0c;带你…

提升Vue3应用效率的秘诀:深入比较ref与reactive!

ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型&#xff0c;而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象&#xff0c;但 Vue3 官方文档更推荐使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

Vue笔记(一)

常用指令 1.v-show与v-if底层原理的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>创建一个V…

B端系统:导航机制设计,用户体验提升的法宝

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于导航设计的不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的导航体系改如何设计&#xff0c…

ThreadLocal从使用到实现原理与源码详解

ThreadLocal概述 ThreadLocal是多线程中对于解决线程安全的一个操作类&#xff0c;它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享。 案例&#xff1a;使用JDBC操作数据库时&#xff0c;会将每一个线程的…

用 React 实现搜索 GitHub 用户功能

用 React 实现搜索 GitHub 用户功能 在本篇博客中&#xff0c;我们将介绍如何在 React 应用中搜索 GitHub 用户并显示他们的信息。 创建 React 应用 首先&#xff0c;我们使用 Create React App 创建一个新的 React 应用。Create React App 是一个快速搭建 React 项目的工具…

Openharmony - HDF平台驱动之I2C驱动和测试程序

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述I2C平台驱动I2C平台驱动HDF框架I2C平台驱动的使用I2C应用开发接口说明代码目录i2ctest.cBUILD.gnbundle.json修改config.json文件…

Langchain-Chatchat:离线运行的大模型知识库 | 开源日报 No.182

chatchat-space/Langchain-Chatchat Stars: 22k License: Apache-2.0 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现的开源、可离线部署的检索增强生成 (RAG) 大模型知识库项目。该项目是一个可以实现完全本地化推理的知识库增强方案&#xff0c;重点解决数据安全保护…

三菱plc控制双控电磁阀(从接线到程序)

目录 硬件设备 电磁阀的类型&#xff08;下图为例&#xff09; 三菱plc的类型&#xff08;西门子控正COOM接接正极&#xff0c;三菱控负COM接负极&#xff09; 气缸图 三菱plc与双控电磁阀接线 输出接线图&#xff08;COOM输出的公共端&#xff0c;三菱控负COM接负极&#x…

Nginx的核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 1.3工作进程优先级指令 1.4 工作进程 CPU 绑定指令 1.5 调试可打开的文件个数 1.6 调试文件大小指令 1.7 只运…