inst/doc/measures-of-effect.R

## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#",
  warning = FALSE,
  message = FALSE
)

## -----------------------------------------------------------------------------
library(twoxtwo)

titanic %>%
  odds_ratio(.data = ., exposure = Crew, outcome = Survived)

## -----------------------------------------------------------------------------
titanic %>%
  risk_ratio(.data = ., exposure = Crew, outcome = Survived)

## -----------------------------------------------------------------------------
titanic %>%
  risk_diff(.data = ., exposure = Crew, outcome = Survived)

## -----------------------------------------------------------------------------
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)

## write a helper function to compute odds ratio and risk ratio
## this function will stack the two outputs on top of one another as a tibble
or_rr <- function(incidence = 0.8) {
  
  ## define counts in two-by-two cells based on the incidence proportion
  A <- round(100*incidence)
  B <- 100 - A
  C <- 10
  D <- 90
  
  ## create a tibble with observation level data from the counts above
  dat <-
    tribble(~x, ~y, ~n,
            TRUE, TRUE, A,
            TRUE, FALSE, B,
            FALSE,TRUE, C,
            FALSE, FALSE, D) %>%
    uncount(n)
  
  ## calculate odds ratio and risk ratio
  or <- odds_ratio(dat, exposure = x, outcome = y)
  rr <- risk_ratio(dat, exposure = x , outcome = y)
  
  ## stack the two on top of one another
  ## add a column with incidence
  bind_rows(or,rr) %>%
    mutate(Incidence = incidence)
}

## iterate over all incidence values from 0.025 to 0.5 (in 0.025 increments)
## combine results as a tibble
res <-
  seq(0.025, 0.5, by = 0.025) %>%
  map_df(., or_rr)

## ---- echo=FALSE--------------------------------------------------------------
res %>%
  select(Measure = measure, Estimate = estimate, Incidence) %>%
  mutate(Estimate = round(Estimate, 3)) %>%
  spread(Measure, Estimate) %>%
  knitr::kable(.)

## ---- fig.width=7, fig.height=5, fig.align="center", echo = FALSE-------------
res %>%
  ggplot(aes(Incidence, estimate)) +
  geom_line(aes(group = measure, col = measure), lwd = 0.75) +
  scale_y_log10() +
  theme_minimal() +
  labs(x = "Incidence", y = "Estimate") +
  theme(legend.position = "bottom", legend.title = element_blank())

Try the twoxtwo package in your browser

Any scripts or data that you put into this service are public.

twoxtwo documentation built on July 9, 2021, 9:08 a.m.