causalis.scenarios.multi_unconfoundedness.model

Module Contents

Classes

MultiTreatmentIRM

Interactive Regression Model for multi-treatment unconfoundedness.

API

class causalis.scenarios.multi_unconfoundedness.model.MultiTreatmentIRM(data: Optional[causalis.data_contracts.multicausaldata.MultiCausalData] = None, ml_g: Any = None, ml_m: Any = None, *, n_folds: int = 5, n_rep: int = 1, normalize_ipw: bool = False, trimming_rule: str = 'truncate', trimming_threshold: float = 0.01, random_state: Optional[int] = None, n_jobs: int = 1)

Bases: sklearn.base.BaseEstimator

Interactive Regression Model for multi-treatment unconfoundedness.

DoubleML-style cross-fitting estimator consuming MultiCausalData and producing pairwise ATE contrasts against baseline treatment (column 0). Model supports >= 2 treatments.

Parameters
----------
data : MultiCausalData
    Data container with outcome, one-hot multi-treatment indicators, and confounders.
ml_g : estimator
    Learner for E[Y|X,D]. If classifier and Y is binary, predict_proba is used; otherwise predict().
ml_m : classifier
    Learner for E[D|X] (generelized propensity score). Must support predict_proba() or predict() in (0,1).
n_folds : int, default 5
    Number of cross-fitting folds.
n_rep : int, default 1
    Number of repetitions of sample splitting. Currently only 1 is supported.
normalize_ipw : bool, default False
    Whether to normalize IPW terms within the score.
    This is a Hajek-style stabilization: it can reduce variance but may add
    small finite-sample bias.
trimming_rule : {"truncate"}, default "truncate"
    Trimming approach for propensity scores.
trimming_threshold : float, default 1e-2
    Threshold for trimming if rule is "truncate".
random_state : Optional[int], default None
    Random seed for fold creation.
n_jobs : int, default 1
    Number of parallel jobs for fold-level cross-fitting.
    Use `-1` to use all available CPUs.
    Practical guidance:
    - Start with `n_jobs=1` for stable, low-contention defaults.
    - Increase to `n_jobs=2/4/-1` when cross-fitting is the bottleneck.
    - If nuisance learners are already multithreaded (e.g. CatBoost with
      `thread_count=-1`), keep `n_jobs=1` or set learner threads to `1`
      to avoid CPU oversubscription.

Initialization

fit(data: Optional[causalis.data_contracts.multicausaldata.MultiCausalData] = None) causalis.scenarios.multi_unconfoundedness.model.MultiTreatmentIRM
estimate(score: str = 'ATE', alpha: float = 0.05, diagnostic_data: bool = True) causalis.data_contracts.multicausal_estimate.MultiCausalEstimate
property diagnostics_: Dict[str, Any]

Return diagnostic data.

Returns

dict Dictionary containing ‘m_hat’, ‘g_hat’ and ‘folds’.

property coef: numpy.ndarray

Return the estimated coefficient.

Returns

np.ndarray The estimated coefficient.

property se: numpy.ndarray

Return the standard error of the estimate.

Returns

np.ndarray The standard error.

property pvalues: numpy.ndarray

Return the p-values for the estimate.

Returns

np.ndarray The p-values.

property summary: pandas.DataFrame

Return a summary DataFrame of the results.

Returns

pd.DataFrame The results summary.

property orth_signal: numpy.ndarray

Return the cross-fitted orthogonal signal (psi_b).

Returns

np.ndarray The orthogonal signal.

sensitivity_analysis(cf_y: Optional[float] = None, r2_d: Any = 0.0, rho: Any = 1.0, H0: float = 0.0, alpha: float = 0.05, *, r2_y: Optional[float] = None) causalis.scenarios.multi_unconfoundedness.model.MultiTreatmentIRM
confint() pandas.DataFrame