Learn R Programming

DescTools (version 0.99.19)

OddsRatio: Odds Ratio Estimation and Confidence Intervals

Description

Calculates odds ratio by unconditional maximum likelihood estimation (wald), conditional maximum likelihood estimation (mle) or median-unbiased estimation (midp). Confidence intervals are calculated using normal approximation (wald) and exact methods (midp, mle).

Usage

OddsRatio(x, y = NULL, conf.level = NA, method = c("wald", "mle", "midp"), interval = c(0, 1000), ...)

Arguments

x
a vector or a $2 x 2$ numeric matrix, resp. table.

y
NULL (default) or a vector with compatible dimensions to x. If y is provided, table(x, y, ...) will be calculated.

method
method for calculating odds ratio and confidence intervals. Can be one out of "wald", "mle", "midp". Default is "wald" (not because it is the best, but because it is the most commonly used.)
conf.level
confidence level. Default is NA, meaning no confidence intervals will be reported.
interval
interval for the function uniroot that finds the odds ratio median-unbiased estimate and midp exact confidence interval.
...
further arguments are passed to the function table, allowing i.e. to set useNA. This refers only to the vector interface.

Value

a single numeric value if conf.level is set to NA a numeric vector with 3 elements for estimate, lower and upper confidence interval if conf.level is provided

Details

If a $2 x 2$ table is provided the following table structure is preferred:

                    disease=0   disease=1
    exposed=0 (ref)    n00         n01
    exposed=1          n10         n11	
  
however, for odds ratios the following table is equivalent:
                    disease=1   disease=0
    exposed=1          n11         n10
    exposed=0          n01         n00	
  
If the table to be provided to this function is not in the preferred form, the function Rev() can be used to "reverse" the table rows, resp. -columns. Reversing columns or rows (but not both) will lead to the inverse of the odds ratio.

In case of zero entries, 0.5 will be added to the table.

References

Kenneth J. Rothman and Sander Greenland (1998): Modern Epidemiology, Lippincott-Raven Publishers Kenneth J. Rothman (2002): Epidemiology: An Introduction, Oxford University Press Nicolas P. Jewell (2004): Statistics for Epidemiology, 1st Edition, 2004, Chapman & Hall, pp. 73-81 Agresti, Alan (2013) Categorical Data Analysis. NY: John Wiley and Sons, Chapt. 3.1.1

See Also

RelRisk

Examples

Run this code
# Case-control study assessing whether exposure to tap water
#   is associated with cryptosporidiosis among AIDS patients

tab <- matrix(c(2, 29, 35, 64, 12, 6), 3, 2, byrow=TRUE)
dimnames(tab) <- list("Tap water exposure" = c("Lowest", "Intermediate", "Highest"), 
                      "Outcome" = c("Case", "Control"))
tab <- Rev(tab, direction="column")

OddsRatio(tab[1:2,])
OddsRatio(tab[c(1,3),])

OddsRatio(tab[1:2,], method="mle")
OddsRatio(tab[1:2,], method="midp")
OddsRatio(tab[1:2,], method="wald", conf.level=0.95)

# in case of zeros consider using glm for calculating OR
dp <- data.frame (a=c(20, 7, 0, 0), b=c(0, 0, 0, 12), t=c(1, 0, 1, 0))
fit <- glm(cbind(a, b) ~ t, data=dp, family=binomial)

exp(coef(fit))

# calculation of log oddsratios in a 2x2xk table
migraine <- xtabs(freq ~ ., 
                  cbind(expand.grid(treatment=c("active","placebo"), 
                                    response=c("better","same"), 
                                    gender=c("female","male")),
                        freq=c(16,5,11,20,12,7,16,19))
)
 
log(apply(migraine, 3, OddsRatio))

Run the code above in your browser using DataLab