Skip to main content
Back to Causal Inference

Causal Inference · Cheat Sheet

DAGs and What to Control

Tip: Use your browser's print function (Ctrl+P / Cmd+P) to save as PDF for offline study.

Cheatsheet: DAGs and What to Control

The three atomic structures

StructurePatternExampleRule
Chain (mediator)X → M → YFeature launch → engagement → revenueX and Y dependent; conditioning on M blocks the path. Never control M if you want the total effect of X.
Fork (confounder)X ← Z → YAdoption ← engagement → retentionX and Y dependent even with no causal link; conditioning on Z blocks the fake path. This is the one legitimate job of a control.
ColliderX → C ← YBeauty → stardom ← talentX 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 typeControl it?Why
Confounder (causes treatment AND outcome, pre-treatment)YesBlocks a backdoor path — the whole point of controlling
Pre-treatment cause of outcome onlyUsually fineNo backdoor to block, but harmless and can improve precision
Collider (caused by treatment and outcome, or by their causes)NeverOpens 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 variableNeverIt's a mediator, a collider, or collateral damage — determined after treatment means off-limits
Instrument (causes treatment only, no separate route to outcome)NoAdds nothing, can amplify remaining unobserved-confounder bias
Implicit filter ("among converters", "onboarded users only", employed-only, stopped drivers only)Watch outThe 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

  1. Draw the DAG. Treatment D, outcome Y, everything you believe causes either. Missing arrows are claims too — say them out loud.
  2. List every path from D to Y. Ignore arrow directions when tracing; you just need the routes.
  3. Sort the paths. Arrow leaves D first (D → ...) = causal path, leave it alone. Arrow enters D first (D ← ...) = backdoor, must be blocked.
  4. 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.
  5. 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

PhraseWhat 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

  1. What would the DAG have to look like for this claim to hold?
  2. Which arrows are you assuming don't exist?
  3. For each control: does it cause the treatment or outcome, and was it set before treatment?
  4. Was the sample filtered on anything downstream of treatment or outcome?
  5. 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.

Sign up free to create a personalized cheat sheet.