使用metafor包escalc()计算相对风险结果不符的技术咨询
解决metafor::escalc计算RR结果与手动值不符的问题
我马上帮你理清这个差异的根源——问题出在连续性校正上!
先拆解两边的计算逻辑:
- 你的手动计算是直接用原始单元格数值:
RR = (处理组事件率) / (对照组事件率) = (1/(1+0)) / (43/(43+443)) = 1 / (43/486) ≈11.30,对应的log(RR)=ln(11.30)≈2.425,这个结果完全正确。 - 而
escalc函数在计算RR时,默认会对含0的单元格做特殊处理:当measure为"RR"或"OR"且存在单元格数值为0时,它会自动给每个单元格加上0.5的连续性校正值(目的是避免出现log(0)这种无意义的计算结果)。
我们用校正后的数值重新计算一遍:
给每个单元格加0.5后,ai=1.5,bi=0.5,ci=43.5,di=443.5
RR = (1.5/(1.5+0.5)) / (43.5/(43.5+443.5)) = 0.75 / (43.5/487) ≈8.40,对应的log(RR)=ln(8.40)≈2.13,这正好和你得到的函数输出一致!
解决方案
如果你想要和论文中的正确结果(11.30)匹配,只需要在escalc中手动设置add=0,关闭默认的连续性校正即可:
data <- escalc(measure = "RR", ai=1, bi=0, ci=43, di=443, append=TRUE, add=0)
运行这段代码后,你就能得到和手动计算完全相同的RR值了。
内容的提问来源于stack exchange,提问作者Daiana Ganiewich
相关产品推荐
相关产品推荐

