axiom

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

01

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.

02

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.

03

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.

04

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

“I don't know the true graph.” Nobody does. Draw the one you believe, then draw the two plausible ones you fear, and check whether the decision changes across all three. If it does not, the uncertainty was not load-bearing. If it does, you have discovered what to go and measure — which is a result. →
“This is just assumptions.” Yes — the same assumptions the regression was making invisibly. The graph does not add assumptions, it exposes them. Ask the objector which arrow they disagree with; that conversation is productive, and the one about covariate lists never is. →
“My problem is too complicated for a DAG.” Usually it is too complicated not to have one. Feedback loops, time, clusters and dynamics all have standard treatments — axiom.dynamics handles cyclic and time-indexed structures, and a cluster-DAG lets you group nodes you do not need to resolve individually. →