Conditioning feels like a broom.

If two variables are tangled because they share a common cause, condition on the common cause and the tangle often goes away:

Weather -> IceCream
Weather -> Drowning

Compare ice cream and drowning without weather, and summer does the confounding. Compare them within weather, and the path through weather is blocked.

That story is useful. It is also incomplete.

Sometimes conditioning opens a path.

Rain      -> Wet grass <- Sprinkler
Wet grass -> Alarm

Rain and sprinkler use are marginally unrelated in this little graph. But if I tell you the alarm fired, rain and sprinkler become competitors. Learning that it rained makes the sprinkler less necessary as an explanation. Learning that the sprinkler ran makes rain less necessary.

The collider opened when you looked downstream.

Three Local Shapes

D-separation is the graphical rule for reading conditional independence from a directed acyclic graph. Pearl’s graphical-models survey gives the compact definition: a path is blocked by a conditioning set when it contains either a conditioned non-collider chain/fork middle node, or an unconditioned collider whose descendants are also unconditioned.1

The three local shapes are:

chain:     A -> B -> C
fork:      A <- B -> C
collider:  A -> B <- C

For a path to be active:

chain/fork middle node: must NOT be conditioned on
collider middle node:   must be conditioned on, or have a conditioned descendant

This is the part that breaks folk statistics. Conditioning on B blocks the first two shapes and opens the third.

Geiger, Verma, and Pearl proved the soundness and completeness of d-separation for the independencies implied by Bayesian-network structure.2 Shachter’s Bayes-ball algorithm later gave a student-friendly and implementation-friendly way to test relevance and irrelevance in linear time by letting a symbolic ball bounce through the graph.3

The lab below does the slower, more visible thing: it enumerates simple paths between two query variables and classifies each middle node.

The Lab

The default graph is:

Rain      -> Wet <- Sprinkler
Wet       -> Alarm
observed: Alarm
query: Rain vs Sprinkler

There is one simple path:

Rain - Wet - Sprinkler

Wet is a collider on that path. Wet itself is not observed, but its descendant Alarm is observed. So the path is active.

query variable observed variable active path blocked path opened collider

Deterministic graph experiment. The audit checks the classic chain, fork, collider, descendant-of-collider, confounding-plus-direct-effect, and selection-bias cases. The lab enumerates simple undirected paths between the query nodes and applies the d-separation path rules to each middle node.

Try four moves.

First, uncheck Alarm in the default graph. Rain and sprinkler become d-separated. The only path is still there on the page, but it is blocked at Wet because Wet is an unobserved collider with no observed descendant.

Second, check Wet instead. The path opens again. Observing an effect makes its causes compete.

Third, switch to chain and observe M. Now conditioning does what your first intuition expected: it blocks the path X - M - Y.

Fourth, switch to front and back paths. Observing Severity blocks the backdoor path

Treatment - Severity - Outcome

but the direct path

Treatment - Outcome

is still active. Adjustment is not the same as independence.

Why Colliders Feel Backwards

Chains and forks carry association through a middle variable:

X -> M -> Y
X <- C -> Y

Once you condition on the middle variable, the path stops carrying new information. Within a fixed value of M or C, movement in X no longer has that route to Y.

A collider is different:

X -> C <- Y

Without observing C, the two causes do not need to explain the same fact. Once you observe C, they do. The dependence is not flowing with the arrows. It is created by the constraint that both causes now have to account for the same observed consequence.

This is the small graphical version of selection bias. If admission depends on skill and coaching, then inside the admitted group, skill and coaching can be negatively associated even when they are independent in the population. You are looking at a collider descendant.

D-Separation Is A Syntax Check, Not A Miracle

D-separation reads independencies from a graph. It does not prove the graph is true.

The graph is a modeling claim:

these arrows exist
these arrows are absent
these variables are enough

Given that claim, the d-separation criterion tells you which conditional independencies follow from the graph’s factorization. It is a syntax check with semantic force. Pearl’s survey phrases the payoff sharply: the graph is an efficient way to represent Markovian independence assumptions and their logical consequences.1

But if a hidden common cause exists and the graph omits it, the path inspector is inspecting the wrong map.

So the practical audit is:

Which path am I trying to block?
Which observed variable blocks it?
Am I conditioning on a collider or a collider descendant?
Is there a direct path that I should not expect to disappear?
Which unmeasured variables would add new open paths?

The last question is where causal inference stays hard.

A Useful Mental Model

I keep two sentences around:

conditioning on a pipe closes the pipe
conditioning on a common effect opens the competition

That is not a substitute for the formal rule. It is a good alarm bell. If a feature, label, sample filter, benchmark inclusion rule, medical diagnosis, admission decision, search result, or fraud alert is downstream of multiple causes, conditioning on it may connect those causes.

The graph does not say “more controls are better.”

The graph says:

look at the path before you touch the variable
  1. Judea Pearl, “Graphical Models for Probabilistic and Causal Reasoning”, in Quantified Representation of Uncertainty and Imprecision, 1998. The chapter summarizes d-separation and its connection to Bayesian-network factorization.  2

  2. Dan Geiger, Thomas Verma, and Judea Pearl, “Identifying Independence in Bayesian Networks”, Networks 20(5):507-534, 1990. A UCLA technical report version is available as “Identifying independence in Bayesian Networks”

  3. Ross D. Shachter, “Bayes-Ball: The Rational Pastime (for Determining Irrelevance and Requisite Information in Belief Networks and Influence Diagrams)”, UAI 1998.