Identification Algorithms

CausalDynamics.backdoor_adjustment_setFunction
backdoor_adjustment_set(g, X, Y)

Find a valid backdoor adjustment set for estimating the causal effect of X on Y.

Delegates to CausalInference.find_min_backdoor_adjustment. Returns nothing if no valid set exists (false from CausalInference).

Arguments

  • g: Directed acyclic graph
  • X: Treatment node
  • Y: Outcome node

Returns

  • Set{Int} of adjustment nodes (possibly empty if no backdoors), or nothing
source
CausalDynamics.frontdoor_adjustment_setFunction
frontdoor_adjustment_set(g, X, Y, M)

Check if M is a valid frontdoor adjustment set for estimating the causal effect of X on Y.

The frontdoor criterion states that a set M is a valid frontdoor adjustment set if:

  1. M blocks all directed paths from X to Y
  2. There are no backdoor paths from X to M
  3. All backdoor paths from M to Y are blocked by X

Uses reachability (BFS), not path enumeration — safe on dense DAGs.

Arguments

  • g: Directed acyclic graph
  • X: Treatment node
  • Y: Outcome node
  • M: Potential mediator set

Returns

  • true if M is a valid frontdoor adjustment set, false otherwise
source
CausalDynamics.find_instrumentsFunction
find_instruments(g, X, Y)

Find instrumental variables for estimating the causal effect of X on Y.

An instrumental variable Z must satisfy:

  1. Z has a causal effect on X
  2. Z affects Y only through X (exclusion restriction)
  3. Z is independent of confounders of X and Y (independence)

Arguments

  • g: Directed acyclic graph
  • X: Treatment node
  • Y: Outcome node

Returns

  • Vector of potential instrumental variables

Examples

using CausalDynamics, Graphs

# IV example
g = DiGraph(4)
add_edge!(g, 1, 2)  # Z → X
add_edge!(g, 2, 3)  # X → Y
add_edge!(g, 4, 2)  # U → X
add_edge!(g, 4, 3)  # U → Y

# Z is a valid instrument
instruments = find_instruments(g, 2, 3)  # [1]

References

  • Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics
source
CausalDynamics.is_valid_instrumentFunction
is_valid_instrument(g, Z, X, Y)

Check if Z is a valid instrumental variable for X → Y.

An instrument Z must satisfy three conditions:

  1. Relevance: Z has a causal effect on X (directed path Z → X)
  2. Exclusion restriction: Z affects Y only through X (all paths Z → Y go through X)
  3. Independence: Z is independent of confounders (no backdoor paths Z → Y)

Arguments

  • g::AbstractGraph: Directed acyclic graph
  • Z::Int: Potential instrument node
  • X::Int: Treatment node
  • Y::Int: Outcome node

Returns

  • Bool: true if Z is a valid instrument, false otherwise

Examples

using CausalDynamics, Graphs

# Valid instrument
g = DiGraph(4)
add_edge!(g, 1, 2)  # Z → X
add_edge!(g, 2, 3)  # X → Y
add_edge!(g, 4, 2)  # U → X
add_edge!(g, 4, 3)  # U → Y

is_valid_instrument(g, 1, 2, 3)  # true

# Invalid: Z has direct path to Y
g2 = DiGraph(3)
add_edge!(g2, 1, 2)  # Z → X
add_edge!(g2, 1, 3)  # Z → Y (violates exclusion)
add_edge!(g2, 2, 3)  # X → Y

is_valid_instrument(g2, 1, 2, 3)  # false

Notes

  • The independence condition (3) is checked conservatively: if any backdoor paths exist, returns false
  • In practice, independence may hold even with backdoor paths if they are blocked

References

  • Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics, Chapter 4
source