具体程序如下:
- library(epicalc)
- cci(18, 20050,205,377054)
- library(stats)
- temp <- data.frame (
- exp <- c(1,1,0,0),
- outcome <- c(1,0,1,0),
- freq <- c(18, 20050,205,377054)
- )
- model <- glm(outcome ~ exp ,
- data = temp,
- family = binomial(),
- weights =freq)
- summary(model)
- exp(coef(model))
- exp(confint(model))
- data temp;
- input exp outcome freq;
- cards;
- 1 1 18
- 1 0 20050
- 0 1 205
- 0 0 377054
- ;
-
- proc freq data=temp;
- table outcome * exp/chisq nocol norow risk;
- weight freq;
- run;
- proc logistic data=temp descending;
- model outcome=exp;
- weight freq;
- run;
但是后来重新思考,觉得应该不至于R连这种简单的统计都会出问题,难道是SAS和R在计算OR值的置信区间上采用了不同的方法。于是翻阅现今流行病学最权威的书籍Modern Epidemiology (3rd edition),希望找到OR值的置信区间的计算上是否存在校正的置信区间的算法。但是似乎并没有找到。
然后想想R中经常存在不同程序包计算同一指标的方法,于是查阅可计算OR置信区间的不同程序包的输出,是否均是相同的问题。结果发现fmsb程序包输出的OR置信区间与SAS的输出结果一致。具体如下:
- library(fmsb)
- oddsratio(18, 20050,205,377054)
于是最终想明白三件事:
(1)R的简单程序包(如fmsb,功能仅类似与计算器)通常计算的都是OR值普通的置信区间,R的高级程序包(如epicalc,stat等)通常默认输出的是OR精确的置信区间,但epicalc也可以提供OR值普通的置信区间,而stat只能提供OR精确的置信区间。
(2)只知道P值有精确检验的方法,原来OR值也有精确置信区间一说
(3)SAS的proc logisitic过程只能提供OR值普通的置信区间,不能提供OR值精确的置信区间,因此,从某种角度上来说,SAS其实并没有R精细
同时在二楼跟帖中补充了STATA中关于OR值的相关问题讨论,欢迎大家讨论,^_^