PO.ID.Partial.Proxy.ZBased
Instrument-side (Z-based) proxy constructions for partial identification.
ZBased 2 core · 0 supporting This file proves the Z-only proximal partial-identification bounds for off-arm and marginal counterfactual means. ★ condMeanYofA_Z_bounds★ meanYofA_Z_bounds
Z-based proximal partial-identification bounds
This file proves the Z-only proximal partial-identification bounds for
off-arm and marginal counterfactual means. It consumes the arm-swap
bridge-substitution lemmas from ZBased.ArmChain, where the treatment bridge
q and the Z-outcome envelope move ∫_{A != a} Y(a) to observable envelope
integrals.
Main declarations:
* condMeanYofA_Z_bounds is the Theorem 2 conditional sandwich for
condMeanYofA.
* meanYofA_Z_bounds is the Corollary 2 marginal sandwich, using
meanYofA_eq_strata to add the consistency-identified on-arm contribution.
Theorem 2 (Ghassami-Shpitser-Tchetgen Tchetgen, arXiv 2304.04374). Fix a treatment arm a and assume the Z-based assumption bundle — consistency, latent exchangeability, the outcome-proxy independence condition Y ⟂ Z ∣ (A, U, X), and the treatment-side bridge q — together with the treatment and outcome variables being distinct; let Lenv, Uenv be lower and upper envelope functions bounding the σ(A,Z,X)-conditional mean of the outcome on the on-arm stratum, assumed integrable, with the envelope weighted by the treatment-proxy bridge and the envelope weighted by the likelihood-ratio arm-swap factor both integrable, and the off-arm stratum of positive mass. Then the conditional target E[Y(a) ∣ A ≠ a] is sandwiched between the normalised {A ≠ a}-integrals of Lenv(a,X) and Uenv(a,X).
Formal statement
Proof (Lean source)
Corollary 2 (Ghassami-Shpitser-Tchetgen Tchetgen, arXiv 2304.04374). Fix a treatment arm a and assume the Z-based assumption bundle, with the treatment and outcome variables distinct; let Lenv, Uenv be lower and upper envelope functions bounding the σ(A,Z,X)-conditional mean of the outcome on the on-arm stratum, assumed integrable, with the envelope weighted by the treatment-proxy bridge and the envelope weighted by the likelihood-ratio arm-swap factor both integrable. Then the marginal target E[Y(a)] is sandwiched between the {A ≠ a}-integral of Lenv(a,X) and of Uenv(a,X), each plus the point-identified {A = a}-integral of Y.
Formal statement
Proof (Lean source)
ArmChain 1 core · 1 supporting This file proves the Z-proxy arm-swap and envelope lemmas used by ZBased.lean. ★ condIntYofA_le_envelope_arm
Z-based proximal arm-swap chain
This file proves the Z-proxy arm-swap and envelope lemmas used by
ZBased.lean. The chain starts from the off-arm integral
∫_{A != a} Y(a), swaps it to the observed arm using the bundled likelihood
ratio, substitutes the treatment bridge q, materializes μ[Y | σ_AZX], and
then applies the Z-envelope predicates.
Main declarations:
* condIntYofA_le_envelope_arm is the upper arm-chain inequality.
* envelope_le_condIntYofA_arm is the lower arm-chain inequality.
The private helper condIntYq_factor_arm packages the conditional-independence
factorization that rewrites the q-weighted conditional expectation in the
middle of both chains.
Off-arm bridge-substitution identity, upper envelope side. Fix a treatment arm a and assume the Z-based assumption bundle — consistency, latent exchangeability, the outcome-proxy independence condition, and the treatment-side bridge q — together with the treatment and outcome variables being distinct; let Uenv be an upper envelope function bounding the σ(A,Z,X)-conditional mean of the outcome on the on-arm stratum, assumed integrable, with the envelope weighted by the treatment-proxy bridge and the envelope weighted by the likelihood-ratio arm-swap factor both integrable. Then the average potential outcome Y(a) over the off-arm stratum {A ≠ a} is at most the average of the envelope Uenv(a, X) over that same stratum: ∫_{A≠a} Y(a) dμ ≤ ∫_{A≠a} Uenv(a, X) dμ.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
envelope_le_condIntYofA_armlemma — Off-arm bridge-substitution identity, lower envelope side. Mirror of condIntYofA_le_envelope_arm.hypothesesHA :POProximalSystem.ZBasedAssumptions S μa :hAY :S.Avar.v ≠ S.Yvar.vLenv :Bool × γ_X → ℝhL :S.IsLowerEnvZ μ a LenvhLInt :Integrable (fun ω => Lenv (a, S.X ω)) μhL_int :Integrable (fun ω => Lenv (a, S.X ω) * HA.q (S.Z ω, a, S.X ω)) μhL_int_L :Integrable (fun ω => Lenv (a, S.X ω) * HA.likelihoodRatio_swapA a ω) μconclusion(∫ ω in {ω | S.A ω ≠ a}, Lenv (a, S.X ω) ∂μ) ≤ (∫ ω in {ω | S.A ω ≠ a}, S.YofA a ω ∂μ)Proof (Lean source)
lemma envelope_le_condIntYofA_arm (HA : POProximalSystem.ZBasedAssumptions S μ) (a : Bool) (hAY : S.Avar.v ≠ S.Yvar.v) {Lenv : Bool × γ_X → ℝ} (hL : S.IsLowerEnvZ μ a Lenv) (hLInt : Integrable (fun ω => Lenv (a, S.X ω)) μ) (hL_int : Integrable (fun ω => Lenv (a, S.X ω) * HA.q (S.Z ω, a, S.X ω)) μ) (hL_int_L : Integrable (fun ω => Lenv (a, S.X ω) * HA.likelihoodRatio_swapA a ω) μ) : (∫ ω in {ω | S.A ω ≠ a}, Lenv (a, S.X ω) ∂μ) ≤ (∫ ω in {ω | S.A ω ≠ a}, S.YofA a ω ∂μ) := by -- Mirror of `condIntYofA_le_envelope_arm` with the inequality reversed at -- step (8). Walk the chain in reverse direction. set s' : Set P.Ω := {ω | S.A ω ≠ a} with hs'_def set s : Set P.Ω := {ω | S.A ω = a} with hs_def have hs_meas : MeasurableSet s := S.measurable_A (measurableSet_singleton a) have hs'_meas : MeasurableSet s' := by have h_compl : s' = sᶜ := by ext ω; simp [s', s] rw [h_compl]; exact hs_meas.compl have hs'_in_AUX : MeasurableSet[S.σ_AUX] s' := by refine ⟨Prod.fst ⁻¹' {b : Bool | b ≠ a}, ?_, ?_⟩ · exact measurable_fst (MeasurableSet.compl (measurableSet_singleton a)) · ext ω; rfl have hs_in_AUX_set : MeasurableSet[S.σ_AUX] s := by refine ⟨Prod.fst ⁻¹' {a}, ?_, ?_⟩ · exact measurable_fst (measurableSet_singleton a) · ext ω; rfl have hYInt : Integrable S.Y μ := HA.integrable_Y have hYaInt : Integrable (S.YofA a) μ := HA.integrable_YofA a have hqInt : Integrable (fun ω => HA.q (S.Z ω, a, S.X ω)) μ := HA.integrable_q a have hLatent : μ[S.YofA a | S.σ_AUX] =ᵐ[μ] μ[S.YofA a | S.σ_UX] := POProximalSystem.latent_exch_to_condExp' a (HA.latent_exch a) hYaInt have hConsist : μ[S.Y | S.σ_AUX] =ᵐ[μ.restrict s] μ[S.YofA a | S.σ_AUX] := POProximalSystem.consistency_event' HA.consistency a hAY hYInt hYaInt -- (1) ∫_{A≠a} Y(a) dμ = ∫_{A≠a} E[Y(a) | σ_AUX] dμ. have hStep1 : (∫ ω in s', S.YofA a ω ∂μ) = (∫ ω in s', (μ[S.YofA a | S.σ_AUX]) ω ∂μ) := by have := MeasureTheory.setIntegral_condExp (μ := μ) (m := S.σ_AUX) S.σ_AUX_le hYaInt hs'_in_AUX exact this.symm -- (2) ∫_{A≠a} E[Y(a) | σ_AUX] dμ = ∫_{A≠a} E[Y(a) | σ_UX] dμ. have hStep2 : (∫ ω in s', (μ[S.YofA a | S.σ_AUX]) ω ∂μ) = (∫ ω in s', (μ[S.YofA a | S.σ_UX]) ω ∂μ) := integral_congr_ae (ae_restrict_of_ae hLatent) -- (3) Arm-swap. Same as upper case — apply L2. have hArmSwap_Y : (∫ ω in s', (μ[S.YofA a | S.σ_UX]) ω ∂μ) = (∫ ω in s, (μ[S.YofA a | S.σ_UX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) := by have hf_m : Measurable[S.σ_UX] (μ[S.YofA a | S.σ_UX] : P.Ω → ℝ) := (stronglyMeasurable_condExp).measurable have hL_m : Measurable[S.σ_UX] (HA.likelihoodRatio_swapA a) := HA.measurable_likelihoodRatio_swapA a haveI : IsFiniteMeasure (μ.trim S.σ_UX_le) := isFiniteMeasure_trim S.σ_UX_le haveI : SigmaFinite (μ.trim S.σ_UX_le) := inferInstance have hfInt : Integrable (fun ω => (μ[S.YofA a | S.σ_UX]) ω) μ := integrable_condExp have hfLInt : Integrable (fun ω => (μ[S.YofA a | S.σ_UX]) ω * HA.likelihoodRatio_swapA a ω) μ := HA.integrable_condExpYofA_mul_L a have hSpec := HA.likelihoodRatio_swapA_spec a have h_ne_eq : ({ω | S.A ω ≠ a} : Set P.Ω) = {ω | S.A ω = !a} := by ext ω; constructor · intro h; cases ha : S.A ω <;> cases a <;> simp_all · intro h; cases ha : S.A ω <;> cases a <;> simp_all have hL2 := setIntegral_eq_setIntegral_mul_of_likelihoodRatio_swap S.σ_UX_le {ω | S.A ω = a} {ω | S.A ω = !a} (S.measurable_A (measurableSet_singleton a)) (S.measurable_A (measurableSet_singleton (!a))) (hf_m.aestronglyMeasurable.mul hL_m.aestronglyMeasurable) hf_m.aestronglyMeasurable hfInt.integrableOn hfLInt.integrableOn (by have h_ind_eq : (indicator ({ω' | S.A ω' = !a}) (fun _ => (1:ℝ))) = indicator ({ω' | S.A ω' ≠ a}) (fun _ => (1:ℝ)) := by congr 1 ext ω; constructor · intro h; cases ha : S.A ω <;> cases a <;> simp_all · intro h; cases ha : S.A ω <;> cases a <;> simp_all rw [h_ind_eq] exact hSpec) rw [show s' = {ω | S.A ω = !a} from h_ne_eq] exact hL2 -- (4) Replace E[Y(a) | σ_UX] by E[Y | σ_AUX] on {A=a}. -- Corrected: see upper case for the σ_UX/σ_AUX correction. have hCE_eq_arm_AUX : μ[S.YofA a | S.σ_UX] =ᵐ[μ.restrict s] μ[S.Y | S.σ_AUX] := by have h1 : μ[S.YofA a | S.σ_UX] =ᵐ[μ.restrict s] μ[S.YofA a | S.σ_AUX] := ae_restrict_of_ae hLatent.symm exact h1.trans hConsist.symm have hStep4 : (∫ ω in s, (μ[S.YofA a | S.σ_UX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) = (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) := by refine integral_congr_ae ?_ filter_upwards [hCE_eq_arm_AUX] with ω hω rw [hω] -- (5) bridge_q substitution. have hStep5 : (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) = (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * (μ[fun ω' => HA.q (S.Z ω', a, S.X ω') | S.σ_AUX]) ω ∂μ) := by refine integral_congr_ae ?_ have hbridge := HA.bridge_q a filter_upwards [hbridge] with ω hω rw [hω] -- (6,7) Factorisation. See upper-case `hStep67` for full justification. have hStep67 : (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * (μ[fun ω' => HA.q (S.Z ω', a, S.X ω') | S.σ_AUX]) ω ∂μ) = (∫ ω in s, (μ[S.Y | S.σ_AZX]) ω * HA.q (S.Z ω, a, S.X ω) ∂μ) := condIntYq_factor_arm HA a -- (8) Lower envelope inequality (reversed). have hStep8 : (∫ ω in s, Lenv (a, S.X ω) * HA.q (S.Z ω, a, S.X ω) ∂μ) ≤ (∫ ω in s, (μ[S.Y | S.σ_AZX]) ω * HA.q (S.Z ω, a, S.X ω) ∂μ) := by refine MeasureTheory.setIntegral_mono_ae_restrict ?_ ?_ ?_ · exact hL_int.restrict · -- Integrability of `μ[Y|σ_AZX] · q`, supplied by the bundle field -- `integrable_condExpY_mul_q`. exact (HA.integrable_condExpY_mul_q a).restrict · have hLower := hL.2 filter_upwards [hLower] with ω hω have hqnn : 0 ≤ HA.q (S.Z ω, a, S.X ω) := HA.q_nonneg _ exact mul_le_mul_of_nonneg_right hω hqnn -- (9) Reverse bridge substitution for Lenv. Same as upper-case `hStep9`. have hStep9 : (∫ ω in s, Lenv (a, S.X ω) * HA.q (S.Z ω, a, S.X ω) ∂μ) = (∫ ω in s, Lenv (a, S.X ω) * HA.likelihoodRatio_swapA a ω ∂μ) := by have hLmeas_X : Measurable[S.σ_X] (fun ω => Lenv (a, S.X ω)) := by have hLenv_meas : Measurable Lenv := hL.1 have hpair : Measurable[S.σ_X] (fun ω : P.Ω => (a, S.X ω)) := by refine prodMk (m := S.σ_X) (measurable_const) ?_ intro t ht; exact ⟨t, ht, rfl⟩ exact hLenv_meas.comp hpair have hLmeas_AUX : Measurable[S.σ_AUX] (fun ω => Lenv (a, S.X ω)) := hLmeas_X.mono S.σ_X_le_σ_AUX le_rfl have hL_sm : StronglyMeasurable[S.σ_AUX] (fun ω => Lenv (a, S.X ω)) := hLmeas_AUX.stronglyMeasurable have hL1 := setIntegral_mul_condExp_of_stronglyMeasurableLeft (m := S.σ_AUX) S.σ_AUX_le hL_sm hqInt hL_int hs_in_AUX_set rw [hL1] refine integral_congr_ae ?_ have hbridge := HA.bridge_q a filter_upwards [hbridge] with ω hω rw [hω] -- (10) Reverse arm-swap for Lenv. Same as upper-case `hStep10`. have hStep10 : (∫ ω in s, Lenv (a, S.X ω) * HA.likelihoodRatio_swapA a ω ∂μ) = (∫ ω in s', Lenv (a, S.X ω) ∂μ) := by have hLmeas_X : Measurable[S.σ_X] (fun ω => Lenv (a, S.X ω)) := by have hLenv_meas : Measurable Lenv := hL.1 have hpair : Measurable[S.σ_X] (fun ω : P.Ω => (a, S.X ω)) := by refine prodMk (m := S.σ_X) (measurable_const) ?_ intro t ht; exact ⟨t, ht, rfl⟩ exact hLenv_meas.comp hpair have hLmeas_UX : Measurable[S.σ_UX] (fun ω => Lenv (a, S.X ω)) := hLmeas_X.mono S.σ_X_le_σ_UX le_rfl have hL_m : Measurable[S.σ_UX] (HA.likelihoodRatio_swapA a) := HA.measurable_likelihoodRatio_swapA a have hSpec := HA.likelihoodRatio_swapA_spec a have h_ne_eq : ({ω | S.A ω ≠ a} : Set P.Ω) = {ω | S.A ω = !a} := by ext ω; constructor · intro h; cases ha : S.A ω <;> cases a <;> simp_all · intro h; cases ha : S.A ω <;> cases a <;> simp_all have hL2 := setIntegral_eq_setIntegral_mul_of_likelihoodRatio_swap S.σ_UX_le {ω | S.A ω = a} {ω | S.A ω = !a} (S.measurable_A (measurableSet_singleton a)) (S.measurable_A (measurableSet_singleton (!a))) (hLmeas_UX.aestronglyMeasurable.mul hL_m.aestronglyMeasurable) hLmeas_UX.aestronglyMeasurable hLInt.integrableOn hL_int_L.integrableOn (by have h_ind_eq : (indicator ({ω' | S.A ω' = !a}) (fun _ => (1:ℝ))) = indicator ({ω' | S.A ω' ≠ a}) (fun _ => (1:ℝ)) := by congr 1 ext ω; constructor · intro h; cases ha : S.A ω <;> cases a <;> simp_all · intro h; cases ha : S.A ω <;> cases a <;> simp_all rw [h_ind_eq] exact hSpec) rw [show s' = {ω | S.A ω = !a} from h_ne_eq] exact hL2.symm -- Chain: invert hStep1-hStep5/hStep67 around the inequality hStep8. calc (∫ ω in s', Lenv (a, S.X ω) ∂μ) = (∫ ω in s, Lenv (a, S.X ω) * HA.likelihoodRatio_swapA a ω ∂μ) := hStep10.symm _ = (∫ ω in s, Lenv (a, S.X ω) * HA.q (S.Z ω, a, S.X ω) ∂μ) := hStep9.symm _ ≤ (∫ ω in s, (μ[S.Y | S.σ_AZX]) ω * HA.q (S.Z ω, a, S.X ω) ∂μ) := hStep8 _ = (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * (μ[fun ω' => HA.q (S.Z ω', a, S.X ω') | S.σ_AUX]) ω ∂μ) := hStep67.symm _ = (∫ ω in s, (μ[S.Y | S.σ_AUX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) := hStep5.symm _ = (∫ ω in s, (μ[S.YofA a | S.σ_UX]) ω * HA.likelihoodRatio_swapA a ω ∂μ) := hStep4.symm _ = (∫ ω in s', (μ[S.YofA a | S.σ_UX]) ω ∂μ) := hArmSwap_Y.symm _ = (∫ ω in s', (μ[S.YofA a | S.σ_AUX]) ω ∂μ) := hStep2.symm _ = (∫ ω in s', S.YofA a ω ∂μ) := hStep1.symm