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

如何在modelsummary-flextable工作流中堆叠因变量结果至单列?

基于fixest+modelsummary+flextable实现分组回归系数均值的单列展示

需求说明

需要完成以下流程:

  • 按组(共k组)估计含j个解释变量的多元回归,得到每个解释变量的k个估计值
  • 对每个变量的k个系数取平均并计算对应的t统计量
  • 将这些均值和t统计量像常规回归估计值一样显示在同一列中

当前示例代码使用mtcars数据集,通过feols(c(mpg, hp) ~ 1)得到两个被解释变量的截距回归结果(即均值),但默认输出为分列展示,需要调整为单列堆叠格式。

实现步骤与代码

1. 加载依赖包

library(fixest)
library(modelsummary)
library(dplyr)
library(purrr)
library(stringr)

2. 按组估计回归并提取系数

以cyl为分组变量,对每个组的mpg和hp分别估计截距回归(对应均值):

# 按cyl分组拆分数据并估计回归
group_fits <- mtcars %>%
  split(.$cyl) %>%
  map(~ feols(c(mpg, hp) ~ 1, data = .))

# 提取所有组的系数、标准误,并整理数据
coef_df <- map_dfr(group_fits, tidy, .id = "group") %>%
  # 从model列中提取被解释变量名
  mutate(variable = str_extract(model, "^[^~]+")) %>%
  select(variable, estimate, std.error)

3. 计算系数均值与t统计量

按变量分组,计算系数均值、均值的标准误(用于t统计量):

summary_stats <- coef_df %>%
  group_by(variable) %>%
  summarize(
    mean_est = mean(estimate),
    se_mean = sd(estimate) / sqrt(n()),  # 均值的标准误
    t_stat = mean_est / se_mean
  )

4. 构造伪模型并通过modelsummary单列展示

通过自定义tidy方法,让modelsummary将统计结果识别为常规回归模型,实现单列展示:

# 将统计结果包装为自定义模型对象
custom_model <- list(summary_stats)

# 自定义tidy方法,返回modelsummary需要的系数结构
tidy.custom_model <- function(x, ...) {
  x[[1]] %>%
    rename(term = variable, estimate = mean_est, std.error = se_mean) %>%
    select(term, estimate, std.error)
}

# 自定义glance方法(避免modelsummary报错)
glance.custom_model <- function(x, ...) {
  tibble(Observations = nrow(coef_df))
}

# 生成flextable输出,同一列展示均值与t统计量
modelsummary(
  custom_model,
  estimate = "{estimate}{stars}",
  statistic = "({statistic})",  # 将t统计量放在括号中
  stars = c('*' = .1, '**' = .05, '***' = 0.01),
  output = "flextable"
)

输出效果

最终输出会以单列形式展示,格式与常规回归结果一致:

Model 1
mpg20.091***
(15.02)
hp146.688***
(8.36)
Observations6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:31:07