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

如何在R中合并循环生成的回归模型至modelsummary面板

问题

我有基于不同因变量的OLS和IV(ivreg)回归模型,目前通过循环更换因变量运行模型,并用modelsummary将每个因变量的结果保存为独立的.html文件。现在需要将这些结果合并,生成带有不同面板(按因变量分组)的汇总表,每个面板内展示对应因变量的OLS和IV模型结果。

原代码示例:

library(modelsummary)
library(ivreg)

data(mtcars)

models <- c("mpg", "disp", "hp")

for(i in models){
  
formula1 <- paste(i, "~ cyl + qsec + carb + drat")
formula2 <- paste(i, "~ cyl + qsec + carb | drat | wt")

# 线性回归模型
ols <- lm(formula = formula1, data = mtcars)

# 工具变量回归
iv <- ivreg(formula = formula2, data = mtcars)

modelsummary(list("OLS" = ols, "IV" = iv),
             output = paste0("Outcome_", i, ".html"))
}
解决方案

无需单独输出每个文件,只需将所有模型按因变量分组存储,再利用modelsummary的多面板功能生成合并后的汇总表,以下是两种常用实现方式:

方法1:嵌套列表 + 分组参数

将模型按因变量存入嵌套列表,通过group参数指定面板分组逻辑:

library(modelsummary)
library(ivreg)

data(mtcars)

models_outcome <- c("mpg", "disp", "hp")

# 嵌套列表存储模型:外层键为因变量,内层为对应OLS/IV模型
all_models <- list()

for(i in models_outcome){
  formula1 <- paste(i, "~ cyl + qsec + carb + drat")
  formula2 <- paste(i, "~ cyl + qsec + carb | drat | wt")
  
  ols <- lm(formula = formula1, data = mtcars)
  iv <- ivreg(formula = formula2, data = mtcars)
  
  all_models[[i]] <- list("OLS" = ols, "IV" = iv)
}

# 生成合并面板汇总表
modelsummary(all_models,
             output = "Combined_Outcomes.html",
             # 指定分组:每个因变量对应2个模型(OLS/IV)
             group = list("mpg" = 1:2, "disp" = 3:4, "hp" = 5:6),
             group_names = models_outcome,
             # 显示标准误和显著性星号
             statistic = "({std.error}){stars}",
             stars = c('*' = 0.1, '**' = 0.05, '***' = 0.01))

方法2:面板列表参数(更直观)

直接构建面板列表,每个面板包含自定义标题和对应模型,灵活控制面板内容:

library(modelsummary)
library(ivreg)

data(mtcars)

models_outcome <- c("mpg", "disp", "hp")

# 构建面板列表:每个元素对应一个因变量的面板
panels <- lapply(models_outcome, function(i) {
  formula1 <- paste(i, "~ cyl + qsec + carb + drat")
  formula2 <- paste(i, "~ cyl + qsec + carb | drat | wt")
  
  ols <- lm(formula1, data = mtcars)
  iv <- ivreg(formula2, data = mtcars)
  
  list(title = paste("因变量:", i),
       models = list("OLS" = ols, "IV" = iv))
})

# 生成多面板汇总表
modelsummary(panels,
             output = "Combined_Outcomes.html",
             statistic = "({std.error}){stars}",
             stars = TRUE)

两种方法都会生成一个包含多面板的.html文件,每个面板对应一个因变量,面板内并列展示OLS和IV的回归结果,符合预期的嵌套结构样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:37:41