Directed Acyclic Graphs

Authors

[Editor] Hu Zheng;

[Contributors]

Visualizing directed acyclic graphs.

Setup

  • System Requirements: Cross-platform (Linux/MacOS/Windows)

  • Programming language: R

  • Dependent packages: ggdag

# Install packages
if (!requireNamespace("ggdag", quietly = TRUE)) {
  install.packages("ggdag")
}

# Load packages
library(ggdag)

Data Preparation

# Load data
tidy_ggdag <- dagify(
  y ~ x + z2 + w2 + w1,
  x ~ z1 + w1 + w2,
  z1 ~ w1 + v,
  z2 ~ w2 + v,
  w1 ~ ~w2, # bidirected path
  exposure = "x",
  outcome = "y") %>%
  tidy_dagitty()

# View data
head(tidy_ggdag)
$data
# A tibble: 13 Γ— 8
   name       x     y direction to      xend   yend circular
   <chr>  <dbl> <dbl> <fct>     <chr>  <dbl>  <dbl> <lgl>   
 1 v      1.37  1.47  ->        z1     0.262  2.32  FALSE   
 2 v      1.37  1.47  ->        z2     0.493  0.351 FALSE   
 3 w1    -0.469 1.61  ->        x     -1.10   1.75  FALSE   
 4 w1    -0.469 1.61  ->        y     -1.03   0.604 FALSE   
 5 w1    -0.469 1.61  ->        z1     0.262  2.32  FALSE   
 6 w1    -0.469 1.61  <->       w2    -0.425  0.636 FALSE   
 7 w2    -0.425 0.636 ->        x     -1.10   1.75  FALSE   
 8 w2    -0.425 0.636 ->        y     -1.03   0.604 FALSE   
 9 w2    -0.425 0.636 ->        z2     0.493  0.351 FALSE   
10 x     -1.10  1.75  ->        y     -1.03   0.604 FALSE   
11 y     -1.03  0.604 <NA>      <NA>  NA     NA     FALSE   
12 z1     0.262 2.32  ->        x     -1.10   1.75  FALSE   
13 z2     0.493 0.351 ->        y     -1.03   0.604 FALSE   

$dag
dag {
v
w1
w2
x [exposure]
y [outcome]
z1
z2
v -> z1
v -> z2
w1 -> x
w1 -> y
w1 -> z1
w1 <-> w2
w2 -> x
w2 -> y
w2 -> z2
x -> y
z1 -> x
z2 -> y
}

Visualization

# Directed Acyclic Graphs
p <- ggdag(tidy_ggdag) +
  theme_dag() 

p
FigureΒ 1: Directed Acyclic Graphs