Hello, Is it possible to calculate with a single function the odd ratios? Now I can use this implement: ``` or <- (De/He)/(Dn/Hn) # Disease exposed, Healthy non-exposed logo <- log(or) x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) lower_ci = exp(logo - 1.96*x) upper_ci = exp(logo + 1.96*x) cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", spe = "") ``` for instance, ``` De <-6 Dn <-3 He <-4 Hn <-5 or <- (De/He)/(Dn/Hn) logo <- log(or) x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) lower_ci = exp(logo - 1.96*x) upper_ci = exp(logo + 1.96*x) cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", spe = "")> OR: 2.5 ( 0.37 - 16.889 )``` Is there a simple function from some package that can also add a p-value to this test? Or how can I calculate the p-value on my own? -- Best regards, Luigi
Luigi, Odds ratios can be produced using a logistic regression, which can be performed using the glm function. The following has a detailed description of how logistic regression can be performed using R: https://stats.idre.ucla.edu/r/dae/logit-regression/ John John David Sorkin M.D., Ph.D. Professor of Medicine Chief, Biostatistics and Informatics University of Maryland School of Medicine Division of Gerontology and Geriatric Medicine Baltimore VA Medical Center 10 North Greene Street GRECC (BT/18/GR) Baltimore, MD 21201-1524 (Phone) 410-605-7119 (Fax) 410-605-7913 (Please call phone number above prior to faxing) ________________________________ From: R-help <r-help-bounces at r-project.org> on behalf of Luigi Marongiu <marongiu.luigi at gmail.com> Sent: Monday, July 6, 2020 9:01 AM To: r-help <r-help at r-project.org> Subject: [R] how to calculate odd ratios with R? Hello, Is it possible to calculate with a single function the odd ratios? Now I can use this implement: ``` or <- (De/He)/(Dn/Hn) # Disease exposed, Healthy non-exposed logo <- log(or) x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) lower_ci = exp(logo - 1.96*x) upper_ci = exp(logo + 1.96*x) cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", spe = "") ``` for instance, ``` De <-6 Dn <-3 He <-4 Hn <-5 or <- (De/He)/(Dn/Hn) logo <- log(or) x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) lower_ci = exp(logo - 1.96*x) upper_ci = exp(logo + 1.96*x) cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", spe = "")> OR: 2.5 ( 0.37 - 16.889 )``` Is there a simple function from some package that can also add a p-value to this test? Or how can I calculate the p-value on my own? -- Best regards, Luigi ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help&data=02%7C01%7C%7C2cd90411f0e34701d7f308d821acceb7%7C717009a620de461a88940312a395cac9%7C0%7C0%7C637296373389265031&sdata=GVQUX4DafNEu29kEupPbDrNblkQyas3LquN%2FVahCFPw%3D&reserved=0 PLEASE do read the posting guide https://nam03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.r-project.org%2Fposting-guide.html&data=02%7C01%7C%7C2cd90411f0e34701d7f308d821acceb7%7C717009a620de461a88940312a395cac9%7C0%7C0%7C637296373389265031&sdata=9hLF%2F0BrW3Tn%2BleeHoXaoRXY0NNxeXVQZAJQEvLBn7E%3D&reserved=0 and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]]
Dear Luigi You could try the epitools package which gives a large number of ways of doing this. I would have thought that using Wald intervals for the log odds ration was not optimal with small frequencies. Michael On 06/07/2020 14:01, Luigi Marongiu wrote:> Hello, > Is it possible to calculate with a single function the odd ratios? > Now I can use this implement: > ``` > or <- (De/He)/(Dn/Hn) # Disease exposed, Healthy non-exposed > logo <- log(or) > x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) > lower_ci = exp(logo - 1.96*x) > upper_ci = exp(logo + 1.96*x) > cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", > spe = "") > ``` > for instance, > ``` > De <-6 > Dn <-3 > He <-4 > Hn <-5 > or <- (De/He)/(Dn/Hn) > logo <- log(or) > x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) > lower_ci = exp(logo - 1.96*x) > upper_ci = exp(logo + 1.96*x) > cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", > spe = "") >> OR: 2.5 ( 0.37 - 16.889 ) > ``` > Is there a simple function from some package that can also add a > p-value to this test? Or how can I calculate the p-value on my own? >-- Michael http://www.dewey.myzen.co.uk/home.html
fisher.test() computes exact confidence intervals for the odds ratio.> On 6 Jul 2020, at 15:01, Luigi Marongiu <marongiu.luigi at gmail.com> wrote: > > Is there a simple function from some package that can also add a > p-value to this test? Or how can I calculate the p-value on my own?
A review (sorry in Japanese) on the calculation of odds ratios with confidence intervals using several packages in R is given by Prof. Okumura, Mie Univ. https://oku.edu.mie-u.ac.jp/~okumura/stat/2by2.html x <- matrix(c(6, 3, 4, 5), 2) # using vcd library(vcd) res <- oddsratio(x) exp(confint(res)) summary(res) # Note: summary(oddsratio(x, log=FALSE)) gives inappropriate p-value. # using fmsb library(fmsb) oddsratio(x, p.calc.by.independence=FALSE) Best, Minato Nakazawa On Mon, 6 Jul 2020 15:01:34 +0200 Luigi Marongiu <marongiu.luigi at gmail.com> wrote:> Hello, > Is it possible to calculate with a single function the odd ratios? > Now I can use this implement: > ``` > or <- (De/He)/(Dn/Hn) # Disease exposed, Healthy non-exposed > logo <- log(or) > x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) > lower_ci = exp(logo - 1.96*x) > upper_ci = exp(logo + 1.96*x) > cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", > spe = "") > ``` > for instance, > ``` > De <-6 > Dn <-3 > He <-4 > Hn <-5 > or <- (De/He)/(Dn/Hn) > logo <- log(or) > x <- sqrt(((1/De) + (1/He) + (1/Dn) + (1/Hn))) > lower_ci = exp(logo - 1.96*x) > upper_ci = exp(logo + 1.96*x) > cat("OR:", round(or, 3), "(", round(lower_ci, 3), "-", round(upper_ci, 3), ")", > spe = "") > > OR: 2.5 ( 0.37 - 16.889 ) > ``` > Is there a simple function from some package that can also add a > p-value to this test? Or how can I calculate the p-value on my own? > -- > Best regards, > Luigi > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >-- Minato Nakazawa <minato-nakazawa at umin.net> Professor, Division of Global Health, Department of Public Health, Kobe University Graduate School of Health Sciences [web] http://minato.sip21c.org/ [phone] +81-78-796-4551 [mobile e-mail] minatonakazawa at gmail.com