DoubleML/doubleml-for-py

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

apoorvalal opened this issue ยท 4 comments

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:

  • ATT isn't a well defined concept for multiple-treatments (or at the very least one has to stipulate the subpopulation that is allowed to contribute to the estimator of $E[Y^({0}) \mid W = 1]$, typically the 'pure control' (0-valued by convention) subpopulation might be reasonable)

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

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

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.

@apoorvalal, I have added a new class DoubleMLAPO for average potential outcomes.
Maybe you would like to take a look at the current development version of the documentation?

Any feedback is highly appreciated.

I will close this issue as the feature is implemented in #250