Mediation Analysis: Estimating natural direct and indirect effects#

Mediation analysis can be used to quantify the extent to which a causal influence is exerted through a specific pathway. DoWhy supports the estimation of the natural direct effect and the natural indirect effect:

Natural direct effect: Effect due to the path v0->y Natural indirect effect: Effect due to the path v0->FD0->y (mediated by FD0).

For more details, see Interpretation and Identification of Causal Mediation by Judea Pearl.

Using DoWhy’s effect estimation framework, we can perform a mediation analysis by adjusting the estimand_type argument accordingly:

Identification#

>>> # Natural direct effect (nde)
>>> identified_estimand_nde = model.identify_effect(estimand_type="nonparametric-nde",
>>>                                                 proceed_when_unidentifiable=True)
>>> print(identified_estimand_nde)
>>> # Natural indirect effect (nie)
>>> identified_estimand_nie = model.identify_effect(estimand_type="nonparametric-nie",
>>>                                                 proceed_when_unidentifiable=True)
>>> print(identified_estimand_nie)

Estimation#

>>> import dowhy.causal_estimators.linear_regression_estimator
>>> causal_estimate_nie = model.estimate_effect(identified_estimand_nie,
>>>                                             method_name="mediation.two_stage_regression",
>>>                                             confidence_intervals=False,
>>>                                             test_significance=False,
>>>                                             method_params = {
>>>                                                 'first_stage_model': dowhy.causal_estimators.linear_regression_estimator.LinearRegressionEstimator,
>>>                                                 'second_stage_model': dowhy.causal_estimators.linear_regression_estimator.LinearRegressionEstimator
>>>                                             })
>>> print(causal_estimate_nie)
>>> causal_estimate_nde = model.estimate_effect(identified_estimand_nde,
>>>                                             method_name="mediation.two_stage_regression",
>>>                                             confidence_intervals=False,
>>>                                             test_significance=False,
>>>                                             method_params = {
>>>                                               'first_stage_model': dowhy.causal_estimators.linear_regression_estimator.LinearRegressionEstimator,
>>>                                               'second_stage_model': dowhy.causal_estimators.linear_regression_estimator.LinearRegressionEstimator
>>>                                             })
>>> print(causal_estimate_nde)