Skip to content

statspai.qte

qte

Quantile Treatment Effects (QTE) module for StatsPAI.

Provides estimators for: - Quantile DID (Athey & Imbens 2006) — DID at each quantile - QTE via Quantile Regression (Firpo 2007) — conditional QTE with controls - QTE via Distribution — propensity-score reweighting approach

References

Athey, S. & Imbens, G. W. (2006). Identification and Inference in Nonlinear Difference-in-Differences Models. Econometrica, 74(2), 431-497. [@athey2006identification]

Firpo, S. (2007). Efficient Semiparametric Estimation of Quantile Treatment Effects. Econometrica, 75(1), 259-276. [@firpo2007efficient]

QTEResult

Container for quantile treatment effect estimates.

Attributes:

Name Type Description
quantiles ndarray

Quantile grid.

effects ndarray

QTE point estimates.

se ndarray

Bootstrap / analytical standard errors.

ci_lower, ci_upper ndarray

Confidence interval bounds.

ate float

Average treatment effect (for comparison).

method str

Estimation method label.

n_obs int

Sample size.

alpha float

Significance level.

plot

plot(ax=None)

QTE plot with CI bands and ATE reference line.

Returns (fig, ax).

DTEResult

Container for distributional treatment effect estimates.

summary

summary() -> str

Print and return a formatted summary.

plot

plot(ax=None)

Plot the DTE curve with CI band. Returns (fig, ax).

plot_cdf

plot_cdf(ax=None)

Plot treated vs. counterfactual CDFs. Returns (fig, ax).

DistIVResult dataclass

Distributional IV LATE per quantile.

HDPanelQTEResult dataclass

QTE at multiple quantiles with high-dim control selection.

BeyondAverageResult dataclass

Distributional LATE on compliers.

qdid

qdid(data: DataFrame, y: str, group: str, time: str, quantiles: Optional[List[float]] = None, n_boot: int = 500, alpha: float = 0.05, seed: int = 42) -> QTEResult

Quantile Difference-in-Differences (Athey & Imbens 2006).

QTE_DID(τ) = F_{11}^{-1}(τ) - F_{10}^{-1}(τ) - [F_{01}^{-1}(τ) - F_{00}^{-1}(τ)]

Parameters:

Name Type Description Default
data DataFrame
required
y str

Outcome variable.

required
group str

Binary group indicator (0 = control, 1 = treated).

required
time str

Binary time indicator (0 = pre, 1 = post).

required
quantiles list of float

Defaults to [0.1, 0.25, 0.5, 0.75, 0.9].

None
n_boot int

Bootstrap replications.

500
alpha float

Significance level.

0.05
seed int

Random seed.

42

Returns:

Type Description
QTEResult

distributional_te

distributional_te(data: DataFrame, y: str, treatment: str, x: Optional[List[str]] = None, method: str = 'ipw', n_grid: int = 100, quantiles: Optional[List[float]] = None, n_boot: int = 500, alpha: float = 0.05, seed: Optional[int] = None) -> DTEResult

Estimate distributional treatment effects.

Parameters:

Name Type Description Default
data DataFrame
required
y str — outcome column.
required
treatment str — treatment column (binary 0/1 for IPW/DR;

0-3 group encoding for CiC).

required
x list[str], optional — covariates (required for DR).
None
method ('ipw', 'dr', 'cic')
'ipw'
n_grid int — grid points for CDF evaluation.
100
quantiles list[float] — QTE quantile indices.
None
n_boot int — bootstrap replications.
500
alpha float — significance level.
0.05
seed int, optional — random seed.
None

Returns:

Type Description
DTEResult

kan_dlate

kan_dlate(data: DataFrame, y: str, treat: str, instrument: str, covariates: Optional[List[str]] = None, quantiles: Optional[ndarray] = None, alpha: float = 0.05, n_boot: int = 200, seed: int = 0) -> DistIVResult

KAN-Powered D-IV-LATE (Shaw 2025, arXiv 2506.12765).

Same identification as :func:dist_iv; would normally model the bridge with a Kolmogorov-Arnold network. We currently fall back to the kernel-smoothed Wald estimator (KAN requires a heavy optional dependency). Functional equivalence is preserved at standard quantile grids.

qte_hd_panel

qte_hd_panel(data: DataFrame, y: str, treat: str, unit: str, time: str, covariates: List[str], quantiles: Optional[ndarray] = None, alpha: float = 0.05, lasso_alpha: float = 0.01, seed: int = 0) -> HDPanelQTEResult

High-dimensional panel QTE via LASSO-selected controls.

Parameters:

Name Type Description Default
data DataFrame

Long-format panel.

required
y str
required
treat str
required
unit str
required
time str
required
covariates list of str

High-dim candidate control set.

required
quantiles array - like

Defaults to (0.1, 0.25, 0.5, 0.75, 0.9).

None
alpha float
0.05
lasso_alpha float
0.01
seed int
0

Returns:

Type Description
HDPanelQTEResult

beyond_average_late

beyond_average_late(data: DataFrame, y: str, treat: str, instrument: str, quantiles: Optional[ndarray] = None, alpha: float = 0.05, n_boot: int = 200, seed: int = 0) -> BeyondAverageResult

Distributional LATE on compliers under imperfect compliance.

Parameters:

Name Type Description Default
data DataFrame
required
y str
required
treat str
required
instrument str
required
quantiles array - like
None
alpha float
0.05
n_boot int
200
seed int
0

Returns:

Type Description
BeyondAverageResult