imd 统计教程 · 统计图表与论文表格
← 教程首页 返回本模块

一键table2和森林图,批量探索多个x多种模型-bregr包

聂志强实战医学统计2025-10-07 11:31:07广东


撰写论文结果的时候,往往需要table1、table2。智荟一键table1可以非常棒的100%场景一键输出,但是到table2后由于表格复杂机制和研究设计不同,导致后续各种变种table2。统一table2一直以来我认为还是挺有难度的。那有没有一个包至少可以做到80%的效率完成table2一键输出?起码做到从经典广义线性、logistic、cox、混合模型等汇总成一键输出?

最新9月份出炉的bregr包,就是这样一个十分优秀的R包。

一、bregr包

下载https://github.com/WangLabCSU/bregr。R包介绍,见https://onlinelibrary.wiley.com/doi/10.1002/mdr2.70028,https://wanglabcsu.github.io/bregr/。bregr亮点:批量处理自动化多个因变量/自变量的回归建模;整洁输出,与 tidyverse 兼容的结构化结果便于后续分析;一键生成森林图和模型诊断图;支持广义线性模型、Cox 比例风险模型和混合效应模型等多种回归模型的高效批量处理。bregr采用 tidyverse 风格和 S7 面向对象编程框架,以实现高效、可重复的批量回归建模。

二、核心步骤

bregr 的工作流程是:对象初始化 → 变量设定 → 模型选择 → 并行拟合 → 整洁结果 → 可视化 → 一步式管道。它解决了传统批量回归建模中“低效、重复、结果零散”的问题,适合经典方法学数据分析的需求。

2.1 初始化与变量设定

创建对象:用 breg() 初始化一个 batch regression 对象。 设定变量:br_set_y() 定义因变量(Y)。br_set_x() 定义自变量(X)。br_set_x2() 定义协变量。这一层相当于搭好模型的“框架”。

2.2 选择模型类型

使用 br_set_model() 指定模型类别,比如:lm 或 gaussian:线性回归;coxph:Cox 比例风险模型;还支持 logistic、混合效应模型(lme4)、竞争风险模型(cmprsk)等;详细列表在 “Supported Models” vignette 中。

2.3. 模型拟合

通过 br_run() 一次性运行所有已定义的模型。内置并行计算和错误处理机制,适合大规模数据。可以同时进行分组(group-by)分析,支持亚组研究。

2.4. 结果提取与可视化

提取结果:使用 br_get_*() 系列函数获取整洁化(tidy)结果,包括估计值、标准误、p 值、置信区间。 可视化:br_show_forest() 绘制森林图(批量结果对比)。Cox 回归可生成 风险网络图(risk network plot)。支持 Markdown/HTML 输出,方便报告撰写。

2.5. 性能与应用案例

基准测试:在 1000+ 自变量场景下,bregr 并行模式远快于 for 循环。 实际案例:TCGA-LUAD 队列(肺腺癌,513 样本 + 258 癌症特征),批量 Cox 回归发现免疫细胞特征和低氧信号相关预后差异。TCGA-BRCA(1210 样本,2万+基因表达),验证了在超高维数据上的可扩展性。


三、R代码

下面我们实测cox案例展示便捷性。



##https://onlinelibrary.wiley.com/doi/10.1002/mdr2.70028                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
##install.packages('bregr', repos = c('https://wanglabcsu.r-universe.dev', 'https://cloud.r-project.org'))

#---- 1.测试数据-------
library(bregr)
lung <- survival::lung |>
  dplyr::filter(ph.ecog != 3)   # 去掉 ph.ecog = 3 的样本
lung$ph.ecog <- factor(lung$ph.ecog)   # 将 ph.ecog 转换为因子型变量

#---- 2.核心步骤-------
#--方法1,逐步设置
mds <- breg(lung) |>             # 初始化 breg 对象
  br_set_y(c("time""status")) |>   # 设置生存结局变量(生存时间与结局状态)
  br_set_x(colnames(lung)[6:10]) |>  # 设置主要预测变量,4个x同时做
  br_set_x2(c("age""sex")) |>      # 设置协变量(控制变量)
  br_set_model("coxph") |>           # 选择 Cox 比例风险模型
  br_run()                           # 运行模型

#--??方法2,推荐br_pipeline
mds <- br_pipeline(
  lung,
  y = c("time""status"),
  x = colnames(lung)[6:10],
  x2 = c("age""sex"),
  method = "coxph"
)

mds_p <- br_pipeline(
  lung,
  y = c("time""status"),
  x = colnames(lung)[6:10],
  x2 = c("age""sex"),
  method = "coxph",
  n_workers = 3 #多线程
)


# 提取模型结果(默认对 coxph 的估计取指数化,得到 HR)
br_get_models(mds)   # 查看原始模型对象
br_get_models(mds_p) #结果一模一样
## br_get_results(mds) #没啥用

#--?? HR95%CI
br_get_results(mds, tidy = TRUE)

#------2.1 可视化森林图款式1-------
br_show_forest(mds)
#--详细定义图
br_show_forest(
  mds,
  rm_controls = TRUE,   # 去掉控制变量,只展示主要预测因子x
  xlim = c(0, 3),       # 自定义横轴范围(风险比区间 0 ~ 3)
#   使用 x_trans = "log" 可将横轴转为对数刻度
#   使用 log_first = TRUE 可同时对横轴和估计表做对数变换
  drop = 1              # 去掉冗余列(如多余的统计指标)
)

#------2.2 森林图款式2-------
br_show_forest_ggstats(mds)
## 缺失变量br_show_forest_ggstatsplot(mds)


br_show_risk_network(mds)


#br_show_fitted_line(mds) 
#br_show_fitted_line_2d(mds) 


scores <- br_predict(mds, idx = "ph.ecog")
#"lp" (linear predictor,(log relative hazard) default) or "risk" (relative risk). 
# For other models: "response" (default) or "link"
head(scores)

#---高中低score风险划分,Q1-Q3分位数
br_show_survival_curves(
  mds,
  idx = "ph.ecog",
  n_groups = 3,
  title = "Survival Curves by 'ph.ecog' Model Risk Score"
)

#------3 表格--------
br_show_table(mds)
br_show_table(mds, export = TRUE)
br_show_table(mds, export = TRUE, args_table_export = list(format = "html"))

四、发散思维

  1. 基于 S7 面向对象框架,兼容 S3/S4,便于扩展新模型类型。强调 tidyverse 风格:可读性强,管道操作清晰。集成了 broom, ggplot2, forestploter 等生态工具。与其他包相比,bregr 提供了强悍的批量处理能力、并行计算、整合可视化。 2.survival::coxph等过程忽略了ph假设、共线性以及age-scale等等诸多统计前置问题,所以仅仅适合经典cox,同理logistic模型也忽略logitp线性等。扣细节模型过于复杂,所以还是要特定问题特定分析。希望后续作者持续优化,更进一步。
  2. bregr亮点在批量探索多x模型,一键输出table2和森林图,很强!使用起来需要谨慎考量变量因果关联与前置条件,撰写临床论文在bregr探索之后严谨深入的分析还是十分必要的。

五、小结

强烈推荐用bregr包,批量探索性分析多x与y关联!



本公众号建立了学术交流群(群7),仅供SCI学术交流,人数有限需要实名制。入群请加笔者微信 popnie请备注说明:姓名-学校(单位)-专业