metacausal.aggregation.fit_nuisance¶
- metacausal.aggregation.fit_nuisance(X, T, Y, fold_spec, propensity_model=None, outcome_model=None, propensity_trim=0.01, random_state=None, outcome_type=None)[source]¶
Fit nuisance models via cross-fitting and return out-of-fold predictions.
- For each fold j in fold_spec:
Clone and fit propensity model on the training indices.
Clone and fit outcome model on treated training units -> mu1 on test indices.
Clone and fit outcome model on control training units -> mu0 on test indices.
Clip propensity to [propensity_trim, 1 - propensity_trim].
For CrossFitSplit, all n positions are filled. For TrainAvgSplit, only fold_spec.test_indices[0] positions are filled; the rest remain np.nan.
- Parameters:
X (array of shape (n, p))
T (array of shape (n,)) – Binary treatment assignment (0 or 1).
Y (array of shape (n,)) – Observed outcome.
fold_spec (FoldSpec) – Output of CrossFitSplit.split() or TrainAvgSplit.split().
propensity_model (sklearn classifier or None) – Model for P(T=1|X). Must support predict_proba. Default: HistGradientBoostingClassifier.
outcome_model (sklearn regressor / classifier or None) – Model for E[Y|X, T]. Cloned separately for treated and control fits. For continuous Y, must be a regressor;
mu_hatis read frompredict(). For binary Y, must be a classifier withpredict_proba;mu_hatis read frompredict_proba(X)[:, 1].Noneselects an outcome-type-appropriate default (HistGradientBoostingRegressor or HistGradientBoostingClassifier).propensity_trim (float) – Clip propensity scores to [trim, 1-trim] to enforce overlap.
outcome_type ("continuous", "binary", or None) – How to interpret Y.
None(default) auto-detects from the value set of Y viametacausal.infer_outcome_type().
- Returns:
NuisanceEstimates with out-of-fold predictions. e_hat is already trimmed.
- Return type: