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

