如何在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
相关产品推荐
相关产品推荐

