Holm–Bonferroni method
DefinitionHolm's step-down count#✓fully proved
Holm's step-down count at level α: the largest r ∈ {0, …, m} such that for every
k ∈ {1, …, r} the k-th smallest p-value is at most α / (m - k + 1), i.e. at least k
p-values are at most α / (m - k + 1). (r = 0 always qualifies.)
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
noncomputable def numBelow (p : Fin m → ℝ) (t : ℝ) : ℕ :=
(Finset.univ.filter fun i => p i ≤ t).card
MathlibExt/Probability/Statistics/MultipleTesting/Basic.lean:106
Uses 1 · Used by 8
DefinitionHypotheses rejected by Holm's step-down procedure#✓fully proved
The hypotheses rejected by Holm's step-down procedure at level α: those whose p-value is
at most α / (m - r + 1) with r = holmIndex α p; these are the hypotheses with the r
smallest p-values.
noncomputable def holmRejections (α : ℝ) (p : Fin m → ℝ) : Finset (Fin m) :=
Finset.univ.filter fun i => p i ≤ α / ((m : ℝ) - holmIndex α p + 1)
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:55
TheoremHolm's step-down count is at most the number of tests#✓fully proved
Holm's step-down count is at most m.
theorem holmIndex_le (α : ℝ) (p : Fin m → ℝ) : holmIndex α p ≤ m
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:55
Uses 2 · Used by 1
TheoremEvery step up to Holm's count succeeds#✓fully proved
Every step up to Holm's count succeeds: for 1 ≤ k ≤ holmIndex α p, at least k
p-values are at most α / (m - k + 1).
theorem le_numBelow_of_le_holmIndex {α : ℝ} {p : Fin m → ℝ} {k : ℕ} (hk₁ : 1 ≤ k)
(hk : k ≤ holmIndex α p) : k ≤ numBelow p (α / ((m : ℝ) - k + 1))
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:55
noncomputable def numBelow (p : Fin m → ℝ) (t : ℝ) : ℕ :=
(Finset.univ.filter fun i => p i ≤ t).card
MathlibExt/Probability/Statistics/MultipleTesting/Basic.lean:106
Uses 2 · Used by 3
TheoremHolm's count is the largest index where every step succeeds#✓fully proved
Holm's count is the largest index up to which every step succeeds.
theorem le_holmIndex {α : ℝ} {p : Fin m → ℝ} {r : ℕ} (hr : r ≤ m)
(h : ∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))) :
r ≤ holmIndex α p
noncomputable def numBelow (p : Fin m → ℝ) (t : ℝ) : ℕ :=
(Finset.univ.filter fun i => p i ≤ t).card
MathlibExt/Probability/Statistics/MultipleTesting/Basic.lean:106
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:55
Uses 2 · Used by 2
TheoremHolm's rejection set is closed under smaller p-values#✓fully proved
The rejection set is closed under smaller p-values.
theorem mem_holmRejections_of_le {α : ℝ} {p : Fin m → ℝ} {i j : Fin m} (hij : p i ≤ p j)
(hj : j ∈ holmRejections α p) : i ∈ holmRejections α p
noncomputable def holmRejections (α : ℝ) (p : Fin m → ℝ) : Finset (Fin m) :=
Finset.univ.filter fun i => p i ≤ α / ((m : ℝ) - holmIndex α p + 1)
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:62
Uses 2 · Used by 1
TheoremNumber of hypotheses rejected by Holm's procedure#✓fully proved
Holm's procedure at level α ≥ 0 rejects exactly holmIndex α p hypotheses.
theorem card_holmRejections {α : ℝ} (hα : 0 ≤ α) (p : Fin m → ℝ) :
(holmRejections α p).card = holmIndex α p
noncomputable def holmRejections (α : ℝ) (p : Fin m → ℝ) : Finset (Fin m) :=
Finset.univ.filter fun i => p i ≤ α / ((m : ℝ) - holmIndex α p + 1)
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:62
noncomputable def holmIndex (α : ℝ) (p : Fin m → ℝ) : ℕ :=
((Finset.range (m + 1)).filter fun r : ℕ =>
∀ k ∈ Finset.Icc (1 : ℕ) r, k ≤ numBelow p (α / ((m : ℝ) - k + 1))).max' ⟨0, by simp; omega⟩
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:55
TheoremHolm rejection bound for a set of hypotheses#✓fully proved
If Holm rejects a hypothesis in J, then some j ∈ J has p-value at most α / |J|:
the first hypothesis of J in sorted order sits at a position k ≤ m - |J| + 1. This
is the shared Holm rejection bound, used both for Holm's FWER control below and for
identifying Holm's procedure with the closure of the Bonferroni local tests.
theorem exists_le_div_card_of_holmRejections {α : ℝ} (hα : 0 ≤ α)
(p : Fin m → ℝ) (J : Finset (Fin m))
(h : (holmRejections α p ∩ J).Nonempty) :
∃ j ∈ J, p j ≤ α / J.card
noncomputable def holmRejections (α : ℝ) (p : Fin m → ℝ) : Finset (Fin m) :=
Finset.univ.filter fun i => p i ≤ α / ((m : ℝ) - holmIndex α p + 1)
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:62
Uses 6 · Used by 2
TheoremHolm's procedure controls the FWER#✓fully proved
If every true-null p-value is valid, the
probability that Holm's step-down procedure at level α ∈ [0, 1] rejects at least one true
null is at most α. No independence is assumed.
theorem measure_holm_familywiseError_le (μ : Measure Ω) (p : Fin m → Ω → ℝ)
(H0 : Finset (Fin m)) (hnull : ∀ i ∈ H0, IsValidPValue μ (p i)) {α : ℝ} (hα₀ : 0 ≤ α)
(hα₁ : α ≤ 1) :
μ {ω | (holmRejections α (fun i => p i ω) ∩ H0).Nonempty} ≤ ENNReal.ofReal α
def IsValidPValue (μ : Measure Ω) (X : Ω → ℝ) : Prop :=
∀ t ∈ Set.Icc (0 : ℝ) 1, μ {ω | X ω ≤ t} ≤ ENNReal.ofReal t
MathlibExt/Probability/Statistics/MultipleTesting/Basic.lean:57
noncomputable def holmRejections (α : ℝ) (p : Fin m → ℝ) : Finset (Fin m) :=
Finset.univ.filter fun i => p i ≤ α / ((m : ℝ) - holmIndex α p + 1)
MathlibExt/Probability/Statistics/MultipleTesting/Holm.lean:62
Sources
- Holm (1979).
Uses 4
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.