Skip to content

Conversation

nparent1
Copy link
Contributor

@nparent1 nparent1 commented Aug 25, 2025

PR to add support for the doubly robust estimator, with an example notebook. This PR addresses issue #407.

References:

Michele Jonsson Funk, Daniel Westreich, Chris Wiesen, Til Stürmer, M. Alan Brookhart, Marie Davidian, Doubly Robust Estimation of Causa Effects, American Journal of Epidemiology, Volume 173, Issue 1 April 2011, Pages 761-767, https://doi.org/10.1093/aje/kwq439

Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
@nparent1 nparent1 marked this pull request as ready for review August 27, 2025 04:21
@nparent1
Copy link
Contributor Author

tagging @amit-sharma or @bloebp for review!

Signed-off-by: Nicholas Parente <[email protected]>
Signed-off-by: Nicholas Parente <[email protected]>
:param propensity_score_model: Model used to compute propensity score.
Can be any classification model that supports fit() and
predict_proba() methods. If None, LogisticRegression is used
:param propensity_score_column: Column name that stores the
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note the 'regression_estimator' argument accepts a RegressionEstimator, whereas the 'propensity_score_model' argument accepts a propensity score model directly.

This is because it seemed more natural to let the user pass in a propensity score model directly, rather than a PropensityScoreEstimator, given most of the arguments, and all of the subclasses of the PropensityScoreEstimator class would be unneeded here (there would be no reason to pass in a PropensityScoreMatchingEstimator vs a PropensityScoreWeightingEstimator; the underlying propensity score model is working the same in all subclasses). Thus, it seemed more straightforward to just have the user pass in directly here the arguments that would be sufficient to handle the propensity score stage.

On the other hand, it seemed fair to use an argument of type RegressionEstimator for the regression stage, since a user may want to use a linear model, a glm, or some other future sub-class of the RegressionEstimator. In other words, the subclasses of RegressionEstimator may actually have their own constructors, that we wouldn't want to generalize here.

@nparent1
Copy link
Contributor Author

Hello! Gentle bump that this PR is ready for review. Let me know if there is someone else I should tag!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant