[R] Confidence interval for relative risk

Viechtbauer Wolfgang (STAT) Wolfgang.Viechtbauer at STAT.unimaas.nl
Fri Nov 10 16:54:14 CET 2006


Hello,

A common way to calculate the CI for a relative risk is the following. Given a 2x2 table of the form:

a b
c d

the log of the risk ratio is given by:

lrr = log[ a/(a+b) / ( c/(c+d) ) ]

which is asymptotically normal with variance:

vlrr = 1/a - 1/(a+b) + 1/c - 1/(c+d).

So an approximate 95% CI for the risk ratio is given by:

exp[ lrr - 1.96*sqrt(vlrr) ], exp[ lrr + 1.96*sqrt(vlrr) ].

A common convention is to add 1/2 to each cell when there are zeros.

So, for the table:

       Col 1 Col 2
Row 1     8   500 
Row 2     0   500

lrr = log[ 8.5/509 / ( 0.5/501 ) ] = 2.817
vllr = 1/8.5 - 1/509 + 1/0.5 - 1/501 = 2.1137

exp[ 2.817-1.96*sqrt(2.1137) ] = .97
exp[ 2.817+1.96*sqrt(2.1137) ] = 289.04

Maybe that is what the authors did.

Best,

-- 
Wolfgang Viechtbauer 
 Department of Methodology and Statistics 
 University of Maastricht, The Netherlands 
 http://www.wvbauer.com/ 


> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-
> bounces at stat.math.ethz.ch] On Behalf Of Michael Dewey
> Sent: Friday, November 10, 2006 15:43
> To: r-help at stat.math.ethz.ch
> Subject: [R] Confidence interval for relative risk
> 
> The concrete problem is that I am refereeing
> a paper where a confidence interval is
> presented for the risk ratio and I do not find
> it credible. I show below my attempts to
> do this in R. The example is slightly changed
> from the authors'.
> 
> I can obtain a confidence interval for
> the odds ratio from fisher.test of
> course
> 
> === fisher.test example ===
> 
>  > outcome <- matrix(c(500, 0, 500, 8), ncol = 2, byrow = TRUE)
>  > fisher.test(outcome)
> 
>          Fisher's Exact Test for Count Data
> 
> data:  outcome
> p-value = 0.00761
> alternative hypothesis: true odds ratio is not equal to 1
> 95 percent confidence interval:
>   1.694792      Inf
> sample estimates:
> odds ratio
>         Inf
> 
> === end example ===
> 
> but in epidemiology authors often
> prefer to present risk ratios.
> 
> Using the facility on CRAN to search
> the site I find packages epitools and Epi
> which both offer confidence intervals
> for the risk ratio
> 
> === Epi example ===
> 
>  > library(Epi)
>  > twoby2(outcome[c(2,1),c(2,1)])
> 2 by 2 table analysis:
> ------------------------------------------------------
> Outcome   : Col 1
> Comparing : Row 1 vs. Row 2
> 
>        Col 1 Col 2    P(Col 1) 95% conf. interval
> Row 1     8   500      0.0157    0.0079   0.0312
> Row 2     0   500      0.0000    0.0000      NaN
> 
>                                     95% conf. interval
>               Relative Risk:    Inf       NaN      Inf
>           Sample Odds Ratio:    Inf       NaN      Inf
> Conditional MLE Odds Ratio:    Inf    1.6948      Inf
>      Probability difference: 0.0157    0.0027   0.0337
> 
>               Exact P-value: 0.0076
>          Asymptotic P-value: NaN
> ------------------------------------------------------
> 
> === end example ===
> 
> So Epi gives me a lower limit of NaN but the same confidence
> interval and p-value as fisher.test
> 
> === epitools example ===
> 
>  > library(epitools)
>  > riskratio(outcome)
> $data
>            Outcome
> Predictor  Disease1 Disease2 Total
>    Exposed1      500        0   500
>    Exposed2      500        8   508
>    Total        1000        8  1008
> 
> $measure
>            risk ratio with 95% C.I.
> Predictor  estimate lower upper
>    Exposed1        1    NA    NA
>    Exposed2      Inf   NaN   Inf
> 
> $p.value
>            two-sided
> Predictor  midp.exact fisher.exact  chi.square
>    Exposed1         NA           NA          NA
>    Exposed2 0.00404821  0.007610478 0.004843385
> 
> $correction
> [1] FALSE
> 
> attr(,"method")
> [1] "Unconditional MLE & normal approximation (Wald) CI"
> Warning message:
> Chi-squared approximation may be incorrect in: chisq.test(xx, correct =
> correction)
> 
> === end example ===
> 
> And epitools also gives a lower limit
> of NaN.
> 
> === end all examples ===
> 
> I would prefer not to have to tell the authors of the
> paper I am refereeing that
> I think they are wrong unless I can help them with what they
> should have done.
> 
> Is there another package I should have tried?
> 
> Is there some other way of doing this?
> 
> Am I doing something fundamentally wrong-headed?
> 
> 
> 
> Michael Dewey
> http://www.aghmed.fsnet.co.uk



More information about the R-help mailing list