最近笔者在着手系统评价的文章,做过类似课题的小伙伴应该遇到过原始文章数据不全的情况,比如回顾性研究中的病例对照研究,只在文章中展示病例数对照数,以及OR值置信区间,对提取数据的步骤非常不友好
因此就在想,既然OR值和置信区间是通过统计软件计算得到的,它与原始数据之间必然存在代数关系,利用与反向工程原理类似的思路,逆运算应该是可以得到原始四格表的数据
经过查找统计学相关文献,果然发现有这方面的解决方案,下面就把SAS代码贴出来,给有需要的同学|´・ω・)ノ

SAS代码

%macro ORInvCalc(r, up, low, m, n);
data OR_Inverse_Calculation;
r = &r;
v = ((log(&up) - log(&r)) / 1.96) ** 2;
m = &m;
n = &n;
x = m * (r - 1) ** 2 + v * r * m ** 2;
y = 2 * m * n * (r - 1) - v * r * m ** 2 * n;
z = m * n ** 2 + r * m ** 2 * n;
c1 = (- y + sqrt(y ** 2 - 4 * x * z)) / (2 * x);
c2 = (- y - sqrt(y ** 2 - 4 * x * z)) / (2 * x);
a1 = (r * m * c1) / (n - c1 + r * c1);
b1 = m - a1;
d1 = n - c1;
a2 = (r * m * c2) / (n - c2 + r * c2);
b2 = m - a2;
d2 = n - c2;
file print;
title "The OR Value's Inverse Calculation";
put
#1 'The first mathematically reasonable values: '
#2 '------------------------------------------'
#3 @10'Exposed' @30'Unexposed'
#4 '------------------------------------------'
#5 'Case' @10 a1 @30 b1
#6 'Control' @10 c1 @30 d1
#7 '------------------------------------------'
#11 'The second mathematically reasonable values: '
#12 '------------------------------------------'
#13 @10'Exposed' @30'Unexposed'
#14 '------------------------------------------'
#15 'Case' @10 a2 @30 b2
#16 'Control' @10 c2 @30 d2
#17 '------------------------------------------'
;
run;
%mend;
%ORInvCalc(r, up, low, m, n);

使用方法

将上面的代码粘贴进SAS后,将最后的r, up, low, m, n替换成文章中提供的数据即可。

r:OR值
up:置信区间上限
low:置信区间下限
m:病例组人数
n:对照组人数

运算结果会有两套解,有一组解是增根,请根据实际情况辨别。

效果演示

不难发现,下图中的第二组解是符合我们需求的解。
运算结果演示

参考文献

  1. 王亚菲,裴丽君,卜雯婷,陈功,宋新明,郑晓瑛.利用病例-对照研究结果统计量反推原始数据的计算方法[J].中国卫生统计,2013,30(01):124-125+130.
最后修改:2022 年 05 月 17 日
喵喵喵~我装可爱你会打赏嘛?