Skip to content

Causal inference estimators

CausalEstimate provides IPW, AIPW, TMLE, and propensity-score matching for observational data. All estimators share the same pattern: configure columns and effect type in the constructor, then call compute_effect(df).

Supported effect types

Estimator ATE ATT ATC RR RRT ARR
IPW ✓ ✓ ✓ ✓ ✓ ✓
AIPW ✓ ✓ ✓ ✓ ✓ ✓
TMLE ✓ ✓ ✓ ✓ ✓ ✓
Matching ✓* – – – – ✓*

ATE: average treatment effect · ATT: ATE on the treated · ATC: ATE on the controls · RR: risk ratio · RRT: risk ratio on the treated · ARR: absolute risk reduction.

* With a caliper, the matched population is strictly neither the full nor the treated population; interpret accordingly.

Continuous outcomes. ATE, ATT and ATC work for any numeric outcome in IPW, AIPW and TMLE; the risk-based effect types (RR, RRT, ARR) require a binary 0/1 outcome. TMLE rescales a continuous outcome and its predictions to [0, 1] using the observed min/max before targeting and maps the result back; pass y_bounds=(min, max) to use known bounds instead.

IPW — inverse probability weighting

Weights each observation by the inverse of its (estimated) probability of receiving the treatment it actually received. Only needs a propensity score column. Pass stabilized=True for stabilized weights.

from CausalEstimate.estimators import IPW

ipw = IPW(effect_type="ATE", treatment_col="treatment", outcome_col="outcome", ps_col="ps")
result = ipw.compute_effect(df)

AIPW — augmented IPW (doubly robust)

Combines the propensity score with outcome-model predictions. Consistent if either the propensity model or the outcome model is correctly specified.

from CausalEstimate.estimators import AIPW

aipw = AIPW(
    effect_type="ATE",
    treatment_col="treatment",
    outcome_col="outcome",
    ps_col="ps",
    probas_t1_col="predicted_outcome_treated",
    probas_t0_col="predicted_outcome_control",
)

TMLE — targeted maximum likelihood estimation

Doubly robust like AIPW, but updates the initial outcome predictions with a targeting step, which typically improves finite-sample behavior.

from CausalEstimate.estimators import TMLE

tmle = TMLE(
    effect_type="ATE",
    treatment_col="treatment",
    outcome_col="outcome",
    ps_col="ps",
    probas_t1_col="predicted_outcome_treated",
    probas_t0_col="predicted_outcome_control",
)

Matching

Estimates effects by comparing matched treated/control pairs on the propensity score. See Matching for the standalone matching functions and their options.

Weight clipping

IPW, AIPW and TMLE all accept clip_percentile (default 1, no clipping) and eps (default 1e-9). clip_percentile=0.99 clips inverse-probability weights at their 99th percentile, which tames extreme propensity scores at the cost of some bias. Set the same value on every estimator in a MultiEstimator so their results stay comparable.

Note that clipping through clip_percentile estimates the clipping cutoff on the data. This can bias the analytic standard errors returned by IPW, AIPW and TMLE, which treat the clipping cutoff as fixed. When setting clip_percentile < 1, it is recommended to use bootstrap inference through MultiEstimator with n_bootstraps > 1. Each resample re-runs the estimator and recomputes the cutoff, so the bootstrap standard error accounts for it.

See the API Reference for full signatures.