如何调整modelsummary输出的多fixest模型列行布局?
解决modelsummary多模型术语同行对齐(空缺填充NA)问题
针对你遇到的不同模型术语集合/顺序不一致,输出时无法同行对齐、空缺需填NA的问题,可以通过先提取模型结果再统一整理宽格式的方式解决,具体步骤如下:
1. 提取所有模型的结果数据
先把每个模型的拟合结果(均值、统计量等)提取出来,统一标记模型ID:
library(tidyverse) library(fixest) library(modelsummary) # 拟合原模型 fit <- mtcars %>% feols(c(mpg, hp) ~ 1) fit_1 <- mtcars %>% feols(c(mpg, hp, wt) ~ 1) fit_2 <- mtcars %>% feols(c(mpg, hp, gear, wt) ~ 1) # 提取所有模型的tidy结果,添加模型标识 tidy_results <- list(Model1 = fit, Model2 = fit_1, Model3 = fit_2) %>% map_dfr(tidy, .id = "model") %>% select(model, term, estimate) # 仅保留模型、术语、均值,如需标准误可加std.error
2. 统一术语全集并整理宽格式
获取所有模型的术语集合,转成宽格式后自动填充NA,同时按统一顺序排列术语:
# 获取所有唯一术语,按字母顺序排序(可自定义排序规则) all_terms <- tidy_results %>% pull(term) %>% unique() %>% sort() # 转换为宽格式,每个模型对应一列,空缺填充NA aligned_table <- tidy_results %>% pivot_wider( names_from = model, values_from = estimate, id_cols = term, values_fill = NA ) %>% arrange(factor(term, levels = all_terms)) # 按统一术语顺序排列
3. 用modelsummary输出格式化表格
最后把整理好的宽格式数据传入modelsummary,输出flextable格式:
modelsummary(aligned_table, output = "flextable")
扩展:保留统计量的情况
如果需要同时展示均值和标准误,可调整提取和整理逻辑:
# 提取包含标准误的结果 tidy_results_stats <- list(Model1 = fit, Model2 = fit_1, Model3 = fit_2) %>% map_dfr(tidy, .id = "model") %>% select(model, term, estimate, std.error) # 整理为统计量嵌套的宽格式 aligned_table_stats <- tidy_results_stats %>% pivot_longer(cols = c(estimate, std.error), names_to = "statistic") %>% pivot_wider( names_from = c(model, statistic), values_from = value, id_cols = term, values_fill = NA ) %>% arrange(factor(term, levels = all_terms)) # 输出表格 modelsummary(aligned_table_stats, output = "flextable")
这种方法不受原模型术语顺序影响,能确保所有术语同行对齐,缺失的模型结果自动填充NA,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者astrae_research
相关产品推荐
相关产品推荐

