R/risk_ratio_to_odds_ratio.R

Defines functions risk_ratio_to_odds_ratio

Documented in risk_ratio_to_odds_ratio

#' @title
#'   Calculate an odds ratio (OR) from a risk ratio (RR)
#'
#' @description
#'   Calculate an odds ratio (OR) from a risk ratio (RR) and the outcome prevalence
#'   in the unexposed (referent) group.
#'
#'
#' @param .riskratio
#'   numeric: risk ratio.
#'
#' @param .baseline
#'   numeric: outcome prevalence in unexposed (referent) group.
#'
#' @return
#'   An odds ratio.
#'
#' @export


risk_ratio_to_odds_ratio <- function(.riskratio = NULL, .baseline = NULL) {
  if (!hasArg(.riskratio) | !is.numeric(.riskratio)) {
    cli::cli_abort(c(
      "{.var .riskratio} must be a numeric vector.",
      "x" = "You have supplied a {.cls {class(.riskratio)}} vector."
    ))
  }

  if (!hasArg(.baseline) | !is.numeric(.baseline)) {
    cli::cli_abort(c(
      "{.var .baseline} must be a numeric vector.",
      "x" = "You have supplied a {.cls {class(.baseline)}} vector."
    ))
  }

  if (.baseline < 0 | .baseline > 1) {
    cli::cli_abort(c(
      "{.var .baseline} must be probability between [0, 1].",
      "x" = "You have supplied a value less than 0 or greater than 1."
    ))
  }

  if (.baseline == 0 | .baseline == 1) {
    cli::cli_warn(c(
      "{.var .baseline} should not be 0 or 1, with rare exception.",
      "i" = "You have supplied a {.var .baseline} value of 0 or 1.",
      "i" = "Run {.run help(risk_ratio_to_odds_ratio)} for more details."
    ))
  }

  .oddsratio <- .riskratio * (1 - .baseline) / (1 - .riskratio * .baseline)

  return(.oddsratio)
}
iAM-AMR/sawmill documentation built on June 30, 2024, 2:25 a.m.