DoubleML / doubleml-for-py

DoubleML - Double Machine Learning in Python
https://docs.doubleml.org
BSD 3-Clause "New" or "Revised" License
445 stars 68 forks source link

[Feature Request]: Support for multiple discrete treatments in `doubleml.DoubleMLIRM` #245

Open apoorvalal opened 1 month ago

apoorvalal commented 1 month ago

Describe the feature you want to propose or implement

Would be nice to extend the DoubleMLIRM class to accommodate multiple discrete-valued treatments $w \in \mathcal{W}$, where the estimation primatives are the marginal counterfactual mean $Y^{(w)}$ under each treatment, and one can construct treatment effects as contrasts between them. The marginal mean construction is the same as in the binary treatment case

$$ \phi_i^{(w)} = \mu^{(w)}(x) + \frac{1(W_i = w)}{\pi^{w}(x)} \left(Y_i - \mu^{(w)}(x)\right) $$

which can be constructed at the unit level, and the subsequent analysis can be performed as usual (the binary influence function would be a special case where one constructs $\psi_i = \phi_i^{(1)} - \phi_i^{(0)} - \theta$ and takes the mean and variance for point estimate and standard error.


Nuances:

Propose a possible solution or implementation

This approach is implemented in Ed Kennedy's package, and I have a minimal implementation in this library. Wondering if there's interest in accommodating this use case (since this will involve changing IIRM from check_data onwards.

Did you consider alternatives to the proposed solution. If yes, please describe

No response

Comments, context or references

No response

PhilippBach commented 1 month ago

Thanks @apoorvalal for adding this feature request. We are working on an extension to the multi-treatment IRM model. Also thanks for the hint for the ATET in multi-treatment, makes sense 😄

We are currently working on various extensions including a change of the DoubleML interface to make it possible to better combine various DoubleML objects... The development is already pretty far but we are facing a couple of issues regarding parallel changes (new model, also docu updates etc). Maybe @SvenKlaassen can add more info to what extent multi-level treatment IRM is already possible with the dev version. Anyways, I think the refactoring will be completed in the next months.

We'll add an update and an example here

SvenKlaassen commented 1 month ago

Yes, i think this would be a great addition. The with the new DoubleMLFramework class it should be possible to substract two potential outcome estimates, such that an implementation for average potential outcomes $\mathbb{E}[Y(a)]$ for action/treatment $a\in A$, would be a first step. Then a simple class for multiple levels (like DoubleMLQTE, see https://github.com/DoubleML/doubleml-for-py/blob/main/doubleml/irm/qte.py) could handle the comparisons on different levels.