如何高效将map()创建的模型传入modelsummary()生成回归表
批量拟合多因变量模型并生成回归表的高效方法
你不需要提前对模型执行tidy操作,modelsummary可以直接接收原始模型对象组成的列表,只需把批量拟合的模型整理成命名列表(方便区分模型对应因变量和类型)即可快速生成回归表,以下是两种高效实现方式:
方法1:生成合并的回归表(所有模型同表展示)
保留原始模型对象,转成命名列表后直接传入modelsummary:
library(tidyverse) library(modelsummary) # 1. 批量拟合模型,保留模型对象 model_df <- mtcars %>% pivot_longer(cols = c(mpg, hp), names_to = "因变量") %>% nest(数据 = -因变量) %>% mutate( model1 = map(数据, ~lm(value ~ disp, data = .)), model2 = map(数据, ~lm(value ~ disp + cyl, data = .)), model3 = map(数据, ~lm(value ~ disp * cyl, data = .)) ) # 2. 整理成命名列表(名称包含因变量和模型类型) model_list <- model_df %>% pivot_longer(cols = starts_with("model"), names_to = "模型类型", values_to = "模型") %>% mutate(模型名称 = str_c(因变量, "_", 模型类型)) %>% select(模型名称, 模型) %>% deframe() # 转换为命名列表:名称=模型名称,值=模型对象 # 3. 生成回归表 modelsummary(model_list)
生成的表会用mpg_model1、hp_model2这类名称作为列标题,清晰区分不同因变量和模型规格。
方法2:按因变量分组生成独立回归表
如果希望每个因变量对应一张回归表,可以按因变量分组处理:
# 按因变量分组生成回归表 model_df %>% pivot_longer(cols = starts_with("model"), names_to = "模型类型", values_to = "模型") %>% group_by(因变量) %>% summarise( 回归表 = list(modelsummary(模型, output = "gt", title = str_c("回归结果:因变量=", 因变量))) ) %>% pull(回归表)
运行后会输出两张独立的回归表,分别对应mpg和hp作为因变量的模型结果。
关键说明
- 避免提前对模型执行
tidy:modelsummary需要原始模型对象来提取标准误、R²等完整统计量,提前tidy会丢失这些信息。 - 命名列表的作用:给每个模型设置唯一名称,
modelsummary会自动将名称作为列标题,避免混淆不同因变量的模型。
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

