撰写论文结果的时候,往往需要table1、table2。智荟一键table1可以非常棒的100%场景一键输出,但是到table2后由于表格复杂机制和研究设计不同,导致后续各种变种table2。统一table2一直以来我认为还是挺有难度的。那有没有一个包至少可以做到80%的效率完成table2一键输出?起码做到从经典广义线性、logistic、cox、混合模型等汇总成一键输出?
最新9月份出炉的bregr包,就是这样一个十分优秀的R包。
下载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 的工作流程是:对象初始化 → 变量设定 → 模型选择 → 并行拟合 → 整洁结果 → 可视化 → 一步式管道。它解决了传统批量回归建模中“低效、重复、结果零散”的问题,适合经典方法学数据分析的需求。
创建对象:用 breg() 初始化一个 batch regression 对象。 设定变量:br_set_y() 定义因变量(Y)。br_set_x() 定义自变量(X)。br_set_x2() 定义协变量。这一层相当于搭好模型的“框架”。
使用 br_set_model() 指定模型类别,比如:lm 或 gaussian:线性回归;coxph:Cox 比例风险模型;还支持 logistic、混合效应模型(lme4)、竞争风险模型(cmprsk)等;详细列表在 “Supported Models” vignette 中。
通过 br_run() 一次性运行所有已定义的模型。内置并行计算和错误处理机制,适合大规模数据。可以同时进行分组(group-by)分析,支持亚组研究。
提取结果:使用 br_get_*() 系列函数获取整洁化(tidy)结果,包括估计值、标准误、p 值、置信区间。 可视化:br_show_forest() 绘制森林图(批量结果对比)。Cox 回归可生成 风险网络图(risk network plot)。支持 Markdown/HTML 输出,方便报告撰写。
基准测试:在 1000+ 自变量场景下,bregr 并行模式远快于 for 循环。 实际案例:TCGA-LUAD 队列(肺腺癌,513 样本 + 258 癌症特征),批量 Cox 回归发现免疫细胞特征和低氧信号相关预后差异。TCGA-BRCA(1210 样本,2万+基因表达),验证了在超高维数据上的可扩展性。
下面我们实测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"))
“强烈推荐用bregr包,批量探索性分析多x与y关联!
本公众号建立了学术交流群(群7),仅供SCI学术交流,人数有限需要实名制。入群请加笔者微信 popnie,请备注说明:姓名-学校(单位)-专业。