Skip to main content

PSM — Propensity Score Matching

PSM (Propensity Score Matching) evaluates the impact of an intervention on observational data by matching each treated unit with a control unit that has a similar propensity score — the estimated probability of participation given observed variables. The goal is to mimic a randomized experiment and reduce selection bias on observables.

Key assumption

PSM relies on selection on observables (CIA): every factor affecting both participation and outcome is observed. If there are unobserved confounders, PSM remains biased (unlike IV/DiD, which partly address unobservables).


Workflow

The propensity score p(X)=P(treat=1X)p(X) = P(\text{treat}=1 \mid X) is estimated by Logit/Probit.


Running in EcoLab

  1. Modeling module → Causal inference family → PSM.
  2. Declare the treatment, outcome, and covariates; choose the matching algorithm.
  3. Run; check balance + common support; read the ATT; export the replication code.

Replication code

* ── PSM: nearest-neighbor matching ────────────────
* Install: ssc install psmatch2
psmatch2 treated x1 x2 x3, outcome(y) ///
neighbor(1) caliper(0.05) common

* ── Balance check ─────────────────────────────────
pstest x1 x2 x3, both graph

* ATT is reported in the psmatch2 output

Limitations

  • Does not handle unobserved confounders.
  • Sensitive to the matching algorithm; balance must be checked carefully.

Video tutorial

Video Tutorial: Guide to running PSM in EcoLab

See also