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

使用gtsummary处理svyVGAM加权负二项回归表时遇报错求助

问题解决:gtsummary处理svyVGAM拟合的加权负二项回归模型

问题原因

  • tbl_regression报错:svy_vglm对象未实现model.frame()或model.matrix()方法,导致gtsummary无法自动识别模型变量。
  • tbl_uvregression报错:该函数没有针对svy_vglm类的适配方法,无法直接处理这类模型对象。

解决方案

1. 生成多变量模型的汇总表格(替代tbl_regression)

手动提取模型结果并转换为gtsummary支持的格式:

# 1. 提取模型的tidy结果(包含OR/HR、置信区间、p值)
tidy_nb <- broom.helpers::tidy_parameters(nb_model, exponentiate = TRUE)

# 2. 自定义变量标签(可根据需求修改)
var_labels <- list(
  age = "Age",
  income = "Income",
  education = "Education",
  sexFemale = "Sex (Female vs Male)"
)

# 3. 生成gtsummary表格
tbl_mutually_adjusted <- tidy_nb %>%
  select(term, estimate, conf.low, conf.high, p.value) %>%
  tbl_regression(
    exponentiate = TRUE,
    label = var_labels,
    model_obj = nb_model  # 指定模型对象以确保统计格式正确
  )

# 查看最终表格
tbl_mutually_adjusted

如果上述方法仍有问题,可以直接构建表格框架:

tbl_mutually_adjusted <- tibble::tibble(
  Variable = c("Age", "Income", "Education", "Sex (Female vs Male)"),
  HR = tidy_nb$estimate,
  `95% CI` = paste0(sprintf("%.2f", tidy_nb$conf.low), " to ", sprintf("%.2f", tidy_nb$conf.high)),
  p.value = tidy_nb$p.value
) %>%
  tbl_df() %>%
  modify_header(
    Variable = "**Variable**",
    HR = "**HR**",
    `95% CI` = "**95% CI**",
    p.value = "**p-value**"
  ) %>%
  modify_fmt_fun(p.value = style_pvalue)

2. 生成单变量模型的汇总表格(替代tbl_uvregression)

手动循环拟合每个变量的单模型,再合并结果:

# 定义需要拟合的变量列表
vars_to_fit <- c("age", "income", "education", "sex")

# 循环拟合单变量模型并生成表格
uv_tbl_list <- lapply(vars_to_fit, function(var) {
  # 拟合单变量加权负二项模型
  uv_model <- svy_vglm(
    as.formula(paste0("n_events ~ ", var)),
    family = negbinomial(),
    design = svy_design
  )
  
  # 提取tidy结果并生成单变量表格
  tidy_uv <- broom.helpers::tidy_parameters(uv_model, exponentiate = TRUE)
  var_label <- dplyr::case_when(
    var == "age" ~ "Age",
    var == "income" ~ "Income",
    var == "education" ~ "Education",
    var == "sex" ~ "Sex (Female vs Male)"
  )
  
  tidy_uv %>%
    select(term, estimate, conf.low, conf.high, p.value) %>%
    tbl_regression(
      exponentiate = TRUE,
      label = setNames(var_label, term)
    )
})

# 合并所有单变量表格
tbl_unadjusted <- tbl_stack(uv_tbl_list) %>%
  modify_caption("Unadjusted Negative Binomial Regression Results (Survey-Weighted)")

# 查看最终表格
tbl_unadjusted

进阶优化:自定义model.frame方法

如果希望直接使用tbl_regression原生功能,可以给svy_vglm类自定义model.frame方法(需测试兼容性):

# 为svy_vglm对象添加model.frame方法
model.frame.svy_vglm <- function(x, ...) {
  x@data
}

定义后重新运行tbl_regression(nb_model, exponentiate = TRUE)即可尝试原生调用。


内容的提问来源于stack exchange,提问作者always.learning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:13:13