Estimation.CATE.Core
Core DR-Learner pseudo-outcome theory for CATE: conditional bias, directional derivatives, conditional-mean identities, and second-order bias.
PseudoOutcome 3 core · 1 supporting Defines doubly robust pseudo-outcomes for conditional average treatment effect estimation. ★ measurable_phi₀
Defines doubly robust pseudo-outcomes for conditional average treatment effect
estimation. The main definitions are phi_eta, the uncentered AIPW
pseudo-outcome at an arbitrary nuisance vector, and phi₀, its specialization
to the truth nuisance carried by a CATEEstimationSystem. The lemmas
measurable_phi_eta and measurable_phi₀ provide the measurability facts used
by the conditional-mean, bias, and orthogonal-learning developments.
Uncentered AIPW pseudo-outcome (Kennedy's φ_η):
Definition (Lean source)
True DR pseudo-outcome: φ_0(z) := φ_{η_0}(z) where η_0 is the truth nuisance vector carried by the back-door substrate of S.
Definition (Lean source)
For a CATE estimation system, the true doubly-robust pseudo-outcome φ_0 is measurable as a function of the observed data.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
measurable_phi_etalemma — The uncentered AIPW pseudo-outcome is measurable in the data argument.Proof (Lean source)
lemma measurable_phi_eta (η : NuisanceVec γ) : Measurable (fun z : γ × Bool × ℝ => phi_eta z η) := by unfold phi_eta BackdoorEstimationSystem.aipwMoment BackdoorEstimationSystem.indA BackdoorEstimationSystem.projX BackdoorEstimationSystem.projA BackdoorEstimationSystem.projY have hx : Measurable (fun z : γ × Bool × ℝ => z.1) := measurable_fst have hy : Measurable (fun z : γ × Bool × ℝ => z.2.2) := by measurability have hμt : Measurable (fun z : γ × Bool × ℝ => η.μ_fn true z.1) := (η.μ_meas true).comp hx have hμf : Measurable (fun z : γ × Bool × ℝ => η.μ_fn false z.1) := (η.μ_meas false).comp hx have he : Measurable (fun z : γ × Bool × ℝ => η.e_fn z.1) := η.e_meas.comp hx have hind : Measurable (fun z : γ × Bool × ℝ => if z.2.1 = true then (1 : ℝ) else 0) := by have ha : Measurable (fun z : γ × Bool × ℝ => z.2.1) := by measurability exact (Measurable.of_discrete (f := fun b : Bool => if b = true then (1 : ℝ) else 0)).comp ha exact ((((hμt.sub hμf).add ((hind.div he).mul (hy.sub hμt))).sub (((measurable_const.sub hind).div (measurable_const.sub he)).mul (hy.sub hμf))).sub measurable_const)
PhiEtaDeriv 2 core · 1 supporting Computes directional derivatives for CATE doubly robust pseudo-outcome maps. ★ phi_eta_dir_deriv_tendsto
Computes directional derivatives for CATE doubly robust pseudo-outcome maps. The
definition phi_eta_dir_deriv gives the closed-form derivative in a nuisance
direction, measurable_phi_eta_dir_deriv proves measurability in the data
argument, and phi_eta_dir_deriv_tendsto proves convergence of the pointwise
difference quotient under strict overlap.
These derivative formulas are the analytic core of the CATE orthogonality and
second-order bias arguments, including the conditional mean-zero result for the
derivative at the truth in ConditionalBias.lean.
Closed-form directional derivative of phi_eta z η in η at g₀ along the direction v : NuisanceVec γ.
Definition (Lean source)
Pointwise convergence of the DR pseudo-outcome difference quotient. Fix an anchor nuisance pair g₀, a perturbation direction v, and a data point z. If ε is strictly positive and the anchor g₀ has propensity uniformly bounded in [ε, 1 − ε] for every covariate value, then as the step size t tends to 0 along nonzero values, the difference quotient (phi_eta z (g₀ + t•v) − phi_eta z g₀) / t converges to the closed-form directional derivative phi_eta_dir_deriv g₀ v z.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
measurable_phi_eta_dir_derivlemma — phi_eta_dir_deriv g₀ v is measurable in z.hypothesesg₀ v :conclusionProof (Lean source)
lemma measurable_phi_eta_dir_deriv (g₀ v : NuisanceVec γ) : Measurable (fun z : γ × Bool × ℝ => phi_eta_dir_deriv g₀ v z) := by unfold phi_eta_dir_deriv indA projX projA projY have hx : Measurable (fun z : γ × Bool × ℝ => z.1) := measurable_fst have hy : Measurable (fun z : γ × Bool × ℝ => z.2.2) := by measurability have hμvT : Measurable (fun z : γ × Bool × ℝ => v.μ_fn true z.1) := (v.μ_meas true).comp hx have hμvF : Measurable (fun z : γ × Bool × ℝ => v.μ_fn false z.1) := (v.μ_meas false).comp hx have hev : Measurable (fun z : γ × Bool × ℝ => v.e_fn z.1) := v.e_meas.comp hx have hμgT : Measurable (fun z : γ × Bool × ℝ => g₀.μ_fn true z.1) := (g₀.μ_meas true).comp hx have hμgF : Measurable (fun z : γ × Bool × ℝ => g₀.μ_fn false z.1) := (g₀.μ_meas false).comp hx have heg : Measurable (fun z : γ × Bool × ℝ => g₀.e_fn z.1) := g₀.e_meas.comp hx have hind : Measurable (fun z : γ × Bool × ℝ => if z.2.1 = true then (1 : ℝ) else 0) := by have ha : Measurable (fun z : γ × Bool × ℝ => z.2.1) := by measurability exact (Measurable.of_discrete (f := fun b : Bool => if b = true then (1 : ℝ) else 0)).comp ha have hbase : Measurable (fun z : γ × Bool × ℝ => v.μ_fn true z.1 - v.μ_fn false z.1) := hμvT.sub hμvF -- Inner bracket of the indA branch. have hbrA : Measurable (fun z : γ × Bool × ℝ => -v.e_fn z.1 / (g₀.e_fn z.1)^2 * (z.2.2 - g₀.μ_fn true z.1) - 1 / g₀.e_fn z.1 * v.μ_fn true z.1) := by have h1 : Measurable (fun z : γ × Bool × ℝ => -v.e_fn z.1 / (g₀.e_fn z.1)^2) := hev.neg.div (heg.pow_const 2) have h2 : Measurable (fun z : γ × Bool × ℝ => z.2.2 - g₀.μ_fn true z.1) := hy.sub hμgT have h3 : Measurable (fun z : γ × Bool × ℝ => (1 : ℝ) / g₀.e_fn z.1) := measurable_const.div heg exact (h1.mul h2).sub (h3.mul hμvT) -- Inner bracket of the (1-indA) branch. have hbrB : Measurable (fun z : γ × Bool × ℝ => v.e_fn z.1 / (1 - g₀.e_fn z.1)^2 * (z.2.2 - g₀.μ_fn false z.1) - 1 / (1 - g₀.e_fn z.1) * v.μ_fn false z.1) := by have h1m : Measurable (fun z : γ × Bool × ℝ => 1 - g₀.e_fn z.1) := measurable_const.sub heg have h1 : Measurable (fun z : γ × Bool × ℝ => v.e_fn z.1 / (1 - g₀.e_fn z.1)^2) := hev.div (h1m.pow_const 2) have h2 : Measurable (fun z : γ × Bool × ℝ => z.2.2 - g₀.μ_fn false z.1) := hy.sub hμgF have h3 : Measurable (fun z : γ × Bool × ℝ => (1 : ℝ) / (1 - g₀.e_fn z.1)) := measurable_const.div h1m exact (h1.mul h2).sub (h3.mul hμvF) exact (hbase.add (hind.mul hbrA)).sub ((measurable_const.sub hind).mul hbrB)
ConditionalBias 3 core · 4 supporting Derives closed-form conditional-bias and orthogonality formulas for CATE doubly robust pseudo-outcomes. ★ phi_eta_minus_phi₀_cond_exp★ phi_eta_minus_phi₀_at_x
Derives closed-form conditional-bias and orthogonality formulas for CATE doubly
robust pseudo-outcomes. The value-space function condBias records the
cross-product remainder, with measurable_condBias providing measurability.
The main theorem phi_eta_minus_phi₀_cond_exp identifies the σ(X)-conditional
mean of phi_eta - phi₀ with condBias, and phi_eta_minus_phi₀_at_x transports
that identity to the covariate law through the regular conditional
distribution. The double-robustness corollaries
condBias_zero_of_propensity_match and condBias_zero_of_outcome_match show the
remainder vanishes when either nuisance block is correct. The final theorem
cond_exp_phi_eta_dir_deriv_at_truth_zero proves the corresponding conditional
mean-zero statement for the directional derivative at the truth.
The closed-form σ(X)-conditional bias of the DR pseudo-outcome contrast φ_η − φ_0, summed over the two treatment arms:
Definition (Lean source)
σ(X)-conditional bias identity for the DR pseudo-outcome (Kennedy / DR-Learner Proposition 2). Fix a candidate nuisance pair η. Under the back-door identification assumptions, if η's propensity is uniformly bounded in [ε, 1 − ε] for every covariate value, the truth nuisance likewise has propensity uniformly bounded in [ε, 1 − ε], ε is strictly positive, and each candidate outcome-regression arm, composed with the covariate, is integrable, then the σ(X)-conditional expectation of the DR pseudo-outcome contrast φ_η − φ_0 equals the closed-form cross-product remainder condBias η η₀, evaluated at the covariate, almost surely.
Formal statement
Proof (Lean source)
Value-space form of the DR pseudo-outcome bias identity. Fix a candidate nuisance pair η. Under the back-door identification assumptions, if η's propensity is uniformly bounded in [ε, 1 − ε] for every covariate value, the truth nuisance likewise has propensity uniformly bounded in [ε, 1 − ε], ε is strictly positive, each candidate outcome-regression arm, composed with the covariate, is integrable, and the DR pseudo-outcome contrast φ_η − φ_0 is integrable, then for covariate-law-almost-every x, the mean of φ_η − φ_0 under the regular conditional distribution of the data triple given the covariate value x equals the closed-form cross-product remainder condBias η η₀ x.
Formal statement
Proof (Lean source)
4 supporting declarations (lemmas, instances)
-
measurable_condBiaslemma — condBias η η₀ is measurable in x.Proof (Lean source)
lemma measurable_condBias (η η₀ : NuisanceVec γ) : Measurable (fun x : γ => condBias η η₀ x) := by unfold condBias refine measurable_sum _ ?_ intro a _ cases a · have h_num : Measurable (fun x : γ => (η.e_fn x - η₀.e_fn x) * (η.μ_fn false x - η₀.μ_fn false x)) := (η.e_meas.sub η₀.e_meas).mul ((η.μ_meas false).sub (η₀.μ_meas false)) have h_den : Measurable (fun x : γ => 1 - η.e_fn x) := measurable_const.sub η.e_meas simpa using h_num.fun_div h_den · have h_num : Measurable (fun x : γ => (η.e_fn x - η₀.e_fn x) * (η.μ_fn true x - η₀.μ_fn true x)) := (η.e_meas.sub η₀.e_meas).mul ((η.μ_meas true).sub (η₀.μ_meas true)) simpa using h_num.fun_div η.e_meas -
condBias_zero_of_propensity_matchlemma — If the propensity matches the truth at x, then condBias η η₀ x = 0.Proof (Lean source)
lemma condBias_zero_of_propensity_match (η η₀ : NuisanceVec γ) (x : γ) (h_e : η.e_fn x = η₀.e_fn x) : condBias η η₀ x = 0 := by unfold condBias apply Finset.sum_eq_zero intro a _ rw [show η.e_fn x - η₀.e_fn x = 0 from sub_eq_zero.mpr h_e] ring -
condBias_zero_of_outcome_matchlemma — If both outcome arms match the truth at x, then condBias η η₀ x = 0.hypothesesconclusioncondBias η η₀ x = 0Proof (Lean source)
lemma condBias_zero_of_outcome_match (η η₀ : NuisanceVec γ) (x : γ) (h_μ : ∀ a : Bool, η.μ_fn a x = η₀.μ_fn a x) : condBias η η₀ x = 0 := by unfold condBias apply Finset.sum_eq_zero intro a _ rw [show η.μ_fn a x - η₀.μ_fn a x = 0 from sub_eq_zero.mpr (h_μ a)] ring -
cond_exp_phi_eta_dir_deriv_at_truth_zerotheorem — The σ(X)-conditional expectation of the directional derivative phi_eta_dir_deriv at the truth g₀ = η₀ is zero a.e.hypothesesP :IsFiniteMeasure P.μS :hA :S.toPOBackdoorSystem.Assumptionsε :ℝhε_pos :0 < εh_overlap_η₀ :S.toBackdoorEstimationSystem.η₀ ∈ BackdoorEstimationSystem.H_ε (γ := γ) εv :h_v_μ_bdd :∃ Cμ : ℝ, ∀ b : Bool, ∀ x : γ, |v.μ_fn b x| ≤ Cμh_v_e_bdd :∃ Ce : ℝ, ∀ x : γ, |v.e_fn x| ≤ CeconclusionP.μ[fun ω => phi_eta_dir_deriv S.toBackdoorEstimationSystem.η₀ v (S.toBackdoorEstimationSystem.factualZ ω) | S.toPOBackdoorSystem.sigmaX]=ᵐ[P.μ] (fun _ => (0 : ℝ))Proof (Lean source)
theorem cond_exp_phi_eta_dir_deriv_at_truth_zero {P : POSystem} [StandardBorelSpace P.Ω] [IsFiniteMeasure P.μ] (S : CATEEstimationSystem P γ) (hA : S.toPOBackdoorSystem.Assumptions) {ε : ℝ} (hε_pos : 0 < ε) (h_overlap_η₀ : S.toBackdoorEstimationSystem.η₀ ∈ BackdoorEstimationSystem.H_ε (γ := γ) ε) (v : NuisanceVec γ) (h_v_μ_bdd : ∃ Cμ : ℝ, ∀ b : Bool, ∀ x : γ, |v.μ_fn b x| ≤ Cμ) (h_v_e_bdd : ∃ Ce : ℝ, ∀ x : γ, |v.e_fn x| ≤ Ce) : P.μ[fun ω => phi_eta_dir_deriv S.toBackdoorEstimationSystem.η₀ v (S.toBackdoorEstimationSystem.factualZ ω) | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun _ => (0 : ℝ)) := by let X : P.Ω → γ := S.toPOBackdoorSystem.factualX let Y : P.Ω → ℝ := S.toPOBackdoorSystem.factualY let indT : P.Ω → ℝ := S.toPOBackdoorSystem.dVar.indicator true let indF : P.Ω → ℝ := S.toPOBackdoorSystem.dVar.indicator false let T1 : P.Ω → ℝ := fun ω => v.μ_fn true (X ω) - v.μ_fn false (X ω) let T2 : P.Ω → ℝ := fun ω => (-v.e_fn (X ω) * (1 / S.e_val (X ω)) * (1 / S.e_val (X ω))) * (indT ω * (Y ω - S.μ_val true (X ω))) let T3 : P.Ω → ℝ := fun ω => (-1 / S.e_val (X ω) * v.μ_fn true (X ω)) * indT ω let T4 : P.Ω → ℝ := fun ω => (-v.e_fn (X ω) * (1 / (1 - S.e_val (X ω))) * (1 / (1 - S.e_val (X ω)))) * (indF ω * (Y ω - S.μ_val false (X ω))) let T5 : P.Ω → ℝ := fun ω => (1 / (1 - S.e_val (X ω)) * v.μ_fn false (X ω)) * indF ω have hindA_true : ∀ ω, BackdoorEstimationSystem.indA (S.toBackdoorEstimationSystem.factualZ ω) = indT ω := by intro ω by_cases hD : S.toPOBackdoorSystem.factualD ω = true · have hInd : indT ω = 1 := S.toPOBackdoorSystem.dVar.indicator_apply_eq_one hD simp [BackdoorEstimationSystem.factualZ, BackdoorEstimationSystem.indA, BackdoorEstimationSystem.projA, indT, hD, hInd] · have hInd : indT ω = 0 := S.toPOBackdoorSystem.dVar.indicator_apply_eq_zero (x := true) hD simp [BackdoorEstimationSystem.factualZ, BackdoorEstimationSystem.indA, BackdoorEstimationSystem.projA, indT, hD, hInd] have hφ_eq : (fun ω => phi_eta_dir_deriv S.toBackdoorEstimationSystem.η₀ v (S.toBackdoorEstimationSystem.factualZ ω)) = (fun ω => T1 ω + T2 ω + T3 ω + T4 ω + T5 ω) := by funext ω have hind_true_z : BackdoorEstimationSystem.indA (S.toPOBackdoorSystem.factualX ω, S.toPOBackdoorSystem.factualD ω, S.toPOBackdoorSystem.factualY ω) = indT ω := by simpa [BackdoorEstimationSystem.factualZ] using hindA_true ω have hind_not : 1 - indT ω = indF ω := by have hsum : indT ω + indF ω = 1 := S.toPOBackdoorSystem.dVar.indicator_add_indicator_not ω linarith simp only [T1, T2, T3, T4, T5, X, Y, indT, indF, phi_eta_dir_deriv, BackdoorEstimationSystem.factualZ, BackdoorEstimationSystem.projX, BackdoorEstimationSystem.projY, BackdoorEstimationSystem.η₀, hind_true_z, hind_not] have hneT : S.e_val (S.toPOBackdoorSystem.factualX ω) ≠ 0 := by exact ne_of_gt (lt_of_lt_of_le hε_pos (h_overlap_η₀ (S.toPOBackdoorSystem.factualX ω)).1) have hden : ε ≤ 1 - S.e_val (S.toPOBackdoorSystem.factualX ω) := by have hu : S.e_val (S.toPOBackdoorSystem.factualX ω) ≤ 1 - ε := by simpa [BackdoorEstimationSystem.η₀] using (h_overlap_η₀ (S.toPOBackdoorSystem.factualX ω)).2 linarith have hneF : 1 - S.e_val (S.toPOBackdoorSystem.factualX ω) ≠ 0 := by exact ne_of_gt (lt_of_lt_of_le hε_pos hden) field_simp [hneT, hneF] ring have hμ_val_int : ∀ d : Bool, Integrable (fun ω => S.μ_val d (X ω)) P.μ := by intro d have hcate_int : Integrable (S.toPOBackdoorSystem.CATE d) P.μ := by unfold POBackdoorSystem.CATE exact MeasureTheory.integrable_condExp exact hcate_int.congr (S.μ_compat hA d) rcases h_v_μ_bdd with ⟨Cμ, hCμ⟩ rcases h_v_e_bdd with ⟨Ce, hCe⟩ have hvμ_int : ∀ d : Bool, Integrable (fun ω => v.μ_fn d (X ω)) P.μ := by intro d refine MeasureTheory.Integrable.of_bound (((v.μ_meas d).comp S.toPOBackdoorSystem.measurable_factualX).aestronglyMeasurable) |Cμ| (Filter.Eventually.of_forall ?_) intro ω simpa [X, Real.norm_eq_abs] using le_trans (hCμ d (X ω)) (le_abs_self Cμ) have hv_e_top : MemLp (fun ω => v.e_fn (X ω)) ⊤ P.μ := by refine MemLp.of_bound ?_ |Ce| (Filter.Eventually.of_forall ?_) · exact ((v.e_meas.comp S.toPOBackdoorSystem.measurable_factualX)).aestronglyMeasurable · intro ω simpa [X, Real.norm_eq_abs] using le_trans (hCe (X ω)) (le_abs_self Ce) have hvμ_top : ∀ d : Bool, MemLp (fun ω => v.μ_fn d (X ω)) ⊤ P.μ := by intro d refine MemLp.of_bound ?_ |Cμ| (Filter.Eventually.of_forall ?_) · exact (((v.μ_meas d).comp S.toPOBackdoorSystem.measurable_factualX)).aestronglyMeasurable · intro ω simpa [X, Real.norm_eq_abs] using le_trans (hCμ d (X ω)) (le_abs_self Cμ) have hT1_int : Integrable T1 P.μ := by simp only [T1] exact (hvμ_int true).sub (hvμ_int false) have hT1_sm : StronglyMeasurable[S.toPOBackdoorSystem.sigmaX] T1 := by change StronglyMeasurable[ comap S.toPOBackdoorSystem.factualX inferInstance] (fun ω => v.μ_fn true (S.toPOBackdoorSystem.factualX ω) - v.μ_fn false (S.toPOBackdoorSystem.factualX ω)) exact (((v.μ_meas true).comp (comap_measurable S.toPOBackdoorSystem.factualX)).sub ((v.μ_meas false).comp (comap_measurable S.toPOBackdoorSystem.factualX))).stronglyMeasurable have hT1_ce : P.μ[T1 | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] T1 := Filter.EventuallyEq.of_eq (MeasureTheory.condExp_of_stronglyMeasurable S.toPOBackdoorSystem.sigmaX_le hT1_sm hT1_int) have h₀e_lower : ∀ ω, ε ≤ S.e_val (X ω) := by intro ω exact (h_overlap_η₀ (X ω)).1 have h₀e_upper : ∀ ω, S.e_val (X ω) ≤ 1 - ε := by intro ω exact (h_overlap_η₀ (X ω)).2 have hw₀T_Linf : MemLp (fun ω => 1 / S.e_val (X ω)) ⊤ P.μ := by refine MemLp.of_bound ?_ ε⁻¹ ?_ · exact ((measurable_const.div (S.e_meas.comp S.toPOBackdoorSystem.measurable_factualX))).aestronglyMeasurable · exact Filter.Eventually.of_forall (fun ω => by have hpos : 0 < S.e_val (X ω) := lt_of_lt_of_le hε_pos (h₀e_lower ω) have hle : (S.e_val (X ω))⁻¹ ≤ ε⁻¹ := (inv_le_inv₀ hpos hε_pos).2 (h₀e_lower ω) simpa [one_div, Real.norm_eq_abs, abs_of_pos hpos] using hle) have hw₀F_Linf : MemLp (fun ω => 1 / (1 - S.e_val (X ω))) ⊤ P.μ := by refine MemLp.of_bound ?_ ε⁻¹ ?_ · exact ((measurable_const.div (measurable_const.sub (S.e_meas.comp S.toPOBackdoorSystem.measurable_factualX)))).aestronglyMeasurable · exact Filter.Eventually.of_forall (fun ω => by have hden : ε ≤ 1 - S.e_val (X ω) := by linarith [h₀e_upper ω] have hpos : 0 < 1 - S.e_val (X ω) := lt_of_lt_of_le hε_pos hden have hle : (1 - S.e_val (X ω))⁻¹ ≤ ε⁻¹ := (inv_le_inv₀ hpos hε_pos).2 hden simpa [one_div, Real.norm_eq_abs, abs_of_pos hpos] using hle) have hYind_int : ∀ d : Bool, Integrable (fun ω => Y ω * S.toPOBackdoorSystem.dVar.indicator d ω) P.μ := fun d => S.toPOBackdoorSystem.dVar.integrable_mul_indicator d (MeasurableSet.singleton d) hA.integrable_factualY have hμind_int : ∀ d : Bool, Integrable (fun ω => S.μ_val d (X ω) * S.toPOBackdoorSystem.dVar.indicator d ω) P.μ := by intro d exact S.toPOBackdoorSystem.dVar.integrable_mul_indicator d (MeasurableSet.singleton d) (hμ_val_int d) have hresμ_int : ∀ d : Bool, Integrable (fun ω => S.toPOBackdoorSystem.dVar.indicator d ω * (Y ω - S.μ_val d (X ω))) P.μ := by intro d have hY' : Integrable (fun ω => S.toPOBackdoorSystem.dVar.indicator d ω * Y ω) P.μ := by simpa [Y, mul_comm] using hYind_int d have hμ' : Integrable (fun ω => S.toPOBackdoorSystem.dVar.indicator d ω * S.μ_val d (X ω)) P.μ := by simpa [mul_comm] using hμind_int d refine (hY'.sub hμ').congr ?_ exact Filter.Eventually.of_forall (fun ω => by change S.toPOBackdoorSystem.dVar.indicator d ω * Y ω - S.toPOBackdoorSystem.dVar.indicator d ω * S.μ_val d (X ω) = S.toPOBackdoorSystem.dVar.indicator d ω * (Y ω - S.μ_val d (X ω)) ring_nf) have hgET_top : MemLp (fun ω => -v.e_fn (X ω) * (1 / S.e_val (X ω)) * (1 / S.e_val (X ω))) ⊤ P.μ := by have htmp : MemLp (fun ω => -v.e_fn (X ω) * (1 / S.e_val (X ω))) ⊤ P.μ := by simpa [mul_comm, mul_left_comm, mul_assoc] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀T_Linf hv_e_top.neg simpa [mul_comm, mul_left_comm, mul_assoc] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀T_Linf htmp have hgEF_top : MemLp (fun ω => -v.e_fn (X ω) * (1 / (1 - S.e_val (X ω))) * (1 / (1 - S.e_val (X ω)))) ⊤ P.μ := by have htmp : MemLp (fun ω => -v.e_fn (X ω) * (1 / (1 - S.e_val (X ω)))) ⊤ P.μ := by simpa [mul_comm, mul_left_comm, mul_assoc] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀F_Linf hv_e_top.neg simpa [mul_comm, mul_left_comm, mul_assoc] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀F_Linf htmp have hgMT_top : MemLp (fun ω => -1 / S.e_val (X ω) * v.μ_fn true (X ω)) ⊤ P.μ := by simpa [div_eq_mul_inv, one_div, mul_assoc, mul_left_comm, mul_comm] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀T_Linf.neg (hvμ_top true) have hgMF_top : MemLp (fun ω => 1 / (1 - S.e_val (X ω)) * v.μ_fn false (X ω)) ⊤ P.μ := by simpa [div_eq_mul_inv, one_div, mul_assoc, mul_left_comm, mul_comm] using MemLp.mul' (p := ⊤) (q := ⊤) (r := ⊤) hw₀F_Linf (hvμ_top false) have hT2_int : Integrable T2 P.μ := by have hL1 : MemLp T2 1 P.μ := by have hmul := MemLp.mul' (p := 1) (q := ⊤) (r := 1) hgET_top (memLp_one_iff_integrable.2 (hresμ_int true)) exact hmul.ae_eq (Filter.Eventually.of_forall (fun ω => by simp [T2, X, Y, indT] ring)) exact hL1.integrable (by norm_num) have hT4_int : Integrable T4 P.μ := by have hL1 : MemLp T4 1 P.μ := by have hmul := MemLp.mul' (p := 1) (q := ⊤) (r := 1) hgEF_top (memLp_one_iff_integrable.2 (hresμ_int false)) exact hmul.ae_eq (Filter.Eventually.of_forall (fun ω => by simp [T4, X, Y, indF] ring)) exact hL1.integrable (by norm_num) have hT3_int : Integrable T3 P.μ := by have hL1 : MemLp T3 1 P.μ := by have hmul := MemLp.mul' (p := 1) (q := ⊤) (r := 1) hgMT_top (memLp_one_iff_integrable.2 (S.toPOBackdoorSystem.dVar.integrable_indicator true (MeasurableSet.singleton true))) exact hmul.ae_eq (Filter.Eventually.of_forall (fun ω => by simp [T3, X, indT] ring)) -- … truncated; follow the source link for the rest …
PseudoOutcomeMean 2 core · 0 supporting This file proves the conditional-mean identity for the doubly robust pseudo-outcome used to estimate conditional average treatment effects. ★ phi₀_factualZ_cond_exp★ phi_eta_cond_exp_eq_tau
Mean of the CATE Pseudo-Outcome
This file proves the conditional-mean identity for the doubly robust
pseudo-outcome used to estimate conditional average treatment effects. The
identity shows that, under the back-door assumptions and strict overlap, the
conditional expectation of the true pseudo-outcome given covariates equals the
target conditional treatment effect. The theorem phi₀_factualZ_cond_exp
proves the σ(X)-conditional statement on the source probability space, while
phi_eta_cond_exp_eq_tau transports it to the value-space law P_X using
conditional distributions.
σ(X)-conditional mean of the true DR pseudo-outcome equals the CATE. Under the back-door identification assumptions and two-sided strict overlap: the treatment propensity lies in [ε, 1 − ε] for some ε ∈ (0, 1/2] almost surely, the σ(X)-conditional expectation of the true DR pseudo-outcome φ₀, evaluated at the factual data triple, equals the value-space CATE τ_val pulled back along the covariate, almost surely.
Formal statement
Proof (Lean source)
Value-space form of the DR pseudo-outcome mean-CATE identity. Under the back-door identification assumptions, two-sided strict overlap: the treatment propensity lies in [ε, 1 − ε] for some ε ∈ (0, 1/2] almost surely, and integrability of the true DR pseudo-outcome φ₀ evaluated at the factual data triple, for covariate-law-almost-every x, the mean of φ₀ under the regular conditional distribution of the data triple given the covariate value x equals the value-space CATE τ_val x.
Formal statement
Proof (Lean source)
SecondOrderBias 1 core · 1 supporting This file proves that the weighted population bias of the doubly robust CATE pseudo-outcome is governed by a second-order product of nuisance errors. ★ abs_integral_phiDiff_mul_le_product
Second-Order CATE Bias
This file proves that the weighted population bias of the doubly robust CATE
pseudo-outcome is governed by a second-order product of nuisance errors. It
first converts the weighted pseudo-outcome bias into a conditional-bias
integral over covariates with integral_phiDiff_mul_eq_condBias and then
bounds that integral in abs_integral_phiDiff_mul_le_product by a product of
outcome-regression and propensity-score error norms.
Second-order product bias bound for the DR-Learner. Fix a candidate nuisance pair η and a test function w. Under ε strictly positive, the back-door identification assumptions, if η's propensity is uniformly bounded in [ε, 1 − ε] for every covariate value, the truth nuisance likewise has propensity uniformly bounded in [ε, 1 − ε], each candidate outcome-regression arm, composed with the covariate, is integrable, w is measurable, w is dominated by a nonnegative bound B, the w-weighted pseudo-outcome bias is integrable, each candidate outcome-regression error is square-integrable against the covariate law, and the propensity error is square-integrable against the covariate law, then the absolute value of the population integral of the w-weighted pseudo-outcome bias (phi_eta η − φ₀) · w is bounded by B/ε times the sum, over the two treatment arms, of ‖η.μ_fn a − μ_val a‖_{L²(P_X)} · ‖η.e_fn − e_val‖_{L²(P_X)}.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
integral_phiDiff_mul_eq_condBiastheorem — Conditioning identity for the weighted pseudo-outcome bias.hypothesesS :hA :S.toPOBackdoorSystem.Assumptionsη :ε :ℝhε_pos :0 < εh_overlap_η :η ∈ BackdoorEstimationSystem.H_ε (γ := γ) εh_overlap_η₀ :S.toBackdoorEstimationSystem.η₀ ∈ BackdoorEstimationSystem.H_ε (γ := γ) εh_μ_η_int :∀ a : Bool, Integrable (fun ω => η.μ_fn a (S.toBackdoorEstimationSystem.factualX ω)) P.μw :γ → ℝhw_meas :h_phi_int :Integrable (fun ω => phi_eta (S.toBackdoorEstimationSystem.factualZ ω) η - phi₀ S (S.toBackdoorEstimationSystem.factualZ ω)) P.μh_phiw_int :Integrable (fun ω => (phi_eta (S.toBackdoorEstimationSystem.factualZ ω) η - phi₀ S (S.toBackdoorEstimationSystem.factualZ ω)) * w (S.toBackdoorEstimationSystem.factualX ω)) P.μProof (Lean source)
theorem integral_phiDiff_mul_eq_condBias (S : CATEEstimationSystem P γ) (hA : S.toPOBackdoorSystem.Assumptions) (η : NuisanceVec γ) {ε : ℝ} (hε_pos : 0 < ε) (h_overlap_η : η ∈ BackdoorEstimationSystem.H_ε (γ := γ) ε) (h_overlap_η₀ : S.toBackdoorEstimationSystem.η₀ ∈ BackdoorEstimationSystem.H_ε (γ := γ) ε) (h_μ_η_int : ∀ a : Bool, Integrable (fun ω => η.μ_fn a (S.toBackdoorEstimationSystem.factualX ω)) P.μ) (w : γ → ℝ) (hw_meas : Measurable w) (h_phi_int : Integrable (fun ω => phi_eta (S.toBackdoorEstimationSystem.factualZ ω) η - phi₀ S (S.toBackdoorEstimationSystem.factualZ ω)) P.μ) (h_phiw_int : Integrable (fun ω => (phi_eta (S.toBackdoorEstimationSystem.factualZ ω) η - phi₀ S (S.toBackdoorEstimationSystem.factualZ ω)) * w (S.toBackdoorEstimationSystem.factualX ω)) P.μ) : ∫ z, (phi_eta z η - phi₀ S z) * w z.1 ∂S.toBackdoorEstimationSystem.P_Z = ∫ x, condBias η S.toBackdoorEstimationSystem.η₀ x * w x ∂S.toBackdoorEstimationSystem.P_X := by set X := S.toPOBackdoorSystem.factualX with hX set Z := S.toBackdoorEstimationSystem.factualZ with hZ -- The conditional-bias identity (σ(X)-form). have hcond := phi_eta_minus_phi₀_cond_exp S hA η h_overlap_η h_overlap_η₀ hε_pos h_μ_η_int -- σ(X)-strong measurability of `w ∘ X`. have hw_sm : StronglyMeasurable[S.toPOBackdoorSystem.sigmaX] (fun ω => w (X ω)) := by change StronglyMeasurable[ comap S.toPOBackdoorSystem.factualX inferInstance] (fun ω => w (S.toPOBackdoorSystem.factualX ω)) exact (hw_meas.comp (comap_measurable S.toPOBackdoorSystem.factualX)).stronglyMeasurable -- Pull `w ∘ X` out of the conditional expectation of `(phi_eta − phi₀) ∘ Z`. have hpull := MeasureTheory.condExp_mul_of_stronglyMeasurable_right (μ := P.μ) (m := S.toPOBackdoorSystem.sigmaX) hw_sm h_phiw_int h_phi_int -- Hence `E[(phi_eta − phi₀)·(w∘X) | σX] =ᵐ (w∘X)·(condBias ∘ X)`. have hcond_mul : P.μ[fun ω => (phi_eta (Z ω) η - phi₀ S (Z ω)) * w (X ω) | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun ω => w (X ω) * condBias η S.toBackdoorEstimationSystem.η₀ (X ω)) := by refine hpull.trans ?_ filter_upwards [hcond] with ω hω rw [Pi.mul_apply, hω]; simp only [hX]; ring calc ∫ z, (phi_eta z η - phi₀ S z) * w z.1 ∂S.toBackdoorEstimationSystem.P_Z = ∫ ω, (phi_eta (Z ω) η - phi₀ S (Z ω)) * w (X ω) ∂P.μ := by rw [BackdoorEstimationSystem.P_Z, MeasureTheory.integral_map S.toBackdoorEstimationSystem.measurable_factualZ.aemeasurable (by refine ((measurable_phi_eta η).sub (measurable_phi₀ S)).mul (hw_meas.comp measurable_fst) |>.aestronglyMeasurable)] rfl _ = ∫ ω, P.μ[fun ω => (phi_eta (Z ω) η - phi₀ S (Z ω)) * w (X ω) | S.toPOBackdoorSystem.sigmaX] ω ∂P.μ := by rw [MeasureTheory.integral_condExp S.toPOBackdoorSystem.sigmaX_le] _ = ∫ ω, w (X ω) * condBias η S.toBackdoorEstimationSystem.η₀ (X ω) ∂P.μ := MeasureTheory.integral_congr_ae hcond_mul _ = ∫ x, condBias η S.toBackdoorEstimationSystem.η₀ x * w x ∂S.toBackdoorEstimationSystem.P_X := by rw [BackdoorEstimationSystem.P_X, MeasureTheory.integral_map S.toPOBackdoorSystem.measurable_factualX.aemeasurable (by refine (((measurable_condBias η S.toBackdoorEstimationSystem.η₀).mul hw_meas)).aestronglyMeasurable)] refine MeasureTheory.integral_congr_ae (Filter.Eventually.of_forall fun ω => ?_) simp only [hX]; ring