Causal Inference · Cheat Sheet
DAGs and What to Control
Cheatsheet: DAGs and What to Control
The three atomic structures
| Structure | Pattern | Example | Rule |
|---|---|---|---|
| Chain (mediator) | X → M → Y | Feature launch → engagement → revenue | X and Y dependent; conditioning on M blocks the path. Never control M if you want the total effect of X. |
| Fork (confounder) | X ← Z → Y | Adoption ← engagement → retention | X and Y dependent even with no causal link; conditioning on Z blocks the fake path. This is the one legitimate job of a control. |
| Collider | X → C ← Y | Beauty → stardom ← talent | X and Y independent; conditioning on C (including filtering on it) opens the path and creates bias from nothing. |
Memory hook: chains and forks transmit until you condition; colliders transmit because you condition.
Condition on a variable (also phrased: control for it, or filter your data on it) = split the data and look only within groups that share the same value of that variable.
Good controls vs bad controls
| Variable type | Control it? | Why |
|---|---|---|
| Confounder (causes treatment AND outcome, pre-treatment) | Yes | Blocks a backdoor path — the whole point of controlling |
| Pre-treatment cause of outcome only | Usually fine | No backdoor to block, but harmless and can improve precision |
| Collider (caused by treatment and outcome, or by their causes) | Never | Opens a closed path; manufactures fake association |
| Mediator (on the causal path D → M → Y) | Never (for total effect) | Blocks the effect you're measuring; "no effect after controlling for M" is an artifact |
| Any post-treatment variable | Never | It's a mediator, a collider, or collateral damage — determined after treatment means off-limits |
| Instrument (causes treatment only, no separate route to outcome) | No | Adds nothing, can amplify remaining unobserved-confounder bias |
| Implicit filter ("among converters", "onboarded users only", employed-only, stopped drivers only) | Watch out | The WHERE clause is a control variable. Filtering on anything downstream of treatment or outcome = collider conditioning |
Safe default (CausalML book): adjust only for pre-treatment variables that cause the treatment, the outcome, or both.
Backdoor walk-through: the 5-step mini-algorithm
- Draw the DAG. Treatment D, outcome Y, everything you believe causes either. Missing arrows are claims too — say them out loud.
- List every path from D to Y. Ignore arrow directions when tracing; you just need the routes.
- Sort the paths. Arrow leaves D first (
D → ...) = causal path, leave it alone. Arrow enters D first (D ← ...) = backdoor, must be blocked. - Block each backdoor by conditioning on a fork or chain node along it. Check no chosen control is a collider (or downstream of one) on any other path — and none sits on the causal path.
- Check for unmeasured confounders. If any backdoor runs through a variable you can't measure (
D ← U → Y), STOP: no control set fixes this. You need a different design — experiment, natural experiment, instrument, discontinuity.
Identification before estimation: if step 5 fails, more data and fancier models just get you the wrong answer faster (Shalizi's verdict on propensity scores with the wrong control set).
Red-flag phrases in decks
| Phrase | What it usually means |
|---|---|
| "We controlled for everything we had" | Everything-thrown-in regression; mediators and colliders almost certainly included; no identification argument exists |
| "The effect disappears once we control for [engagement/usage/activity]" | They probably controlled a mediator and subtracted the mechanism |
| "Among users who [converted / completed onboarding / renewed]..." | Implicit collider conditioning via dataset filter |
| "Surprisingly, in segment S the effect reverses" | Possible real heterogeneity — or a low-birthweight-paradox collider; ask what causes membership in S |
| "We used propensity score matching, so selection is handled" | Estimation dressed as identification; ask what's in the score and why that set blocks the backdoors |
| "With this much data, confounding washes out" | Sample size fixes precision, never identification; unmeasured U survives any N |
Meeting-ready questions
- What would the DAG have to look like for this claim to hold?
- Which arrows are you assuming don't exist?
- For each control: does it cause the treatment or outcome, and was it set before treatment?
- Was the sample filtered on anything downstream of treatment or outcome?
- What's the unmeasured-confounder story, and why doesn't it apply here?
Aligned to the Cunningham’s Mixtape, Facure’s Brave and True, Shalizi’s ADAfaEPoV, and Chernozhukov et al.’s CausalML · last reviewed 2026-07-08.
Make this cheat sheet yours
Personalize this sheet — focus it however you study, or build one from the exact questions you keep getting wrong.