THE PROPENSITY SCORE

One number that stands in for every confounder. Rosenbaum & Rubin proved that e(x)=P(T=1 | X=x) is a balancing score: condition on that scalar and treatment becomes independent of the whole covariate vector. Adjust on the one number, and the bias from all of X falls away.

source Rosenbaum, P.R. & Rubin, D.B. (1983), “The Central Role of the Propensity Score in Observational Studies for Causal Effects,” Biometrika 70(1), 41–55. Rendered, not quoted — the engine below recomputes the balancing property and the IPW identity live.

Blue team · builds & defends
3
The Model

A discrete confounded SCM

A confounder X∈{0,1,2} drives both assignment and outcome — the classic observational trap. Structural equations, coefficients fixed:

X ∼ P = [0.5, 0.3, 0.2]
T ∼ Bernoulli( e(X) ),  e = [0.3, 0.3, 0.6]
Y = a + b·T + c·X + ε,  a=1, b=2, c=3

Everything downstream is exact: population expectations are enumerated over the three strata — no Monte-Carlo noise in the checks. The true causal effect is read from a do-intervention that replaces T’s equation with a constant.

5
The Lineage

the-potential-outcomes, made estimable

Neyman–Rubin gave us Y(1), Y(0) — but only one is ever observed. The the-backdoor-criterion says adjust on X to identify the effect. That can mean a high-dimensional X. This sphere is the compression: Rosenbaum & Rubin showed a scalar summary e(X) already carries all the adjustment X does. The neighbour’s potential outcomes become computable through one dimension.

7
The Witness

Live re-check

Recomputes the live IPW estimate against the true ATE and re-tests the balancing identity every render. Confirms green while the propensity is correct; flips red the instant window 6 mis-specifies it.

witness idle
The machine
4
in ↓ Data in

Strata, propensity, weights

The true propensity e(x) and the inverse-propensity weights it induces (treated: 1/e, control: 1/(1−e)):

xP(x)e(x)w·treatedw·control

Note x=0 and x=1 share e=0.3 though they differ in X — the level set the balancing property lives on.

weight
0
LIT The panel · the engine

Horvitz–Thompson via the propensity

ATÊ = E[ T·Y / e(X) − (1−T)·Y / (1−e(X)) ]

True effect from the do-intervention:

Live IPW estimate (uses the current propensity):

Balancing on shared-e group {0,1}:  P(X=0 | e=.3, T=1) = ,  P(X=0 | e=.3, T=0) =

Scalar-e adjustment =  ≡ full-X adjustment =  (one number does the work of all of X)

Fixed-seed Monte-Carlo check (N=200000):

estimate
8
out ↓ Data out

Proven result

With the correct propensity, the scalar e(X) balances X and IPW recovers the true effect exactly:

booting…
Red team · attacks & breaks
1
The Adversary

Where the score fails for real

WALL

The propensity is only a balancing score for the covariates you put in it. An unmeasured confounder U — a hidden common cause of T and Y — is invisible to e(X); no weighting fixes it. And when e(x)→0 or 1 for some stratum, positivity fails, weights explode, and the estimator’s variance blows up even though it stays “unbiased” on paper.

2
The Graveyard

Claims that died here

“Matching on the propensity score removes all confounding.”

→ Only measured confounding. Unobserved U survives untouched. assumes ignorability

“A more flexible propensity model is always safer.”

→ Over-fit e(x) pushes estimated scores toward 0/1, wrecking positivity and inflating variance.

“e(X) being scalar means you lose information.”

→ No — it is sufficient for adjustment. Window 0 shows scalar-e = full-X, exactly.

6
The Tamper

Mis-specify the propensity

Swap e(X) for a constant 0.5 that ignores X. The weights stop balancing; confounding leaks back in and IPW drifts off the true ATE. The witness (7) catches it.