使用gtsummary执行ANCOVA时调整差值符号/方向异常问题
问题解答
核心原因是两个分析的对比方向完全相反:
lm()模型默认以Sex因子的第一个水平作为参考组,输出的效应值是「第二个水平 - 第一个水平」的差值(比如假设Sex水平是Female、Male,lm算的是Male - Female的差异)。gtsummary的add_difference()函数,当你设置by = Sex时,默认对比方向是第一个分组水平减去第二个分组水平(也就是Female - Male),刚好和lm()的对比方向反过来,所以最终估计值的符号完全相反,但绝对值一致。
验证方法
你可以先查看Sex的因子水平顺序,确认两组的对比逻辑:
levels(df$Sex)
对比输出的水平顺序,就能明确两个方法各自的对比方向。
解决方法
如果想让gtsummary的结果和lm()保持一致,有两种方式:
- 在
add_difference()中指定参考组为第二个水平:
df |> dplyr::select(FMD_chg,V2_FMD_Base, BMI, Age, Sex) |> tbl_summary( by = Sex, include = -c(V2_FMD_Base,BMI, Age), missing = "no", statistic = all_continuous() ~ "{mean} ({sd})",digits = list(~c(2,2))) |> add_difference(adj.vars = c(V2_FMD_Base,Age, BMI), test.args = list(ref = 2)) |> bold_labels()
- 调整
Sex的因子水平顺序,让lm()和gtsummary的参考组一致:
df$Sex <- relevel(df$Sex, ref = "你想要的参考组水平")
内容的提问来源于stack exchange,提问作者CamCaan
相关产品推荐
相关产品推荐

