Skip to content

Estimation

Methods for estimating causal effects after identification.

Backdoor Estimators

Estimator Type Best For Key Parameters
LINEAR_REGRESSION Parametric Simple, interpretable None
PROPENSITY_SCORE_MATCHING Matching Few covariates, balance needed n_neighbors, caliper
PROPENSITY_SCORE_WEIGHTING Weighting Many covariates stabilized, trim_quantiles
DOUBLY_ROBUST Augmented IPW Default recommendation propensity_model, outcome_model
TARGETED_MAXIMUM_LIKELIHOOD TMLE Efficient, asymptotic initial_estimator
CAUSAL_FOREST ML / CATE Heterogeneous effects n_estimators, min_samples_leaf
DOUBLE_ML Orthogonal ML High-dim confounders ml_g, ml_m

Choosing an Estimator

Is treatment effect homogeneous?
├── Yes → linear_regression, doubly_robust (ATE)
└── No (need CATE) → causal_forest, double_ml, or EconML metalearners

Are covariates high-dimensional?
├── Yes → double_ml, causal_forest
└── No → any

Need inference (CI, p-values)?
├── Yes → doubly_robust, tmle, causal_forest (with honest forest)
└── Must be simple → linear_regression

EconML CATE Estimators

Metalearner Description When to Use
T_LEARNER Separate models for T=0, T=1 Simple, sparse data
S_LEARNER Single model with T as feature Strong overlap, interactions
X_LEARNER Learns treatment/control effects separately Many control, few treated
R_LEARNER Residual-on-residual (Robinson) General purpose, orthogonality
DR_LEARNER Doubly robust residual Best overall properties
from causal_toolkit.wrappers import EconMLWrapper
from causal_toolkit.core.base import EstimatorType

econml = EconMLWrapper(
    data=df,
    treatment="treatment",
    outcome="outcome",
    covariates=["X1", "X2", "X3"],
    effect_modifiers=["X1", "X2"]  # CATE varies by these
)

# Get CATE
cate = econml.estimate_cate(EstimatorType.CAUSAL_FOREST_CATE)

# Get ATE (average of CATE)
ate = econml.estimate_ate(EstimatorType.CAUSAL_FOREST_CATE)

Instrumental Variables

Estimator Method
TWO_STAGE_LS 2SLS, linear first/second stage
DEEP_IV Deep learning for complex IV
ORTHO_IV Orthogonal IV (Chernozhukov)

Estimator Parameters

estimation:
  method: "doubly_robust"
  params:
    propensity_model: "logistic"        # or sklearn estimator
    outcome_model: "linear_regression"  # or sklearn estimator
    cv: 5                               # cross-validation folds

For causal_forest:

estimation:
  method: "causal_forest"
  params:
    n_estimators: 1000
    min_samples_leaf: 10
    max_depth: 10
    honest: true        # Use honest forest for valid inference
    random_state: 42

Diagnostics

estimate = dowhy.estimate(EstimatorType.DOUBLY_ROBUST)
print(estimate.diagnostics)
# {
#   "propensity_model_score": 0.72,
#   "outcome_model_score": 0.65,
#   "effective_sample_size": 847,
#   "weight_summary": {"mean": 1.0, "std": 0.3, "max": 5.2}
# }