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

如何为sjPlot的tab_model表格添加固定效应标记行(基于fixest回归)

如何为sjPlot的tab_model表格添加固定效应标记行(基于fixest回归)

嘿,我来帮你搞定这个需求!sjPlot的tab_model本身没有直接添加自定义标记行的参数,但我们可以通过一些小技巧实现你想要的效果——给表格加上固定效应的标记行,有对应固定效应就填x,没有就留空。下面是具体的操作步骤和代码示例:

第一步:准备工具和模型

首先加载需要的包,拟合你的fixest回归模型(我们同时准备一个不带carb固定效应的模型用来测试效果):

library(fixest)
library(sjPlot)
library(gt) # 用来修改表格,添加自定义行

# 带gear和carb固定效应的模型
reg2 <- feols(data = mtcars, mpg ~ vs * (am + hp + carb) + vs * (disp + hp + carb) | gear + carb)
# 只带gear固定效应的模型(测试用)
reg_no_carb <- feols(data = mtcars, mpg ~ vs * (am + hp + carb) + vs * (disp + hp + carb) | gear)

第二步:写个辅助函数提取固定效应状态

我们写个小函数,自动检测模型里有没有包含gear和carb的固定效应,生成对应的标记(x或空字符串):

get_fe_flags <- function(model) {
  # 从fixest模型里提取固定效应变量
  fe_vars <- attr(model$fml, "fixed")
  # 判断每个固定效应是否存在,生成标记
  gear_mark <- ifelse("gear" %in% fe_vars, "x", "")
  carb_mark <- ifelse("carb" %in% fe_vars, "x", "")
  # 整理成表格需要的格式
  data.frame(
    " " = c("gear FE", "Carb FE"), # 行名列
    "Model 1" = c(gear_mark, carb_mark), # 对应模型的标记列
    check.names = FALSE
  )
}

第三步:生成表格并添加标记行

先让tab_model生成基础表格,然后转换成gt对象,再把我们的标记行添加到表格底部:

# 生成基础回归表格,返回gt对象方便修改
base_table <- tab_model(reg2, return = "gt")

# 生成固定效应标记行
fe_mark_rows <- get_fe_flags(reg2)

# 把标记行逐个添加到表格底部
final_table <- base_table %>%
  gt::tab_add_row(.list = as.list(fe_mark_rows[1,]), .where = "bottom") %>%
  gt::tab_add_row(.list = as.list(fe_mark_rows[2,]), .where = "bottom")

# 查看最终表格
final_table

多模型的情况

如果你需要同时展示多个模型,只要稍微修改辅助函数,就能适配多模型场景:

get_fe_flags_multi <- function(models, model_names = paste0("Model ", seq_along(models))) {
  # 遍历每个模型,提取固定效应标记
  fe_list <- lapply(models, function(mod) {
    fe_vars <- attr(mod$fml, "fixed")
    c(
      gear = ifelse("gear" %in% fe_vars, "x", ""),
      carb = ifelse("carb" %in% fe_vars, "x", "")
    )
  })
  # 整理成多列的表格格式
  fe_data <- do.call(rbind, fe_list) %>%
    as.data.frame() %>%
    t() %>%
    as.data.frame()
  colnames(fe_data) <- model_names
  fe_data <- cbind(" " = rownames(fe_data), fe_data)
  rownames(fe_data) <- NULL
  fe_data
}

# 生成多模型的标记行
multi_fe_rows <- get_fe_flags_multi(list(reg2, reg_no_carb))
# 生成多模型基础表格
multi_base_tab <- tab_model(reg2, reg_no_carb, return = "gt")

# 逐个添加标记行
final_multi_tab <- multi_base_tab
for (i in 1:nrow(multi_fe_rows)) {
  final_multi_tab <- final_multi_tab %>%
    gt::tab_add_row(.list = as.list(multi_fe_rows[i,]), .where = "bottom")
}

# 查看多模型的最终表格
final_multi_tab

额外小技巧

你还可以用gt的tab_style函数给这些标记行设置样式,比如加粗行名,让它和其他回归行区分开:

final_table <- final_table %>%
  gt::tab_style(
    style = gt::cell_text(weight = "bold"),
    locations = gt::cells_body(columns = " ", rows = c(nrow(final_table$`_data`) - 1, nrow(final_table$`_data`)))
  )

这样就能得到你想要的、带有固定效应标记行的回归表格啦!

备注:内容来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:40:31