# [R] Confidence interval for relative risk

7 messages
Open this post in threaded view
|

## [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______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] Confidence interval for relative risk

 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: [hidden email] [mailto:r-help- > [hidden email]] On Behalf Of Michael Dewey > Sent: Friday, November 10, 2006 15:43 > To: [hidden email] > 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______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] Confidence interval for relative risk

 At 15:54 10/11/2006, Viechtbauer Wolfgang (STAT) wrote: Thanks for the suggestion Wolfgang, but whatever the original authors did that is not it. >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: [hidden email] [mailto:r-help- > > [hidden email]] On Behalf Of Michael Dewey > > Sent: Friday, November 10, 2006 15:43 > > To: [hidden email] > > 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.ukMichael Dewey http://www.aghmed.fsnet.co.uk______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] Confidence interval for relative risk

 Michael Dewey <[hidden email]> writes: > At 15:54 10/11/2006, Viechtbauer Wolfgang (STAT) wrote: > > Thanks for the suggestion Wolfgang, but whatever the original authors > did that is not it. Did you ever say what result they got?         -p   > >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: [hidden email] [mailto:r-help- > > > [hidden email]] On Behalf Of Michael Dewey > > > Sent: Friday, November 10, 2006 15:43 > > > To: [hidden email] > > > 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> > Michael Dewey > http://www.aghmed.fsnet.co.uk> > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. > --    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K  (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918 ~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: [R] Confidence interval for relative risk

 At 12:35 12/11/2006, Peter Dalgaard wrote: >Michael Dewey <[hidden email]> writes: > > > At 15:54 10/11/2006, Viechtbauer Wolfgang (STAT) wrote: > > > > Thanks for the suggestion Wolfgang, but whatever the original authors > > did that is not it. > >Did you ever say what result they got? > >         -p > No, because I did not want to use the original numbers in the request. So as the snippet below indicates I changed the numbers. If I apply Wolfgang's suggestion (which I had already thought of but discarded) I get about 13 for the real example where the authors quote about 5. My question still remains though as to how I can get a confidence interval for the risk ratio without adding a constant to each cell. > > > > it credible. I show below my attempts to > > > > do this in R. The example is slightly changed > > > > from the authors'. Michael Dewey http://www.aghmed.fsnet.co.uk______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.