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))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.
