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

使用tbl_regression时Wald CI tibble未对置信区间取指数的问题

解决逻辑回归tbl_regression中Wald置信区间未指数化的问题

问题核心:你自定义的my_tidy函数中,confint.default()返回的是对数优势比尺度的Wald置信区间,但仅对broom::tidy()的结果做了指数化,CI部分始终停留在对数尺度,导致最终表格里的CI和OR值不匹配。

修正后的代码

my_model <- glm(outcome ~ var1 + var2 + var3 + var4, family = binomial(link = logit), data=df)

my_tidy <- function(x, exponentiate = FALSE, conf.level = 0.95, ...) {
  # 提取系数、标准误、p值(支持指数化转换)
  tidy_coefs <- broom::tidy(x, exponentiate = exponentiate, conf.int = FALSE)
  
  # 计算指定置信水平的Wald置信区间(默认对数尺度)
  wald_ci <- confint.default(x, level = conf.level) |>
    dplyr::as_tibble() |>
    rlang::set_names(c("conf.low", "conf.high"))
  
  # 若需指数化,同步转换置信区间到OR尺度
  if (exponentiate) {
    wald_ci <- wald_ci |> dplyr::mutate(dplyr::across(c(conf.low, conf.high), exp))
  }
  
  # 合并系数与置信区间结果
  dplyr::bind_cols(tidy_coefs, wald_ci)
}

# 生成表格,exponentiate=TRUE会触发CI的指数化转换
tbl_regression(my_model, tidy_fun = my_tidy, exponentiate = TRUE)

关键修改点

  1. 给confint.default()传入level = conf.level,确保置信水平和函数参数一致,避免非默认置信水平场景出错。
  2. 添加条件判断:当exponentiate = TRUE时,对conf.low和conf.high执行exp()转换,让置信区间和OR值保持同一尺度。
  3. 拆分原代码的绑定逻辑,先分别处理系数和CI,再合并,逻辑更清晰。

内容的提问来源于stack exchange,提问作者flailing-in-r

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:39:57