2  The Causal Hierarchy and Three Strata

Status: In Progress
v0.4

2.1 Introduction

NotePart I — Structural

Stratum. Causal mechanisms, formal constraints, graphs, invariances, and identification.

Levels. L1–L3 on static (then lagged) structure; Ch. 9 opens the bridge to time. Levels are query types, not ontological strata.

Deferred. ODE/SDE becoming (Part II); cohort LMTP/TMLE (Part III); full CDM synthesis (Part IV).

How to read. Depth-first: declare what variables refer to and what may influence what before unfolding or estimating. Keep causal influence separate from constitution, participation, measurement, and temporal order. Discovery (Ch. 05b) is a centripetal interlude (Observable → Structural), labelled as such.

The Introduction argued that a complex system is a process of becoming, not a static thing, and that scientific models must separate what we observe, what we do, and what we imagine for a specific unit (Whitehead 1978; Pearl 2009). This chapter makes that programme operational. We work with a three-by-three conceptual grid that the rest of the book will keep returning to:

  1. Three strata: where modelling assumptions live (structure, dynamics, measurement).
  2. Three levels of Reason: which causal queries those assumptions support (association, intervention, counterfactual).

The process stance fixes what we model: unfolding systems in which recipient-specific uptake may be glossed as prehension. The strata clarify where assumptions sit. The levels clarify which queries are feasible under those assumptions. What data show differs from what we do to a system, and Pearl’s hierarchy makes that separation mathematical (Pearl 2009; Bareinboim 2026). Graphs hold selected dependencies sufficiently still for \(do(\cdot)\) and shared-\(\mathbf{u}\) questions to be well posed; their stability is a modelling achievement, rather than a claim that the represented process has ceased to change.

Before assigning a causal interpretation, declare each variable’s referent, value type, temporal support, descriptive scale, and model role. If an object is said to endure, also state the identity criterion and the event that constitutes it. For each arrow, distinguish causal influence from constitution, participation, measurement, or temporal order. For each intervention, state its target, timing, duration, replacement rule, available information, and the mechanisms assumed unchanged. These declarations make the philosophical distinctions operational; they do not turn them into additional empirical evidence.

NotePackages implement the examples

This book’s framing is general: structure, dynamics, and observation for complex dynamical systems. Executable examples use a Julia stack with four clear owners:

The book is not package documentation; manuals and changelogs live in the repositories. Published executable claims prefer released versions or a publicly pinned commit tested in the book environment; local tips and /dev/ pages alone are not reproducibility references.

Code keeps Pearl / targeted-learning names for identification and estimation (Intervention, do_surgery, backdoor_adjustment_set, run_lmtp_grid, run_mediation, …); process vocabulary (prehension, concrescence, occasion, enduring) stays in prose and in the Glossary. How declared time (support, value representation, referent, graph kind) maps to package fields is the subject of Chapter 9 and Concept Reference Tables 4 and 8.

Package source as notation. Where the implementation is the explanation (graph surgery, path blocking, shared-\(U\) counterfactuals), chapters may show a short, syntax-highlighted excerpt from the owned packages in a “From …jl” callout, alongside executed API chunks. Those excerpts are curated under snippets/package-source/; they are not a substitute for the Documenter manuals.

2.2 Three Strata: Structural, Dynamical, Observable

As in the Introduction’s geological section, we organise assumptions into three modelling roles. Observable records are directly given to the analyst, whereas dynamical and structural claims are usually latent or assumed, but the roles are not mutually exclusive ontological layers. We write each role in the assignment notation of structural causal models (Peters et al. 2017; Pearl 2009), with \(\coloneqq\) marking a mechanism rather than a mere equality of numbers, and note the usual probabilistic reading alongside.

Structural. What may influence what; which relations are treated as invariant under the interventions we contemplate; how identification proceeds once those claims are stated. Let \(G\) be a directed graph on \(d\) endogenous variables \(V = (V_1,\ldots,V_d)\) (the quantities the model explains). For each \(j\), write \(\mathrm{pa}_G(V_j)\) for the parents of \(V_j\) in \(G\) (nodes with an edge into \(V_j\)). The Structural stratum is the family of assignments

\[ V_j \coloneqq f_j\bigl(\mathrm{pa}_G(V_j),\, U_j\bigr), \qquad j = 1,\ldots,d, \]

where \(f_j\) is the mechanism for \(V_j\) and \(U_j\) is that node’s exogenous variable (an input whose generating causes are outside the model). A realised value \(u_j\) is one draw from that variable; the variable and its realisation must not be conflated. A counterfactual additionally declares how draws are coupled across worlds. Collect \(U = (U_1,\ldots,U_d)\) and a law \(P_U\) on those variables. Equivalently, one writes the model as \(\mathcal{M} = (G, F, P_U)\) with \(F = \{f_j\}_{j=1}^d\). The operator \(do(V_k = v)\) replaces the \(k\)-th assignment by the constant \(V_k \coloneqq v\) (for a chosen value \(v\)) and leaves the rest of \(F\) untouched. Probabilistically, the graph and its local Markov assumptions support a factorisation \(P(v) = \prod_j P(v_j \mid \mathrm{pa}_G(v_j))\); faithfulness is a separate assumption about which conditional independences are visible in the graph. Intervention changes the assignment for \(V_k\) and therefore removes its incoming causal dependencies in the intervened model.

Structural organisation is therefore a mode of explanation rather than another item in the event history. This is formal causation: a graph, symmetry, conservation law, or admissible mechanism class can condition what a trajectory may become without becoming an additional parent in \(G\). Actual occasions carry temporal efficacy; an enduring object is constituted through a historically ordered society of occasions, while its recurrent influence is represented through mechanisms. Formal constraint, efficient mechanism, realised trajectory, and recorded observation answer different questions, and the rest of the book keeps their roles distinct.

Dynamical. How latent state unfolds through time. Index occasions by \(t = 0,1,2,\ldots\). Let \(X_t\) be the latent state at \(t\), \(A_t\) a treatment or action available at \(t\), and \(C\) a (possibly vector-valued) context or confounder treated as fixed on the horizon of interest. Write \(U^x_{t+1}\) for the exogenous draw that enters the next-state mechanism. The Dynamical stratum is the transition

\[ X_{t+1} \coloneqq f\bigl(X_t,\, A_t,\, C,\, U^x_{t+1}\bigr), \]

where \(f\) is the state-transition map (in continuous time, the right-hand side of an ODE or SDE plays the same role). Which arguments of \(f\) are allowed is fixed by the Structural graph; \(f\) says how those parents become the next state. Probabilistically this is a Markov kernel \(P(x_{t+1} \mid x_t, a_t, c)\). Feedback and attractors live in the geometry of iterating \(f\).

Observable stratum. How an already realised process is recorded as data. Let \(Y_t\) be the observation (assay, sensor reading) at \(t\), \(h\) the observation map, and \(U^y_t\) the measurement-side exogenous draw. The Observable stratum is

\[ Y_t \coloneqq h\bigl(X_t,\, C,\, U^y_t\bigr). \]

An assay \(Y_t\) is an observation of latent state, not the latent state itself. A physical measurement may also interact with the system, but observation and prehension are distinct modelling relations. Probabilistically one writes an observation model \(P(y_t \mid x_t, c)\). Estimators, missingness mechanisms, and diagnostics act on realisations of \(Y\) (and of recorded \(A\), \(C\)); they do not rewrite \(f\) unless we deliberately revise the Structural or Dynamical claim. Incomplete observation adds response indicators \(R\) to the model, gaps timed along the process, and missing as the recorded token for an unavailable value. That stratum × level organisation is developed in Observational Methods and tabulated in the Concept Reference.

Assumptions constrain what can be learned. Structural claims restrict the dynamical laws we are willing to entertain; dynamical claims restrict which patterns in data look plausible rather than miraculous. The data alone do not uniquely determine a model class: many graphs \(G\) and many transitions \(f\) can fit the same observational surface (Pearl 2009).

2.2.1 Linking the strata

The three assignments already fit together as one joint process (Durbin and Koopman 2012; Särkkä 2013):

\[ \begin{aligned} V_j &\coloneqq f_j\bigl(\mathrm{pa}_G(V_j),\, U_j\bigr) && \text{(Structural assignment)}, \\ X_{t+1} &\coloneqq f\bigl(X_t,\, A_t,\, C,\, U^x_{t+1}\bigr) && \text{(Dynamical becoming)}, \\ Y_t &\coloneqq h\bigl(X_t,\, C,\, U^y_t\bigr) && \text{(Observable measurement)}. \end{aligned} \]

Symbols are as above: \(V_j\) endogenous on \(G\), \(X_t\) latent state, \(A_t\) treatment, \(C\) context, \(Y_t\) observation, \(U_j\) / \(U^x_{t+1}\) / \(U^y_t\) exogenous draws, and \(f_j\), \(f\), \(h\) the corresponding mechanisms. In the state-space reading used throughout the book, \(X_t\) is Dynamical latent state, \(Y_t\) the Observable assay, and \(G\) together with \(\{f_j\}\), \(f\), and \(h\) are Structural claims about which parents enter which assignment. Later chapters thicken each layer (full SCMs, ODEs under \(do(\cdot)\), filtering and targeted estimation) without replacing this three-stratum assignment.

2.3 Three Levels of Reason: The Causal Hierarchy

Pearl’s causal hierarchy organises queries by what they require from a model (Pearl 2009; Bareinboim and Pearl 2016; Bareinboim 2026). The Introduction described three levels: perceiving what is, acting upon it, and imagining what might have been for a specific unit. Here we fix the mathematical content of each level. Prehension is used only where recipient-specific incorporation is relevant; it is not a synonym for the hierarchy itself.

2.3.1 Level 1: Association (Seeing)

Association asks what happens if we observe a variable of interest. Write \(A\) for a recorded treatment (or exposure) and \(Y\) for an outcome. The objects are conditional distributions, correlations, and predictive models of the form \(P(Y \mid A=a)\). The information used is whatever the measurement process already recorded. Association is indispensable for forecasting from observed history; it does not, by itself, answer what would happen if we changed \(A\). Treating a well-calibrated predictor as a policy engine is the characteristic L1 mistake on the next rung.

2.3.2 Level 2: Intervention (Doing)

Intervention asks what happens if we do \(A\). The objects are interventional distributions \(P(Y \mid do(A=a))\). The operator \(do(\cdot)\) replaces the structural assignment for the intervened variable and lets consequences propagate through the remaining mechanisms. That replacement presupposes causal structure: without a graph (or an equivalent set of identifying assumptions), there is no well-defined surgery (Pearl 2009). Confounding, selection, and mechanism change are the hazards that separate L2 from naive conditioning.

2.3.3 Level 3: Counterfactual (Imagining)

Counterfactuals ask what this unit would have seen for \(Y\) if \(A\) had differed. The objects are unit-level outcomes \(Y^{do(a)}(\mathbf{u})\): the value of \(Y\) under \(do(A=a)\) when exogenous values are held fixed under a declared cross-world coupling. This is a modelling assumption, not a fact inferred from organismal identity; abduction yields a posterior over compatible values rather than a uniquely recovered \(\mathbf{u}\). A full SCM (or CDM) is required; population averages that redraw from \(P_U\) answer an interventional question, not a unit-level one. The process interpretation of novelty is discussed in the glossary, but does not change these semantics.

2.3.4 Strata × levels

The two grids are not interchangeable. Strata locate assumptions; levels locate queries. The same Dynamical transition \(f\) can support L1 forecasts from observed history, L2 simulations under \(do(\cdot)\), or L3 replays under a declared shared-noise coupling. Each query demands a different reading of the exogenous draws and of which assignments are held open.

L1 Association L2 Intervention L3 Counterfactual
Structural Graph optional for prediction Graph / mechanisms required Full SCM with \(U\)
Dynamical Forecast from observed history Simulate under \(do(\cdot)\) Replay trajectory with fixed \(\mathbf{u}\)
Observable Fit \(P(Y \mid \cdot)\) from data Estimate interventional targets Infer \(\mathbf{u}\), then counterfactual \(Y\)

Association can proceed from data alone. Intervention requires a causal model. Counterfactuals additionally require a declared cross-world coupling and make the strongest claims; abduction generally returns a posterior rather than a uniquely known exogenous draw (Pearl 2009).

2.4 Minimal CDM spine

The two grids jointly structure a single generative object: a Causal Dynamical Model (CDM). Full notation and simulation live in Chapter 28; the Introduction CDM teaser is the same host-immunity sketch at two occasions. Keep this compact spine in view while reading Parts I–III:

\[ \begin{aligned} X_{t+1} &\coloneqq f(X_t, A_t, C, U^x_{t+1}), \\ Y_t &\coloneqq h(X_t, C, U^y_t). \end{aligned} \]

Structural. Parents of \(X_t\), \(A_t\), and \(Y_t\), and the meaning of \(do(A_t=a)\): replace the assignment for \(A_t\), leave the rest of \((G,F)\) in place unless a stronger claim about rewiring is stated.

Dynamical. The transition \(f\) unfolds latent state through time. Feedback and attractors appear when \(f\) couples variables across occasions; the spine already admits that possibility.

Observable. The map \(h\) yields what is measured. The exogenous draws \(U^x\) and \(U^y\) are generative inputs to the assignments, not mere residual error; under L3 the realised \(\mathbf{u}\) is held fixed under the declared cross-world coupling.

L2 sets \(A\) by intervention and integrates forward (typically with fresh exogenous draws). L3 uses an explicitly declared cross-world coupling, commonly holding an exogenous realisation \(\mathbf{u}\) fixed while replaying under a different \(do(\cdot)\). Later chapters thicken this spine (networks, partial observation, sequential policies) without replacing it.

2.5 Why the two grids matter

Latent states. Without the three-strata view, latents are merely “variables we did not record.” With it, they are internal quantities evolved by the dynamical model and mapped to data by \(h\). Filtering and smoothing infer present or past state; they leave intact the distinction between Dynamical becoming and Observable assay (Durbin and Koopman 2012).

Counterfactuals. Shared \(\mathbf{u}\) is a declared cross-world coupling, not an identity criterion. Changing \(do(\cdot)\) under that coupling yields an L3 comparison within the same \((G,F)\). Averaging over a new draw from \(P_U\) answers an interventional (L2) question, not a unit-level (L3) one.

Interventions. \(do(A=a)\) installs a new local assignment for that channel and lets consequences run forward through \(f\). Under ordinary use we keep the same \((G,F)\) and change how one mechanism feeds the next time steps. When the characteristic itself shifts (rewiring, a new mechanism class, a regime change), we are negotiating which model class we assume; that is a stronger claim than a single \(do(\cdot)\) on an otherwise fixed CDM. The observed distribution typically underdetermines structure: many graphs can fit the same data (Pearl 2009).

2.6 Conditional vs interventional forecasting

In longitudinal settings the distinction between seeing and doing is sharp (Robins 1986; Robins et al. 2000). Conditional forecasting answers \(P(Y_{t+1} \mid Y_{1:t}, A_t = a)\): we observe that treatment took the value \(a\) (L1). Interventional forecasting answers \(P(Y_{t+1} \mid Y_{1:t}, do(A_t = a))\): we set treatment to \(a\) (L2). These coincide only when treatment assignment is unconfounded. Feedback, partial observability, and time-varying confounding push the analysis to Levels 2 and 3 explicitly; g-methods, LMTP, and related estimators in Part III are the observational counterparts of that demand (Robins 1986; Hernán and Robins 2020; Díaz et al. 2023).

2.7 Worked example: a confounded dyad

We ground the grids in a tiny SCM: treatment \(A\), outcome \(Y\), confounder \(C\). This is the one-step cousin of the Introduction’s host-immunity CDM (\(A\) as treatment or vaccine, \(Y\) as assay, \(C\) as confounder); the time-indexed unroll returns in Chapter 28. The graph is the classic backdoor motif:

\[ C \rightarrow A, \qquad C \rightarrow Y, \qquad A \rightarrow Y. \]

Structural stratum. The graph and mechanisms are

\[ \begin{aligned} C &\coloneqq U^c, \\ A &\coloneqq \mathbf{1}\{\gamma C + U^a > 0\}, \\ Y &\coloneqq \beta_A A + \beta_C C + U^y, \end{aligned} \]

with \(U^c\), \(U^a\), and \(U^y\) independent standard-normal exogenous draws. The edge \(A \rightarrow Y\) is the causal dyad of interest; \(C\) opens the backdoor \(A \leftarrow C \rightarrow Y\).

Dynamical stratum. Here “dynamics” is a single evaluation of the assignments. There is no time index yet; that arrives when we unroll the same motif across occasions.

Observable stratum. We observe \((A,Y)\) and, when adjusting, \(C\). The exogenous draws remain latent; for L3 below, a realised \(\mathbf{u} = (U^c, U^a, U^y)\) is a declared cross-world coupling rather than a criterion of identity.

2.7.1 Visualising the confounded dyad

Figure 2.1: Tiny confounded SCM: the causal dyad \(A \rightarrow Y\) with good control \(C\) on the backdoor \(A \leftarrow C \rightarrow Y\) (Cinelli et al. 2024). Dashed thinking: \(C\) is often only partially observed; here we treat it as known when adjusting.

2.7.2 Computing the three levels

include(joinpath(dirname(Base.active_project()), "scripts", "ensure_packages.jl"))
@auto_using Random Statistics

# Structural / dynamical parameters
β_A = 1.0    # causal effect of A on Y
β_C = 2.0    # confounding path C → Y
γ = 1.5      # C → A

"""
    draw_exogenous(rng) -> NamedTuple

Draw one unit's exogenous inputs `(Uᶜ, Uᵃ, Uʸ)`; holding them fixed supplies the declared L3 coupling.
"""
function draw_exogenous(rng)
    (Uᶜ = randn(rng), Uᵃ = randn(rng), Uʸ = randn(rng))
end

"""
    simulate_unit(u; a_do=nothing) -> NamedTuple

Evaluate structural assignments for one unit.
If `a_do` is set, replace the mechanism for `A` by `do(A = a_do)`.
"""
function simulate_unit(u; a_do::Union{Nothing,Int} = nothing)
    C = u.Uᶜ
    A = a_do === nothing ? Int(γ * C + u.Uᵃ > 0) : a_do
    Y = β_A * A + β_C * C + u.Uʸ
    return (C = C, A = A, Y = Y, u = u)
end

n = 20_000
rng = MersenneTwister(2026)

# Factual population (observational regime)
units = [simulate_unit(draw_exogenous(rng)) for _ in 1:n]

# L1: association — E[Y | A = a] from observations alone
μ_L1 = (a0 = mean(x.Y for x in units if x.A == 0),
         a1 = mean(x.Y for x in units if x.A == 1))

# L2: intervention — E[Y | do(A = a)]
μ_L2 = (a0 = mean(simulate_unit(draw_exogenous(rng); a_do = 0).Y for _ in 1:n),
         a1 = mean(simulate_unit(draw_exogenous(rng); a_do = 1).Y for _ in 1:n))

# L3: counterfactual for one organism — fix declared exogenous draws and vary treatment
u_star = draw_exogenous(MersenneTwister(7))
factual = simulate_unit(u_star)                         # whatever A nature assigned
cf_flip = simulate_unit(u_star; a_do = 1 - factual.A)   # same u, flipped A

assoc_contrast = μ_L1.a1 - μ_L1.a0
interv_contrast = μ_L2.a1 - μ_L2.a0
true_effect = β_A  # from the structural assignment for Y

println("L1 associative contrast E[Y|A=1]-E[Y|A=0] ≈ ", round(assoc_contrast; digits = 3))
println("L2 interventional contrast E[Y|do(A=1)]-E[Y|do(A=0)] ≈ ", round(interv_contrast; digits = 3))
println("True structural effect β_A = ", true_effect)
println("L3 unit: factual A=$(factual.A), Y=$(round(factual.Y; digits=3)); ",
        "counterfactual do(A=$(cf_flip.A)), Y=$(round(cf_flip.Y; digits=3))")
L1 associative contrast E[Y|A=1]-E[Y|A=0] ≈ 3.627
L2 interventional contrast E[Y|do(A=1)]-E[Y|do(A=0)] ≈ 1.025
True structural effect β_A = 1.0
L3 unit: factual A=1, Y=4.15; counterfactual do(A=0), Y=3.15
Figure 2.2: Three levels on the confounded dyad. Left: observational means \(E[Y \mid A]\) (L1) versus interventional means \(E[Y \mid do(A)]\) (L2); confounding inflates the associative contrast. Right: one unit’s factual \(Y\) and counterfactual \(Y^{do(1-A)}(\mathbf{u})\) under a declared shared-\(\mathbf{u}\) coupling (L3).

L1 (Seeing). From \((A,Y)\) alone we estimate \(E[Y \mid A=1] - E[Y \mid A=0]\). Because \(C\) drives both treatment and outcome, this associative contrast is larger than the structural effect \(\beta_A\): confounding inflates the observational gap.

L2 (Doing). Under \(do(A=a)\) we replace the assignment for \(A\), leaving \(C \coloneqq U^c\) and \(Y \coloneqq \beta_A A + \beta_C C + U^y\) unchanged. The interventional contrast recovers \(\beta_A\) (Monte Carlo noise aside). Graph surgery answers the policy question that association cannot.

L3 (Imagining). For one unit we fix the realised exogenous draws \(\mathbf{u}\) under a declared coupling and replay with flipped \(A\). The factual and counterfactual \(Y\) are alternative modelled actualisations for the same unit: they share stipulated generative context while treatment receives a different local assignment (Pearl 2009). The comparison does not claim that a completed actual occasion is literally constituted twice; it states the counterfactual convention required by the SCM.

2.7.3 Closing the chapter

The chapter’s claim is modest and central. We model systems as becoming, organised by strata (where assumptions sit) and levels (which queries those assumptions support). On a confounded dyad, the associative and interventional contrasts come apart: conditioning on observed \(A\) is not the same enquiry as setting \(A\) by \(do(\cdot)\). Counterfactuals require a declared coupling of exogenous draws; abduction normally leaves uncertainty about those draws. Later chapters lift this one-step SCM into time, networks, and partial observation along this coverage heuristic, without treating it as a forced three-by-three classification.

The next chapter isolates the causal dyad as the primary structural unit, before Chapter 3 composes dyads into chains, forks, and colliders.

2.8 Further Reading

  • Pearl (2009): Causality: foundational treatment of the hierarchy
  • Peters et al. (2017): Elements of Causal Inference: bivariate cause–effect models and independent mechanisms
  • Bareinboim and Pearl (2016): causal inference and data fusion
  • Bareinboim (2026): Causal AI (hierarchy and modern framing)
  • Whitehead (1978): Process and Reality: process orientation (terms glossed in the Introduction)
  • Robins (1986); Robins et al. (2000); Hernán and Robins (2020); Díaz et al. (2023): longitudinal confounding, interventions, and LMTP
  • Durbin and Koopman (2012); Särkkä (2013): state-space / latent dynamics
  • Strogatz (2014); Scheffer et al. (2009): nonlinear dynamics, attractors, and early-warning language

2.9 References