使用tbl_regression处理分组lm模型时tidy_fun参数应选择什么函数
问题根源
- 核心原因:
tbl_regression()默认仅支持传入单个模型对象,你传入的是group_by() %>% do()生成的多模型嵌套数据框,结构不匹配导致解析失败 - 你的示例代码存在两处笔误:字符型分组值
F1/F2/F3/F4未加引号、拟合公式用到的fluo变量未在示例数据中定义
解决方案
首先确认你已经安装了依赖包:
install.packages(c("gtsummary", "broom", "parameters", "tidyverse"))
推荐用法(基于nest_by的现代dplyr语法)
# 加载包 library(tidyverse) library(gtsummary) # 修正后的示例数据 d <- data.frame( condition = rep(c('B', 'U'), 20), growth = rep(1:20, 2), type = rep(c("F1","F2","F3","F4"), 10), fluo = rnorm(40) # 替换为你实际的荧光指标列 ) # 分组拟合模型+批量生成回归表 model_tbls <- d %>% nest_by(type, condition) %>% mutate( model = list(lm(growth ~ fluo, data = data)), # 每个分组单独生成回归表,保留分组标签 tbl = list( tbl_regression(model, label = fluo ~ "荧光指标") %>% modify_table_body(~.x %>% mutate( group_type = !!type, group_condition = !!condition )) ) ) # 合并所有分组的回归表,分组标签展示为「荧光类型|实验条件」 final_summary <- tbl_stack( tbls = model_tbls$tbl, group_header = paste(model_tbls$type, model_tbls$condition, sep = " | ") ) # 查看最终汇总表 final_summary
兼容原有do语法的改造方案
如果你不想修改原有拟合代码,可以直接对do生成的多模型列表做批量处理:
# 你原有的拟合代码(已修正笔误) linear_models <- d %>% group_by(type, condition) %>% do(model = lm(growth ~ fluo, data = .)) # 批量为每个模型生成gtsummary表 tbl_list <- pmap( list(linear_models$model, linear_models$type, linear_models$condition), function(mod, t, cond) { tbl_regression(mod, label = fluo ~ "荧光指标") %>% modify_table_body(~.x %>% mutate(type = t, condition = cond)) } ) # 合并所有表 final_summary <- tbl_stack( tbls = tbl_list, group_header = paste(linear_models$type, linear_models$condition, sep = " | ") )
补充说明
- 报错中提到的
parameters包是gtsummary的可选依赖,安装后会提升多模型场景下的解析兼容性 - 如果需要调整表中展示的统计项(比如P值、R²等),可以在
tbl_regression()中通过include、add_global_p()等函数自定义
内容的提问来源于stack exchange,提问作者Naw DH
相关产品推荐
相关产品推荐

