causaldag.classes.dag.DAG.is_invariant

DAG.is_invariant(A, intervened_nodes, cond_set={}, verbose=False) → bool[source]

Check if the distribution of A given cond_set is invariant to an intervention on intervened_nodes.

f^\emptyset(A|C) = f^I(A|C) if the “intervention node” I with intervened_nodes as its children is d-separated from A given C. Equivalently, the :math:`f^emptyset(A|C)

eq f^I(A|C)` if:

  • there is an active path to an intervened node that ends in an arrowhead, and that intervened node
    or one of its descendants is conditioned on.
  • there is an active path to an intervened node that ends in a tail, and that intervened node
    is not conditioned on.
A:
Set of nodes.
intervened_nodes:
Nodes on which an intervention has occurred.
cond_set:
Conditioning set for the tested distribution.
verbose:
If True, print moves of the algorithm.