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

如何为含二元处理变量的ivreg模型生成gtsummary表格?

解决ivreg与tbl_regression兼容因子类型处理变量的问题

针对ivreg拟合因子型处理变量时,变量名被附加水平后缀(如nearcollegeYes)导致tbl_regression报错的问题,这里提供几种可行的解决方案:


方法1:修正ivreg模型的变量名称

直接修改拟合后模型对象的系数名称和terms标签,去掉水平后缀,让tbl_regression能正常识别:

library(ivreg)
library(gtsummary)
data("SchoolingReturns")

# 拟合IV模型(处理变量为因子类型)
iv_binary <- ivreg(wage ~ nearcollege | education, data = SchoolingReturns)

# 去掉系数名称中的水平后缀
names(iv_binary$coefficients) <- gsub("(.*)(Yes|No)", "\\1", names(iv_binary$coefficients))
# 同步修正模型terms中的变量标签
attr(iv_binary$terms, "term.labels") <- gsub("(.*)(Yes|No)", "\\1", attr(iv_binary$terms, "term.labels"))

# 生成表格
tbl_regression(iv_binary)

方法2:用gtsummary的表格修改工具重命名变量

如果不想改动原始模型对象,可以在生成表格后,通过modify_table_body替换变量名:

iv_binary <- ivreg(wage ~ nearcollege | education, data = SchoolingReturns)

tbl_regression(iv_binary) %>%
  modify_table_body(
    mutate,
    variable = case_when(
      variable == "nearcollegeYes" ~ "nearcollege",
      TRUE ~ variable
    )
  ) %>%
  modify_header(variable = "**变量**") # 可选:调整表头显示

方法3:自定义tidy方法(通用化处理)

为ivreg对象编写自定义的tidy方法,自动处理带水平后缀的变量名,后续使用tbl_regression时无需重复操作:

# 注册自定义的tidy.ivreg方法
tidy.ivreg <- function(x, ...) {
  result <- broom::tidy(x, ...)
  # 移除变量名后的水平标识(Yes/No)
  result$term <- gsub("(.*)(Yes|No)", "\\1", result$term)
  return(result)
}

# 拟合模型后直接生成表格
iv_binary <- ivreg(wage ~ nearcollege | education, data = SchoolingReturns)
tbl_regression(iv_binary)

原理说明

ivreg对因子型自变量进行拟合时,会自动将因子水平作为后缀附加到变量名后,导致gtsummary无法匹配原始数据中的变量名称,进而触发错误。上述方法通过修正变量名,让gtsummary能够正确关联变量并生成符合要求的表格。你之前采用的转换为二元数值变量的方法同样有效,但上述方案无需修改原始数据类型,更适配因子变量的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:56:23