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

如何在R中使用modelsummary堆叠边际效应对比面板?

解决方案:同时实现term:contrast合并与面板堆叠

方法1:生成表格数据框后通过panels堆叠独立面板

先将每个面板的对比结果转换为已合并term和contrast的表格数据框,再用modelsummary的panels参数实现上下堆叠,还可自定义面板标题:

library(tidyverse)
library(marginaleffects)
library(modelsummary)

# 生成第一个面板的模型与对比结果
vars1 <- c("var1", "var2", "var3")
panel1 <- vars1 %>%
  paste(., "~ Treatment") %>%
  map(as.formula) %>%
  map(lm, data = df) %>% 
  map(avg_comparisons, variables = "Treatment", vcov = "hc1") 

# 生成第二个面板的模型与对比结果
vars2 <- c("var4", "var5")
panel2 <- vars2 %>%
  paste(., "~ Treatment") %>%
  map(as.formula) %>%
  map(lm, data = df) %>% 
  map(avg_comparisons, variables = "Treatment", vcov = "hc1") 

# 将每个面板转换为已合并term和contrast的表格数据框
tab1 <- modelsummary(panel1, shape = term : contrast ~ model, output = "dataframe")
tab2 <- modelsummary(panel2, shape = term : contrast ~ model, output = "dataframe")

# 堆叠两个独立面板
modelsummary(
  panels = list(
    list(tab1, title = "面板1: 核心变量组"),
    list(tab2, title = "面板2: 拓展变量组")
  )
)

方法2:合并模型列表+分组标识(同表格内分组显示)

若不需要完全独立的面板,可将所有模型合并为一个列表,通过group参数区分两个面板,同时保留term:contrast的合并格式:

# 合并两个面板的模型列表并命名
all_models <- c(panel1, panel2)
names(all_models) <- c("var1", "var2", "var3", "var4", "var5")

# 定义分组向量,区分两个面板的模型
group_vec <- c(rep("面板1", 3), rep("面板2", 2))

# 生成带分组的合并表格
modelsummary(
  all_models,
  shape = term : contrast ~ model,
  group = group_vec,
  group_name = "面板分组"
)

原错误说明

你之前直接将模型列表传入panels的用法不符合要求:modelsummary的panels参数需要接收包含表格对象/处理后的模型结构和标题的嵌套列表,且自定义shape参数无法直接作用于未处理的原始模型列表组。先转换为已合并term:contrast的表格数据框,是最稳妥的堆叠方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:14:53