causalis.scenarios.iv.model¶
Instrumental Interactive Regression Model for binary IV LATE estimation.
Module Contents¶
Classes¶
DoubleML-style IIVM estimator for LATE with binary treatment and IV. |
Data¶
API¶
- class causalis.scenarios.iv.model.IIVM(data: Optional[causalis.data_contracts.iv_causal_data.IVCausalData] = None, ml_g: Any = None, ml_m: Any = None, ml_r: Any = None, *, n_folds: int = 5, n_rep: int = 1, normalize_ipw: bool = False, trimming_rule: str = 'truncate', trimming_threshold: float = 0.01, weak_iv_threshold: float = 0.01, random_state: Optional[int] = None, n_jobs: int = 1)¶
Bases:
sklearn.base.BaseEstimatorDoubleML-style IIVM estimator for LATE with binary treatment and IV.
The model consumes :class:
~causalis.data_contracts.IVCausalData, which stores exactly one binary instrument. It cross-fits nuisance functions:.. math::
g_0(z, X) = \mathbb{E}[Y \mid Z=z, X], \quad r_0(z, X) = \mathbb{E}[D \mid Z=z, X], \quad m_0(X) = \mathbb{P}(Z=1 \mid X).estimate(score="LATE")then solves the linear orthogonal score.. math::
\psi(W; \theta, \eta) = \phi_Y(W; \eta) - \theta \phi_D(W; \eta),
returning
.. math::
\hat\theta = \mathbb{E}_n[\phi_Y] / \mathbb{E}_n[\phi_D].where the orthogonal signals are:
.. math::
\phi_Y(W; \eta) &= g(1, X) - g(0, X) + \frac{Z(Y - g(1, X))}{m(X)} - \frac{(1-Z)(Y - g(0, X))}{1 - m(X)} \\ \phi_D(W; \eta) &= r(1, X) - r(0, X) + \frac{Z(D - r(1, X))}{m(X)} - \frac{(1-Z)(D - r(0, X))}{1 - m(X)}Notes
The Local Average Treatment Effect (LATE) is the effect of the treatment among “compliers” — those whose treatment status is changed by the instrument.
Examples
from causalis.scenarios.iv.dgp import generate_offer_iv_26 from causalis.data_contracts.iv_causal_data import IVCausalData from causalis.scenarios.iv.model import IIVM data = generate_offer_iv_26(n=5000, return_causal_data=False) causal_data = IVCausalData.from_df( … df=data, … treatment=’accepted_offer’, … outcome=’net_revenue_90d’, … instruments=’offer_eligible’, … confounders=[‘age’, ‘tenure_months’, ‘annual_income’] … ) model = IIVM() model.fit(causal_data) result = model.estimate(score=”LATE”) result.summary()
Initialization
- fit(data: Optional[causalis.data_contracts.iv_causal_data.IVCausalData] = None) causalis.scenarios.iv.model.IIVM¶
Fit cross-fitted nuisance functions for IIVM.
- estimate(score: str = 'LATE', alpha: float = 0.05) causalis.data_contracts.iv_causal_estimate.IVCausalEstimate¶
Estimate LATE from cross-fitted IIVM nuisance predictions.
- property diagnostics_: Dict[str, Any]¶
Return fit-time diagnostic arrays.
- property coef: numpy.ndarray¶
Return the estimated coefficient.
- property se: numpy.ndarray¶
Return the standard error.
- property pvalues: numpy.ndarray¶
Return p-values.
- property summary: pandas.DataFrame¶
Return the latest estimate summary table.
- confint() pandas.DataFrame¶
Return the latest confidence interval as a DataFrame.
- __repr__() str¶
Concise representation of IIVM to avoid verbose learner output.
- causalis.scenarios.iv.model.__all__¶
[‘IIVM’, ‘IVCausalEstimate’]