Skip to contents

Z satisfies the criterion when no member is a descendant of X and Z blocks every back-door path from X to Y. Blocking is d-separation, including the collider rule that makes it more than "adjust for everything": a chain or fork is blocked when the middle node is in Z, but a collider blocks the path unless it or a descendant is in Z, so conditioning on a collider opens a path that was closed.

Usage

morie_backdoor_criterion(dag, x, y, z = character(0))

Arguments

dag

Named list of node = children, or a two-column edge matrix of (parent, child). Must be acyclic.

x, y

Treatment and outcome node names.

z

Candidate adjustment set; the empty set is valid.

Value

Named list with satisfied, descendant_violations, open_paths, n_backdoor, reason, method.

Details

This is the check that morie_backdoor_adjustment assumes and cannot perform, since the adjustment is arithmetic over data while the criterion is a claim about the graph.

Mirrors morie.fn.bdcrt.

References

Pearl J (2009). Causality, 2nd edn, Def. 3.3.1.

Examples

morie_backdoor_criterion(list(Z = c("X", "Y"), X = "Y"), "X", "Y", "Z")$satisfied
#> [1] TRUE