You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:57:00