inst/doc/causal-discovery.R

## -----------------------------------------------------------------------------
#| label: setup
library(causalDisco)


## -----------------------------------------------------------------------------
#| label: dag
cg <- caugi::caugi(
  Z %-->% X1,
  X3 %-->% X2,
  X1 %-->% Y,
  X2 %-->% Y
)


## -----------------------------------------------------------------------------
#| label: plot dag
layout <- caugi::caugi_layout_sugiyama(cg)
plot(cg, layout = layout, main = "True DAG")


## -----------------------------------------------------------------------------
#| label: simple causal discovery
data_linear <- generate_dag_data(
  cg,
  n = 10000,
  seed = 1405,
  coef_range = c(0.1, 0.9),
  error_sd = c(0.3, 2)
)
head(data_linear)


## -----------------------------------------------------------------------------
#| label: generating model
attr(data_linear, "generating_model")


## -----------------------------------------------------------------------------
#| label: pc algorithm simple
pc_pcalg <- pc(engine = "pcalg", test = "fisher_z", alpha = 0.05)
pc_result_pcalg <- disco(data = data_linear, method = pc_pcalg)


## -----------------------------------------------------------------------------
#| label: plot pc results simple
plot(pc_result_pcalg, layout = layout, main = "PC (pcalg)")


## -----------------------------------------------------------------------------
#| label: pc algorithm reversed
cg_reverse <- caugi::caugi(
  Z %-->% X1,
  X2 %-->% X3,
  X1 %-->% Y,
  X2 %-->% Y
)

data_linear_reverse <- generate_dag_data(
  cg_reverse,
  n = 10000,
  seed = 1405,
  coef_range = c(0.1, 0.9),
  error_sd = c(0.3, 2)
)

pc_result_reverse <- disco(data = data_linear_reverse, method = pc_pcalg)
plot(pc_result_reverse, layout = layout, main = "PC (pcalg) reversed")


## -----------------------------------------------------------------------------
#| label: dag unobserved confounder
cg_unobserved <- caugi::caugi(
  Z %-->% X1,
  X3 %-->% X2,
  X1 %-->% Y,
  X2 %-->% Y,
  U %-->% X1 + X2
)


## -----------------------------------------------------------------------------
#| label: plot dag unobserved confounder
plot(
  cg_unobserved,
  edge_style = list(
    by_edge = list(
      U = list(col = "red", fill = "red", lty = "dashed")
    )
  ),
  node_style = list(
    by_node = list(
      U = list(col = "red", fill = "red")
    )
  ),
  main = "True DAG"
)


## -----------------------------------------------------------------------------
#| label: data unobserved confounder
data_unobserved <- generate_dag_data(
  cg_unobserved,
  n = 10000,
  seed = 1405,
  coef_range = c(0.1, 0.9),
  error_sd = c(0.3, 2)
)
data_unobserved <- data_unobserved[, names(data_unobserved) != "U"]
head(data_unobserved)


## -----------------------------------------------------------------------------
#| label: pc algorithm unobserved confounder
pc_pcalg_unobserved <- pc(engine = "pcalg", test = "fisher_z", alpha = 0.05)
pc_result_unobserved <- disco(
  data = data_unobserved,
  method = pc_pcalg_unobserved
)
plot(pc_result_unobserved, layout = layout, main = "PC (pcalg)")

Try the causalDisco package in your browser

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

causalDisco documentation built on April 13, 2026, 5:06 p.m.