贝叶斯核机器回归拓展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://www.mzph.cn/news/704957.shtml

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

相关文章

CUDA编程 - 用向量化访存优化 - Cuda elementwise - Add(逐点相加)- 学习记录

Cuda elementwise - Add 一、简介1.1、ElementWise Add1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.1、简单的逐点相加核函数2.2、ElementWise Add float4&#xff08;向量化访存&#xff09;2.3、完整代码 一、简介 1.1、ElementWise Add Element-wise 操作…

替代 Intercom 和 Zendesk: 开源的客户互动套件 | 开源日报 No.183

chatwoot/chatwoot Stars: 17.8k License: NOASSERTION chatwoot 是一个开源的客户互动套件&#xff0c;是 Intercom、Zendesk、Salesforce Service Cloud 等的替代品。 该项目主要功能、关键特性和核心优势包括&#xff1a; 支持多种对话渠道&#xff0c;如网站、Facebook、…

2024022601-数据库语言SQL

数据库语言SQL SQL的发展 1974年&#xff0c;由Boyce和Chamberlin提出 1975~1979&#xff0c;IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 非过程化语言 SQL语言进行数据库操作…

【 C++ 】闭散列哈希表的模拟实现

哈希节点状态 我们都很清楚数组里的每一个值无非三种状态&#xff1a; 如果某下标没有值&#xff0c;则代表空EMPTY。如果有值在代表存在EXIST。如果此位置的值被删掉了&#xff0c;则表示为DELETE。 而这三种状态我们可以借助enum枚举来帮助我们表示数组里每个位置的状态。…

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展&#xff0c;各行各业都得到质的飞跃。产品的迭代速度也大大加快&#xff0c;作为全球领先的加固行移动终端一站式提供商&#xff0c;亿道信息跟紧时代潮流&#xff0c;推出EM-I10J、EM-I20J两款均衡型加固平板&#xff0c;为行业发展注入新动力。 接地…

【Python笔记-设计模式】命令模式

一、说明 命令模式是一种行为设计模式&#xff0c;旨在对命令的封装&#xff0c;根据不同的请求将方法参数化、延迟请求执行或将其放入队列中&#xff0c;且能实现可撤销操作。 (一) 解决问题 将请求发送者和接受者解耦&#xff0c;请求发送者只需知道如何发送请求&#xff…

LVGL 环境搭建-基于WSL

背景说明 小白刚开始接触LVGL&#xff0c;前些日子狠心花198元入手了一块堪称LVGL 入门利器~HMI-Board 开发板&#xff0c;虽然有RT-Thread 集成好的LVGL 环境&#xff0c;只需要几个步骤就能成功把lvgl 的示例运行起来&#xff0c;对于爱折腾的我来说&#xff0c;过于简单也并…

Sora专辑|AI视频制作新时代的曙光:OpenAI Sora 模型启示录

本文深入剖析 OpenAI 最新发布的人工智能视频生成模型 Sora 的工作原理,并探讨它对电影制作行业的深远影响。Sora 利用海量数据和强大的计算能力,学习视频的"语法规则"即物理定律,从而生成逼真的视频画面。Sora 将从根本上改变电影制作的方式,降低制作成本、赋能…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

助力智能化农田作物除草,基于DETR(DEtection TRansformer)模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中&#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了&#xff0c;结合智能化的设备可以实现只能除草等操作&#xff0c;玉米作物场景下的杂草检测我们则少有涉及&#xff0c;这里本文的主要目的就是想要基于DETR模型来开发构建玉米…

【春运抢票攻略浅析】

参考 最全12306放票规则&#xff0c;抢票策略&#xff0c;候补作用2023年12306抢票攻略&#xff08;纯技巧&#xff09; 研究放票规则&#xff0c;候补的时候车次进行一下挑选&#xff0c;能够买长乘短的尽量买长&#xff0c;不要候补一些区间票吧&#xff0c;这是一开始放票…

LeetCode刷题---确认率

解题思路: 将Signups和Confirmations进行左连接&#xff0c;连接的条件为Signups.user_idConfirmations.user_id 根据题中要求进行查询&#xff0c;这里使用AVG聚合函数来求解确认率 AVG(c.action‘confirmed’)表示对action列进行求平均&#xff0c;如果action‘confirmed’&a…

【题解】—— LeetCode一周小结8

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结7 19.N 叉树的后序遍历 题目链接&#xff1a;590. N 叉树的后序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#x…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面&#xff1a; 安全性提升&#xff1a;雾天能见度低&#xff0c;视线受阻&#xff0c;这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术&#xff0c;可以在雾天条件下及时发现…

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具&#xff0c;用于输出文件的前 n 行。默认为 10&#xff0c;即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 &#xff1a; head --help 执行命令结果…

k8s二进制部署的搭建

1.1 常见k8s安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;Install Tools | Kubernetes ●Kubeadm Kubeadm也是一个工具&#xff0c;提供kubeadm init…

文心一言 VS 讯飞星火 VS chatgpt (203)-- 算法导论15.3 2题

二、对一个16个元素的数组&#xff0c;画出2.3.1节中MERGE-SORT过程运行的递归调用树。解释备忘技术为什么对MERGE-SORT这种分治算法无效。需要写代码的时候&#xff0c;请用go语言。 文心一言&#xff0c;代码不完整&#xff1a; 首先&#xff0c;让我们明确2.3.1节中的MERG…

docker创建mongodb数据库容器

介绍 本文将通过docker创建一个mongodb数据库容器 1. 拉取mongo镜像 docker pull mongo:3.63.6版本是一个稳定的版本&#xff0c;可以选择安装此版本。 2. 创建并启动主数据库 容器数据卷配置 /docker/mongodb/master/data # 数据库数据目录&#xff08;宿主机&am…

formality:set_constant应用

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: formality:形式验证流程 scan mode func的功能检查需要把scan mode设置成0。

请求包的大小会影响Redis每秒处理请求数量

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容压测规划客户端长连接数量对性能的影响请求包大小的影响Pipleline模式对Redis的影响 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领…