使用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)
关键修改点
- 给
confint.default()传入level = conf.level,确保置信水平和函数参数一致,避免非默认置信水平场景出错。 - 添加条件判断:当
exponentiate = TRUE时,对conf.low和conf.high执行exp()转换,让置信区间和OR值保持同一尺度。 - 拆分原代码的绑定逻辑,先分别处理系数和CI,再合并,逻辑更清晰。
内容的提问来源于stack exchange,提问作者flailing-in-r
相关产品推荐
相关产品推荐

