Estimation.ATE
Sample-split AIPW/DML estimation of the back-door average treatment effect: the moment function, its influence function, square-integrability, and the asymptotic-linearity theorem.
Setup 8 core · 5 supporting Defines the estimation-layer structure used by back-door ATE estimators. ★ θ₀_eq_ATE
Defines the estimation-layer structure used by back-door ATE estimators.
The file introduces BackdoorEstimationSystem, its strict-overlap predicate
StrictOverlap, the covariate and observed-data laws P_X and P_Z, and the
value-space estimand θ₀. It proves that θ₀ agrees with the PO-level ATE
under the back-door assumptions, derives counterfactual compatibility as
μ_compat, and provides POBackdoorSystem.toBackdoorEstimationSystem to show
that the added value-space compatibility and positivity fields are obtainable
from observable lifts rather than extra causal assumptions.
A back-door estimation system extends a potential-outcome back-door system with value-space representatives of the nuisance parameters used by AIPW-style estimators: an outcome regression μ(a,x) and a propensity score e(x) that is bounded away from 0 and away from 1, together with the outcome regression's agreement, almost everywhere, with the σ(X)-measurable observable regression adjustedCE, composed with the factual covariate and the analogous agreement of the propensity score with the observable propensity propScore.
Definition (Lean source)
For a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, a back-door estimation system, and a real overlap level, the strict-overlap condition holds precisely when , , and almost surely under the population measure, the probability of treatment is between and .
Definition (Lean source)
For a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, and a back-door estimation system, the covariate marginal law is the image of the population measure under the factual covariate.
Definition (Lean source)
For a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, and a back-door estimation system, the factual data map sends every sample point to its observed covariate, binary treatment, and outcome triple.
Definition (Lean source)
For a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, and a back-door estimation system, the observed-data law is the image of the population measure under the factual covariate--treatment--outcome map.
Definition (Lean source)
For a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, and a back-door estimation system, the value-space average treatment effect is the covariate-law integral of the true treated outcome regression minus the true control outcome regression.
Definition (Lean source)
Value-space estimand equals the potential-outcome ATE. Under the back-door identification assumptions, the value-space estimand θ₀ = ∫ (μ(1,x) − μ(0,x)) dP_X, built from the outcome-regression nuisance, coincides with the average treatment effect defined on potential outcomes.
Formal statement
Proof (Lean source)
Given a potential-outcome system with a standard-Borel sample space and finite probability measure, a measurable covariate space, a back-door potential-outcome system, the assumption that its treated propensity is strictly between zero and one almost surely, and an integrable factual outcome, the associated back-door estimation system uses the value-space outcome regression and a propensity score that equals the lifted propensity on its strict-overlap support and equals one half elsewhere.
Definition (Lean source)
5 supporting declarations (lemmas, instances)
-
μ_compatlemma — Counterfactual compatibility (derived, under identification). Recovers the former μ_compat field — the *counterfactual* reading μ[Y(d) | σ(X)] =ᵐ μ_val d ∘ factualX — now as a theorem rather than an assumption. It is the observable μ_reg_compat (μ_val d ∘ factualX =ᵐ adjustedCE d) composed with back-door identification (conditionalMeanOutcome_backdoor : μ[Y(d)|σX] =ᵐ adjustedCE d), so the counterfactual binding is NOT part of the estimation system's data: it holds only under Assumptions. Every downstream proof that used the old field calls this with the ambient hA.hypothesesγ :sharedType u_1S :hA :S.toPOBackdoorSystem.Assumptionsd :conclusionP.μ[S.toPOBackdoorSystem.YofD d | S.toPOBackdoorSystem.sigmaX]=ᵐ[P.μ] (fun ω => S.μ_val d (S.toPOBackdoorSystem.factualX ω))Proof (Lean source)
lemma μ_compat (S : BackdoorEstimationSystem P γ) (hA : S.toPOBackdoorSystem.Assumptions) (d : Bool) : P.μ[S.toPOBackdoorSystem.YofD d | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun ω => S.μ_val d (S.toPOBackdoorSystem.factualX ω)) := (S.toPOBackdoorSystem.conditionalMeanOutcome_backdoor hA d).trans (S.μ_reg_compat d).symm -
P_X_eqlemma — The covariate marginal is the image of the population measure under the factual covariate map.hypothesesconclusionS.P_X = P.μ.map S.toPOBackdoorSystem.factualXProof (Lean source)
@[causal_defs_simps] lemma P_X_eq (S : BackdoorEstimationSystem P γ) : S.P_X = P.μ.map S.toPOBackdoorSystem.factualX := rfl -
measurable_factualZlemma — The observed covariate, treatment, and outcome triple is measurable.hypothesesconclusionMeasurable S.factualZProof (Lean source)
@[fun_prop] lemma measurable_factualZ (S : BackdoorEstimationSystem P γ) : Measurable S.factualZ := (S.toPOBackdoorSystem.measurable_factualX).prodMk ((S.toPOBackdoorSystem.measurable_factualD).prodMk S.toPOBackdoorSystem.measurable_factualY) -
P_Z_eqlemma — The joint data law is the image of the population measure under the map recording the observed covariate, treatment, and outcome.hypothesesconclusionS.P_Z = P.μ.map S.factualZProof (Lean source)
@[causal_defs_simps] lemma P_Z_eq (S : BackdoorEstimationSystem P γ) : S.P_Z = P.μ.map S.factualZ := rfl -
P_Z_map_projX_eq_P_Xlemma — The covariate marginal P_X is the pushforward of P_Z along the projection (x, a, y) ↦ x. Used to bridge integrals/eLpNorm between P_X (covariates only) and P_Z (full data triple).hypothesesconclusionS.P_Z.map (fun z : γ × Bool × ℝ => z.1) = S.P_XProof (Lean source)
lemma P_Z_map_projX_eq_P_X (S : BackdoorEstimationSystem P γ) : S.P_Z.map (fun z : γ × Bool × ℝ => z.1) = S.P_X := by unfold BackdoorEstimationSystem.P_Z BackdoorEstimationSystem.P_X rw [Measure.map_map (by fun_prop : Measurable (fun z : γ × Bool × ℝ => z.1)) S.measurable_factualZ] rfl
PlugIn 3 core · 1 supporting This file defines the sample-split plug-in estimator for the back-door average treatment effect using only the estimated outcome regression. ★ plugInOracle_tendstoNormal
Oracle Plug-In ATE Estimator
This file defines the sample-split plug-in estimator for the back-door average treatment effect using only the estimated outcome regression. Its limit theorems are oracle/known-nuisance benchmarks: they assume enough bias and empirical-process control to make the uncorrected plug-in asymptotically linear. For feasible learned nuisances, the usual construction adds the AIPW correction (Newey 1994).
The main declarations are plugInEstimator, ψ_plugin,
plugInOracle_isAsymLinear, and plugInOracle_tendstoNormal. The proofs use the
covariate-law representation of the ATE, fold-B empirical-process bounds, and
the L² rate of the outcome-regression nuisance to control the plug-in bias.
For a potential-outcome system with a measurable covariate space, a back-door estimation system, an independent and identically distributed sample of observed covariate, treatment, and outcome triples from its observable data law, a one-shot split of that sample, an outcome-regression learner indexed by sample size and population realization, and a nonnegative integer sample-size index, the sample-split plug-in estimator of the back-door average treatment effect assigns to each population realization the estimation-fold average of the estimated treated-minus-control outcome regression at the observed covariates.
Definition (Lean source)
For a potential-outcome system with a measurable covariate space, a back-door estimation system, and an observed covariate, treatment, and outcome triple, the plug-in influence-function value is the true treated-minus-control outcome regression at that triple's covariate, centered at the system's true average treatment effect.
Oracle asymptotic normality of the plug-in ATE. Under the back-door identification assumptions for S, square-integrability of both potential outcomes, and a one-shot sample split whose evaluation-fold fraction converges to some c > 0: suppose the learner μ̂ is measurable, in L²(P_X) at every realization, depends only on the nuisance-training fold, jointly with the covariate, with joint L²(P_X) estimation error at rate o_p(n^{-1/2}) — the same hypotheses as plugInOracle_isAsymLinear. Given in addition a.e. measurability of the rescaled estimator at every horizon and a.e. measurability of the normalized influence-sum at every horizon, then the rescaled estimator √|B(n)| (θ̂ⁿ − θ₀) converges in distribution to N(0, ∫ ψ_plugin² dP_Z).
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
plugInOracle_isAsymLineartheorem — Oracle asymptotic linearity of the plug-in ATE. Fix the back-door identification assumptions for S, square-integrability of both potential outcomes, and a one-shot sample split whose evaluation-fold fraction converges to some c > 0. Suppose the outcome-regression learner μ̂ is measurable, lies in L²(P_X) at every realization, and depends only on the nuisance-training fold, jointly with the covariate, with joint L²(P_X) estimation error at rate o_p(n^{-1/2}). Then the sample-split plug-in estimator of the back-door ATE is asymptotically linear at the true ATE θ₀ with influence function ψ_plugin along fold B.hypothesesγ :sharedType u_1S :hA :S.toPOBackdoorSystem.Assumptionsh_yd2 :∀ d : Bool, Integrable (fun ω => (S.toPOBackdoorSystem.YofD d ω) ^ 2) P.μsplit :OneShotSplit samplec :ℝhc_pos :0 < cμ_hat :ℕ → P.Ω → (Bool → γ → ℝ)h_mu_meas :∀ n a, Measurable (fun (p : P.Ω × γ) => μ_hat n p.1 a p.2)h_mu_memLp :∀ n ω a, MemLp (fun x => μ_hat n ω a x) 2 S.P_Xh_mu_uncurry_foldA :∀ n a,Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => μ_hat n p.1 a p.2)h_rate :IsLittleOp (fun n ω => sqrt (∑ a : Bool, (eLpNorm (fun x => μ_hat n ω a x - S.μ_val a x) 2 S.P_X).toReal ^ 2)) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μconclusionProof (Lean source)
theorem plugInOracle_isAsymLinear (S : BackdoorEstimationSystem P γ) (hA : S.toPOBackdoorSystem.Assumptions) (h_yd2 : ∀ d : Bool, Integrable (fun ω => (S.toPOBackdoorSystem.YofD d ω) ^ 2) P.μ) (sample : IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z) (split : OneShotSplit sample) {c : ℝ} (hc_pos : 0 < c) (h_split_rate : Tendsto (fun n => ((split.foldB n).card : ℝ) / n) atTop (𝓝 c)) (μ_hat : ℕ → P.Ω → (Bool → γ → ℝ)) (h_mu_meas : ∀ n a, Measurable (fun (p : P.Ω × γ) => μ_hat n p.1 a p.2)) (h_mu_memLp : ∀ n ω a, MemLp (fun x => μ_hat n ω a x) 2 S.P_X) (h_mu_uncurry_foldA : ∀ n a, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => μ_hat n p.1 a p.2)) (h_rate : IsLittleOp (fun n ω => sqrt (∑ a : Bool, (eLpNorm (fun x => μ_hat n ω a x - S.μ_val a x) 2 S.P_X).toReal ^ 2)) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μ) : IsAsymLinear (plugInEstimator S sample split μ_hat) S.θ₀ (ψ_plugin S) sample split.foldB := by refine ⟨?_, ?_, ?_⟩ · -- mean_zero: `ψ_plugin = (μ_val 1 - μ_val 0) - θ₀` integrates to `θ₀ - θ₀ = 0`. have hψ_meas : Measurable (ψ_plugin S) := by unfold ψ_plugin exact ((S.μ_meas true).comp measurable_fst).sub ((S.μ_meas false).comp measurable_fst) |>.sub measurable_const rw [BackdoorEstimationSystem.P_Z, MeasureTheory.integral_map S.measurable_factualZ.aemeasurable hψ_meas.aestronglyMeasurable] have hbase_int : Integrable (fun ω => S.μ_val true (S.toPOBackdoorSystem.factualX ω) - S.μ_val false (S.toPOBackdoorSystem.factualX ω)) P.μ := by have hcate : ∀ d, Integrable (S.toPOBackdoorSystem.conditionalMeanOutcome d) P.μ := fun d => by unfold POBackdoorSystem.conditionalMeanOutcome exact MeasureTheory.integrable_condExp have h1 : Integrable (fun ω => S.μ_val true (S.toPOBackdoorSystem.factualX ω)) P.μ := (hcate true).congr (S.μ_compat hA true) have h0 : Integrable (fun ω => S.μ_val false (S.toPOBackdoorSystem.factualX ω)) P.μ := (hcate false).congr (S.μ_compat hA false) exact h1.sub h0 have hθ_int : Integrable (fun _ : P.Ω => (S.θ₀ : ℝ)) P.μ := integrable_const _ have hθ_const : (∫ _ : P.Ω, (S.θ₀ : ℝ) ∂P.μ) = S.θ₀ := by haveI : IsProbabilityMeasure P.μ := inferInstance simp show ∫ ω, ψ_plugin S (S.factualZ ω) ∂P.μ = 0 have heq : (fun ω => ψ_plugin S (S.factualZ ω)) = (fun ω => (S.μ_val true (S.toPOBackdoorSystem.factualX ω) - S.μ_val false (S.toPOBackdoorSystem.factualX ω)) - S.θ₀) := by funext ω; rfl rw [heq] integral_linearity rw [← theta_zero_factualX_integral S, hθ_const] ring · -- finite_var: ψ_plugin = (μ_val 1 ∘ X) − (μ_val 0 ∘ X) − θ₀ ∈ L²(P_Z). -- L² of `μ_val d ∘ factualX` follows from `h_yd2` via conditional Jensen -- (cf. `aipw_finite_var`); push to `P_Z` along `factualZ`. have hψ_meas : Measurable (ψ_plugin S) := by unfold ψ_plugin exact (((S.μ_meas true).comp measurable_fst).sub ((S.μ_meas false).comp measurable_fst)).sub measurable_const have hμ_L2 : ∀ d : Bool, MemLp (fun ω => S.μ_val d (S.toPOBackdoorSystem.factualX ω)) 2 P.μ := by intro d have hYd_L2 : MemLp (S.toPOBackdoorSystem.YofD d) 2 P.μ := (memLp_two_iff_integrable_sq (S.toPOBackdoorSystem.measurable_YofD d).aestronglyMeasurable).2 (h_yd2 d) have hcond_L2 : MemLp (P.μ[S.toPOBackdoorSystem.YofD d | S.toPOBackdoorSystem.sigmaX]) 2 P.μ := hYd_L2.condExp one_le_two exact hcond_L2.ae_eq (S.μ_compat hA d) have hψ_comp_L2 : MemLp (fun ω => ψ_plugin S (S.factualZ ω)) 2 P.μ := by have hbase_L2 := (hμ_L2 true).sub (hμ_L2 false) have hconst_L2 : MemLp (fun _ : P.Ω => S.θ₀) 2 P.μ := memLp_const _ simp only [ψ_plugin, BackdoorEstimationSystem.factualZ, projX] exact hbase_L2.sub hconst_L2 have hψ_L2 : MemLp (ψ_plugin S) 2 S.P_Z := by rw [BackdoorEstimationSystem.P_Z] exact (memLp_map_measure_iff hψ_meas.aestronglyMeasurable S.measurable_factualZ.aemeasurable).2 hψ_comp_L2 exact hψ_L2.integrable_sq · -- remainder: decompose into centered fold-B fluctuation plus plug-in bias. let δ : ℕ → P.Ω → γ → ℝ := fun n ω x => (μ_hat n ω true x - S.μ_val true x) - (μ_hat n ω false x - S.μ_val false x) let G : ℕ → P.Ω → ℝ := fun n ω => (sqrt ((split.foldB n).card : ℝ))⁻¹ * ∑ i ∈ split.foldB n, (δ n ω (projX (sample.Z i ω)) - ∫ x, δ n ω x ∂S.P_X) let B : ℕ → P.Ω → ℝ := fun n ω => sqrt ((split.foldB n).card : ℝ) * ∫ x, δ n ω x ∂S.P_X let R : ℕ → P.Ω → ℝ := fun n ω => sqrt ((split.foldB n).card : ℝ) * (plugInEstimator S sample split μ_hat n ω - S.θ₀) - (sqrt ((split.foldB n).card : ℝ))⁻¹ * ∑ i ∈ split.foldB n, ψ_plugin S (sample.Z i ω) have hG : IsLittleOp G (fun _ => (1 : ℝ)) P.μ := by let fZ : ℕ → P.Ω → γ × Bool × ℝ → ℝ := fun n ω z => δ n ω (projX z) haveI : IsProbabilityMeasure S.P_Z := by unfold BackdoorEstimationSystem.P_Z exact Measure.isProbabilityMeasure_map S.measurable_factualZ.aemeasurable have hf_meas : ∀ n, Measurable (uncurry (fZ n)) := by intro n change Measurable (fun p : P.Ω × (γ × Bool × ℝ) => (μ_hat n p.1 true p.2.1 - S.μ_val true p.2.1) - (μ_hat n p.1 false p.2.1 - S.μ_val false p.2.1)) have hproj : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => (p.1, p.2.1)) := by fun_prop exact (((h_mu_meas n true).comp hproj).sub ((S.μ_meas true).comp measurable_snd.fst)).sub (((h_mu_meas n false).comp hproj).sub ((S.μ_meas false).comp measurable_snd.fst)) have hf_uncurry_foldA : ∀ n, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] (uncurry (fZ n)) := by intro n change Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] (fun (p : P.Ω × (γ × Bool × ℝ)) => (μ_hat n p.1 true p.2.1 - S.μ_val true p.2.1) - (μ_hat n p.1 false p.2.1 - S.μ_val false p.2.1)) let mA : MeasurableSpace P.Ω := comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance have hx : @Measurable (P.Ω × (γ × Bool × ℝ)) γ (mA.prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))) inferInstance (fun p => p.2.1) := measurable_snd.fst have hproj : @Measurable (P.Ω × (γ × Bool × ℝ)) (P.Ω × γ) (mA.prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))) (mA.prod (inferInstance : MeasurableSpace γ)) (fun p => (p.1, p.2.1)) := prodMk measurable_fst hx exact (((h_mu_uncurry_foldA n true).comp hproj).sub ((S.μ_meas true).comp hx)).sub (((h_mu_uncurry_foldA n false).comp hproj).sub ((S.μ_meas false).comp hx)) have hf_memLp : ∀ n ω, MemLp (fZ n ω) 2 S.P_Z := by have hμ_val_memLp : ∀ a : Bool, MemLp (S.μ_val a) 2 S.P_X := by intro a have hY_L2 : MemLp (S.toPOBackdoorSystem.YofD a) 2 P.μ := (memLp_two_iff_integrable_sq (S.toPOBackdoorSystem.measurable_YofD a).aestronglyMeasurable).2 (h_yd2 a) have hcond_L2 : MemLp (P.μ[S.toPOBackdoorSystem.YofD a | S.toPOBackdoorSystem.sigmaX]) 2 P.μ := hY_L2.condExp one_le_two have hcomp_L2 : MemLp (fun ω => S.μ_val a (S.toPOBackdoorSystem.factualX ω)) 2 P.μ := hcond_L2.ae_eq (S.μ_compat hA a) rw [BackdoorEstimationSystem.P_X] exact (memLp_map_measure_iff (S.μ_meas a).aestronglyMeasurable S.toPOBackdoorSystem.measurable_factualX.aemeasurable).2 hcomp_L2 intro n ω have hδ_memLp : MemLp (δ n ω) 2 S.P_X := by exact ((h_mu_memLp n ω true).sub (hμ_val_memLp true)).sub ((h_mu_memLp n ω false).sub (hμ_val_memLp false)) have hmap : MemLp (δ n ω) 2 (S.P_Z.map (fun z : γ × Bool × ℝ => z.1)) := by simpa [BackdoorEstimationSystem.P_Z_map_projX_eq_P_X S] using hδ_memLp have hδ_aestrong : AEStronglyMeasurable (δ n ω) (S.P_Z.map (fun z : γ × Bool × ℝ => z.1)) := hmap.aestronglyMeasurable have hproj_ae : AEMeasurable (fun z : γ × Bool × ℝ => z.1) S.P_Z := measurable_fst.aemeasurable exact (memLp_map_measure_iff hδ_aestrong hproj_ae).1 hmap have hf_rate_one : IsLittleOp (fun n ω => (eLpNorm (fZ n ω) 2 S.P_Z).toReal) (fun _ => (1 : ℝ)) P.μ := by have hμ_val_memLp : ∀ a : Bool, MemLp (S.μ_val a) 2 S.P_X := by intro a have hY_L2 : MemLp (S.toPOBackdoorSystem.YofD a) 2 P.μ := (memLp_two_iff_integrable_sq (S.toPOBackdoorSystem.measurable_YofD a).aestronglyMeasurable).2 (h_yd2 a) have hcond_L2 : MemLp (P.μ[S.toPOBackdoorSystem.YofD a | S.toPOBackdoorSystem.sigmaX]) 2 P.μ := hY_L2.condExp one_le_two have hcomp_L2 : MemLp (fun ω => S.μ_val a (S.toPOBackdoorSystem.factualX ω)) 2 P.μ := hcond_L2.ae_eq (S.μ_compat hA a) rw [BackdoorEstimationSystem.P_X] exact (memLp_map_measure_iff (S.μ_meas a).aestronglyMeasurable S.toPOBackdoorSystem.measurable_factualX.aemeasurable).2 hcomp_L2 have hnorm_bound : ∀ n ω, (eLpNorm (fZ n ω) 2 S.P_Z).toReal ≤ 2 * sqrt (∑ a : Bool, (eLpNorm (fun x => μ_hat n ω a x - S.μ_val a x) 2 S.P_X).toReal ^ 2) := by intro n ω let dμ : Bool → γ → ℝ := fun a x => μ_hat n ω a x - S.μ_val a x have hdμ_memLp : ∀ a, MemLp (dμ a) 2 S.P_X := fun a => by exact (h_mu_memLp n ω a).sub (hμ_val_memLp a) -- … truncated; follow the source link for the rest …