Open apoorvalal opened 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
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.
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
fromcheck_data
onwards.Did you consider alternatives to the proposed solution. If yes, please describe
No response
Comments, context or references
No response