tbl_regression生成Logistic回归OR置信区间与SPSS等结果差异咨询
gtsummary包Logistic回归输出置信区间差异问题
问题场景
使用如下代码调用tbl_regression生成单因素Logistic回归表:
glm.fit.TAG=glm(asian2$sICH ~ asian2$TAG, family=binomial) #mô hình 1 TAGtable <- tbl_regression(glm.fit.TAG, exponentiate = TRUE)%>% add_glance_source_note()
代码运行得到的展示结果为:OR=1.92,95%CI 1.41-2.67。
该结果与SPSS、R中logRegBin函数的输出存在小幅差异,后两者结果完全一致:OR=1.92,95%CI 1.40-2.64。上述差异在使用gtsummary包生成所有回归表时均会出现,初步推测为gtsummary计算机制中的舍入规则差异导致。
核心疑问:若真实置信区间边界非常接近1,gtsummary是否会返回错误结果,需要对应实用解决方案。
原因与实用建议
- 该类小幅差异不属于计算错误,不会出现CI边界接近1时返回本质错误结果的情况。差异来源分为两部分:一是不同工具默认的置信区间计算方法存在细微区别(比如部分工具用剖面似然法计算CI,部分用Wald法),二是gtsummary默认的舍入规则和SPSS、
logRegBin不同,默认不是对CI上下界直接按固定小数位四舍五入,而是做了格式化适配,才会出现末位数字的差异。 - 验证底层数值一致性:直接调用
as_tibble(TAGtable)提取表格存储的未舍入原始值,可观测到底层计算结果和其他工具的差异远小于展示值的差异,gtsummary不会修改传入的glm模型对象的原始计算结果,所有差异均来自展示层的格式化处理。 - 对齐其他工具的输出格式:如果需要让gtsummary的展示结果和SPSS、
logRegBin完全一致,可在tbl_regression中显式指定固定小数位的舍入规则,示例代码如下:
强制对OR值、CI上下界统一按2位小数四舍五入后,输出结果即可和其他工具对齐。TAGtable <- tbl_regression( glm.fit.TAG, exponentiate = TRUE, estimate_fun = ~style_number(.x, digits = 2), ci_fun = ~style_number(.x, digits = 2) ) %>% add_glance_source_note() - 针对CI边界接近1的特殊场景,可通过两种方式规避展示歧义:
- 自定义CI计算逻辑:直接从原始
glm对象提取你信任的CI计算结果(比如用confint()计算剖面似然CI,或confint.default()计算Wald CI),通过add_ci()函数传入自定义结果覆盖默认计算值,完全掌握CI的计算逻辑。 - 增加边界值展示精度:对边界接近1的结果,将CI的展示小数位调整为3位,避免因2位小数舍入导致的“CI跨1/不跨1”的定性判断偏差。
- 自定义CI计算逻辑:直接从原始
- 快速校验方法:对存疑的结果,直接运行
summary(glm.fit.TAG)查看模型原始输出的系数、标准误、Wald检验结果,和gtsummary存储的原始值做对比,即可快速确认是否存在计算错误。
内容的提问来源于stack exchange,提问作者Nhân Võ Thế
相关产品推荐
相关产品推荐

