inst/doc/bias-structures.R

## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5,
  fig.align = "center",
  fig.dpi = 320,
  warning = FALSE,
  message = FALSE
)
set.seed(2939)

## ----set_theme----------------------------------------------------------------
#  set theme of all DAGs to `theme_dag()`
library(ggdag)
library(ggplot2)
theme_set(theme_dag())

## -----------------------------------------------------------------------------
confounder_triangle(x = "Coffee", y = "Lung Cancer", z = "Smoking") %>%
  ggdag_dconnected(text = FALSE, use_labels = "label")

## -----------------------------------------------------------------------------
coffee_dag <- dagify(cancer ~ smoking,
  smoking ~ addictive,
  coffee ~ addictive,
  exposure = "coffee",
  outcome = "cancer",
  labels = c(
    "coffee" = "Coffee", "cancer" = "Lung Cancer",
    "smoking" = "Smoking", "addictive" = "Addictive \nBehavior"
  )
) %>%
  tidy_dagitty(layout = "tree")

ggdag(coffee_dag, text = FALSE, use_labels = "label")

## ---- fig.width = 7.5---------------------------------------------------------
ggdag_adjustment_set(coffee_dag, text = FALSE, use_labels = "label", shadow = TRUE)

## -----------------------------------------------------------------------------
collider_triangle() %>%
  ggdag_dseparated(controlling_for = "m")

## -----------------------------------------------------------------------------
m_bias(
  x = "Education", y = "Diabetes", a = "Income during Childhood",
  b = "Genetic Risk \nfor Diabetes", m = "Mother's Diabetes"
) %>%
  ggdag(use_labels = "label")

## ---- fig.width = 7.5---------------------------------------------------------
m_bias(
  x = "Education", y = "Diabetes", a = "Income during \nChildhood",
  b = "Genetic Risk \nfor Diabetes", m = "Mother's Diabetes"
) %>%
  ggdag_dseparated(controlling_for = "m", use_labels = "label")

## -----------------------------------------------------------------------------
coords <- dagitty::coordinates(m_bias()) %>%
  coords2df()
coords$name <- c("readiness", "pain", "surgery", "ready_tool", "pain_change")

surgical_dag <- dagify(ready_tool ~ readiness,
  surgery ~ readiness + pain,
  pain_change ~ ready_tool + pain,
  exposure = "ready_tool",
  outcome = "pain_change",
  latent = "readiness",
  labels = c(
    ready_tool = "Measured \nReadiness",
    pain_change = "Change \nin Pain",
    readiness = "Underlying \nReadiness",
    pain = "Baseline \nPain",
    surgery = "Surgical \nStatus"
  ),
  coords = coords2list(coords)
) %>%
  control_for("surgery")

ggdag_adjust(surgical_dag, text = FALSE, use_labels = "label", collider_lines = FALSE)

## -----------------------------------------------------------------------------
ggdag_adjustment_set(surgical_dag, text = FALSE, use_labels = "label", shadow = TRUE)

## -----------------------------------------------------------------------------
ggdag_butterfly_bias(edge_type = "diagonal")

## -----------------------------------------------------------------------------
ggdag_adjustment_set(butterfly_bias(), shadow = TRUE)

## -----------------------------------------------------------------------------
# set coordinates
coords <- tibble::tribble(
  ~name, ~x, ~y,
  "bladder_cancer", 1, 0,
  "vitamins", 0, 0,
  "diagnosed_bc", 1, 1,
  "recalled_vits", 0, 1,
  "bc_error", 1, 2,
  "vits_error", 0, 2,
)

bladder_dag <- dagify(diagnosed_bc ~ bc_error + bladder_cancer,
  recalled_vits ~ vitamins + vits_error,
  vits_error ~ bladder_cancer,
  labels = c(
    bladder_cancer = "Bladder Cancer",
    vitamins = "Childhood Vitamin \nIntake",
    diagnosed_bc = "Diagnosed \nBladder Cancer",
    recalled_vits = "Memory of \nTaking Vitamins",
    bc_error = "Measurement Error, \nDiagnosis",
    vits_error = "Measurement Error, \nVitamins"
  ),
  coords = coords
)
ggdag(bladder_dag, text = FALSE, use_labels = "label")

## -----------------------------------------------------------------------------
# set coordinates
coords <- tibble::tribble(
  ~name,              ~x,  ~y,
  "honors",            1,   3,
  "depression",        2,   3,
  "cesd",              2,   2,
  "baseline_error",    2,   1,
  "depression_change", 3,   3,
  "cesd_change",       3,   2,
  "followup_error",    3,   1
)

cesd_dag <- dagify(depression ~ honors,
  cesd ~ depression + baseline_error,
  cesd_change ~ depression_change + followup_error + baseline_error,
  labels = c(
    honors = "Honors Degree",
    depression = "Depression",
    cesd = "CES-D",
    cesd_change = "Change \nin CES-D",
    depression_change = "Change in \nDepression",
    baseline_error = "Measurement Error, \nBaseline",
    followup_error = "Measurement Error, \nFollow-up"
  ),
  coords = coords
)

cesd_dag %>%
  ggdag_dconnected(
    from = "honors", to = "cesd_change", controlling_for = "cesd",
    text = FALSE, use_labels = "label", collider_lines = FALSE
  )

## -----------------------------------------------------------------------------
coords <- tibble::tribble(
  ~name,           ~x,  ~y,
  "glioma",         1,   2,
  "hospitalized",   2,   3,
  "broken_bone",    3,   2,
  "reckless",       4,   1,
  "smoking",        5,   2
)

dagify(hospitalized ~ broken_bone + glioma,
  broken_bone ~ reckless,
  smoking ~ reckless,
  labels = c(
    hospitalized = "Hospitalization",
    broken_bone = "Broken Bone",
    glioma = "Glioma",
    reckless = "Reckless \nBehavior",
    smoking = "Smoking"
  ),
  coords = coords
) %>%
  ggdag_dconnected("glioma", "smoking",
    controlling_for = "hospitalized",
    text = FALSE, use_labels = "label", collider_lines = FALSE
  )

## -----------------------------------------------------------------------------
dagify(follow_up ~ symptoms,
  symptoms ~ new_rx + dx_severity,
  cd4 ~ dx_severity,
  labels = c(
    follow_up = "Follow-Up",
    symptoms = "Symptoms",
    new_rx = "New HIV Drug",
    dx_severity = "Underyling \nHIV Severity",
    cd4 = "CD4 Count"
  )
) %>%
  ggdag_adjust("follow_up",
    layout = "mds", text = FALSE,
    use_labels = "label", collider_lines = FALSE
  )

Try the ggdag package in your browser

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

ggdag documentation built on May 31, 2023, 7:48 p.m.