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

如何在modelsummary中实现同名lm模型系数的同列分组展示?

问题:合并modelsummary中同名模型的系数列

当前使用modelsummary生成回归表格时,同名模型(如两个A模型)会生成重复列,期望将同一名称模型的系数合并到同一列,在变量行下展示多个系数值。

现有代码:

reg1 <- lm(mpg ~  wt + qsec, data = mtcars)

mtcars2 <- mtcars*2

reg2 <- lm(mpg~ wt + qsec, data = mtcars2)

reglist <- list(A = reg1, B = reg2)

reglist2 <- list(A = reg1,B =  reg2)

msummar <- modelsummary(c(reglist, reglist2),
  stars = TRUE,
  statistic = NULL,
  shape =   term  + model ~ model,
  gof_map = c("adj.r.squared"),
  notes = list("Std. Errors in parentheses"),
  output = "gt")

参考过多分类模型的分组展示示例,但线性模型无法直接套用,询问是否可通过人工分组实现目标格式。


解决方案:两种实现方式

方式1:手动处理数据+自定义分组(高灵活性)

通过提取模型估计值并添加分组标识,再结合shape参数实现合并列效果:

library(modelsummary)
library(dplyr)

# 定义所有模型
reg1 <- lm(mpg ~ wt + qsec, data = mtcars)
mtcars2 <- mtcars*2
reg2 <- lm(mpg ~ wt + qsec, data = mtcars2)
all_models <- c(list(A = reg1, B = reg2), list(A = reg1, B = reg2))

# 提取系数并添加分组信息
estimates <- get_estimates(all_models) %>%
  mutate(
    model_group = gsub("\\..*", "", model), # 提取核心模型名称A/B
    model_seq = as.integer(factor(model, levels = unique(model))) # 组内序号
  )

# 提取拟合优度并按分组聚合
gof_data <- get_gof(all_models) %>%
  mutate(model_group = gsub("\\..*", "", model)) %>%
  group_by(model_group, term) %>%
  summarize(estimate = paste(estimate, collapse = " / "), .groups = "drop")

# 生成目标表格
modelsummary(
  list(estimates = estimates, gof = gof_data),
  shape = term + model_seq ~ model_group,
  statistic = NULL,
  gof_map = c("adj.r.squared"),
  notes = list("Std. Errors in parentheses"),
  output = "gt"
)

方式2:直接使用group参数(简洁高效)

如果你的modelsummary版本≥v1.3.0,可以直接用group参数指定分组映射:

library(modelsummary)

# 定义所有模型
reg1 <- lm(mpg ~ wt + qsec, data = mtcars)
mtcars2 <- mtcars*2
reg2 <- lm(mpg ~ wt + qsec, data = mtcars2)
all_models <- c(list(A = reg1, B = reg2), list(A = reg1, B = reg2))

# 生成合并列表格
modelsummary(
  all_models,
  stars = TRUE,
  statistic = NULL,
  # 指定分组:将A/A.1合并为A组,B/B.1合并为B组
  group = list("A" = c("A", "A.1"), "B" = c("B", "B.1")),
  shape = term ~ group,
  gof_map = c("adj.r.squared"),
  notes = list("Std. Errors in parentheses"),
  output = "gt"
)

说明:

  • 方式1适合复杂分组逻辑,可自定义系数的分隔符、排序等细节
  • 方式2依赖新版本的modelsummary,代码更简洁,适合常规分组需求

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:35:02