Guide · foundations
Writing your beliefs down
The objection to causal graphs is always the same: “you are just assuming the answer.” It has it exactly backwards. Everyone analysing data is assuming a causal structure — choosing which variables to include is nothing else. A graph is the version you can be argued with about.
What a graph is
Arrows are claims, and the missing ones are the strong claims
An arrow A → B says: intervening on A could change
B. That is a weak, cheap claim, and you should be generous with
them.
The absence of an arrow says: it could not, at all, by any route not already drawn. That is a strong claim, and it is where all the content is. A graph with an arrow between every pair of variables assumes nothing and is worth nothing; it will identify no effect at all. Every conclusion you can draw comes from an arrow you were willing to leave out.
This is why the graph is the honest object. A regression with six covariates in it makes exactly the same class of claims — it just makes them implicitly, in the choice of those six, where nobody can see them to disagree.
Draw it before you see the estimate
A graph drawn after a disappointing result is not a model, it is a rationalisation. axiom asks for the graph before it will fit anything, and hashes it — so the structure the answer rests on is the one that was believed beforehand. See provenance.
It is not a diagram of your dataframe
Variables you never measured belong on the graph.
They are usually the most important nodes on it, and marking one
unmeasured is how axiom comes to say “this is not identified, and
here is the thing you would need”.
How to draw one
Four questions, in this order
What am I proposing to change, and what do I care about?
Those two nodes exist before anything else. If you cannot name them, the question is not ready to be a causal one — see the previous guide.
In the data I have, what decided the treatment's value?
This is the question that finds confounders, and it is a question about process, not about correlation. Who chose? On what basis? If any part of that answer also plausibly affects the outcome, it is a node with two arrows out of it.
What else moves the outcome, and is it connected to the treatment?
Things that affect the outcome but nothing else are harmless — they cost precision, not validity. It is the ones with a path back to the treatment that matter, which is why the previous question comes first.
What decided who is in the dataset at all?
The most commonly skipped question, and the one that produces collider bias before any analysis begins. Survivors, responders, patients who came back, customers who did not churn: if membership depends on both treatment and outcome, that is a node too.
What it is worth
A graph is testable, and it pays for itself twice
It tells you what to condition on
Rather than choosing covariates by intuition or by stepwise
search, you derive them. On the identify page the
licensed set is Z, and it is
derived from the graph before any data is touched. When more than one valid set
exists, that is useful too — fitting both is a check on the graph rather than a
choice between answers.
It tells you when to stop
A graph can say no route exists. That verdict — which arrives before fitting, costs nothing, and names the variable that would fix it — is the single highest-value output in causal work, and no amount of modelling effort substitutes for it.
It makes predictions you can check
A graph implies conditional independences: if it is right, certain correlations must vanish once certain variables are held fixed. Those are testable against the data you already have. A graph that fails its own implied independences is refuted — by you, before a reviewer does it.
What a passing test does and does not mean
Several different graphs imply the same
independences, so passing does not single yours out. It rules out a class of
wrong ones, which is what any honest test does. axiom's
axiom.discover works this space directly, returning the family of
structures the data cannot distinguish rather than one confident answer.
Common objections, answered
Three things people say, and what to say back
axiom.dynamics handles cyclic and time-indexed structures, and a
cluster-DAG lets you group nodes you do not need to resolve individually.
→