Skip to contents

An alternative API and specification to tidy_dagitty(), as_tidy_dagitty() allows you to create tidy_dagitty objects from data frames and lists. There is also a method for dagitty objects, which is a thin wrapper for tidy_dagitty(). To create a DAG from a list, each element of the list should be a character vector, and the order of the elements should be the time order in which they appear in the DAG, e.g. element 1 occurs at time point 1. To create a DAG from a data frame, it must contain name and to columns, representing the nodes and any edges leading from the nodes. If there are x, y, xend, and yend columns, they will be used as coordinates. Otherwise, layout will be used. See tidy_dagitty for more information about layouts. Additionally, you can specify status (one of exposure, outcome, or latent) by including a status column. Any other columns in the data set will also be joined to the tidy_dagitty data.

Usage

as_tidy_dagitty(x, ...)

# S3 method for class 'dagitty'
as_tidy_dagitty(x, seed = NULL, layout = "nicely", ...)

# S3 method for class 'data.frame'
as_tidy_dagitty(
  x,
  exposure = NULL,
  outcome = NULL,
  latent = NULL,
  labels = NULL,
  coords = NULL,
  seed = NULL,
  layout = "nicely",
  saturate = FALSE,
  ...
)

# S3 method for class 'list'
as_tidy_dagitty(
  x,
  exposure = NULL,
  outcome = NULL,
  latent = NULL,
  labels = NULL,
  coords = NULL,
  seed = NULL,
  layout = "time_ordered",
  ...
)

Arguments

x

An object to convert into a tidy_dagitty. Currently supports dagitty and data.frame objects.

...

optional arguments passed to ggraph::create_layout()

seed

a numeric seed for reproducible layout generation

layout

a layout available in ggraph. See ggraph::create_layout() for details. Alternatively, "time_ordered" will use time_ordered_coords() to algorithmically sort the graph by time.

exposure

a character vector for the exposure (must be a variable name in the DAG)

outcome

a character vector for the outcome (must be a variable name in the DAG)

latent

a character vector for any latent variables (must be a variable name in the DAG)

labels

a named character vector, labels for variables in the DAG

coords

coordinates for the DAG nodes. Can be a named list or a data.frame with columns x, y, and name

saturate

Logical. Saturate the DAG such that there is an edge going from every point in the future from a given node? Setting this to TRUE will potentially lead to more edges than present in x.

Value

a tidy_dagitty object

Examples


data.frame(name = c("c", "c", "x"), to = c("x", "y", "y")) %>%
  as_tidy_dagitty()
#> # A DAG with 3 nodes and 3 edges
#> #
#> # A tibble: 4 × 8
#>   name        x      y direction to       xend   yend circular
#>   <chr>   <dbl>  <dbl> <fct>     <chr>   <dbl>  <dbl> <lgl>   
#> 1 c      0.517   0.724 ->        x      0.0348 -0.156 FALSE   
#> 2 c      0.517   0.724 ->        y     -0.486   0.702 FALSE   
#> 3 x      0.0348 -0.156 ->        y     -0.486   0.702 FALSE   
#> 4 y     -0.486   0.702 NA        NA    NA      NA     FALSE   

time_points <- list(c("a", "b", "c"), "d", c("e", "f", "g"), "z")

time_points %>%
  # create a saturated, time-ordered DAG
  as_tidy_dagitty() %>%
  # remove the edge from `c` to `f`
  dag_prune(c("c" = "f"))
#> # A DAG with 8 nodes and 21 edges
#> #
#> # A tibble: 22 × 8
#>    name      x     y direction to     xend  yend circular
#>    <chr> <dbl> <int> <fct>     <chr> <dbl> <int> <lgl>   
#>  1 a         1    -1 ->        d         2     0 FALSE   
#>  2 a         1    -1 ->        e         3    -1 FALSE   
#>  3 a         1    -1 ->        f         3     0 FALSE   
#>  4 a         1    -1 ->        g         3     1 FALSE   
#>  5 a         1    -1 ->        z         4     0 FALSE   
#>  6 b         1     0 ->        d         2     0 FALSE   
#>  7 b         1     0 ->        e         3    -1 FALSE   
#>  8 b         1     0 ->        f         3     0 FALSE   
#>  9 b         1     0 ->        g         3     1 FALSE   
#> 10 b         1     0 ->        z         4     0 FALSE   
#> # ℹ 12 more rows