Stats multiplecomparisons bonferroni - CyrilB1531/lodestar GitHub Wiki

Development build. This page describes main, not a released package. The latest published Lodestar.Stats is 0.4.0 — read its documentation.

HomeStatsHypothesis tests

MultipleComparisons.Bonferroni

Multiplies each p-value by the family size, clamped at one.

public static double[] Bonferroni(ReadOnlySpan<double> pValues)

ParameterspValues is the family, at least one value, each in [0, 1]; the span is read, never modified.

Returnsdouble[]: the adjusted p-values, in the input's own order.

ExceptionsArgumentException when pValues is empty. ArgumentOutOfRangeException when a value is NaN or outside [0, 1].

Example — five p-values from five tests run together.

using Lodestar.Stats;

double[] family = [0.001, 0.008, 0.039, 0.041, 0.042];
double[] adjusted = MultipleComparisons.Bonferroni(family);

double smallest = Math.Round(adjusted[0], 3);   // => 0.005
double largest = Math.Round(adjusted[4], 3);    // => 0.21

Remarks — this is the correction most people mean by "multiple comparisons": each raw p-value is multiplied by the family size and clamped at 1.0, which controls the chance of any false positive across the whole family, whatever the tests' dependence. It is also the most conservative of the three — every value here comes out larger than BenjaminiHochberg's adjustment of the same family, because Bonferroni is not trying to control the same quantity. A family of twenty tests at the raw 5 % level effectively demands 0.25 % from each one here, which is why it is the right choice when even one false positive is costly and the wrong one when it would only bury real findings under an unreachable bar.

Applies to — net10.0, netstandard2.0.

See alsoMultipleComparisons.BenjaminiHochberg, MultipleComparisons.BenjaminiYekutieli, the Python equivalence table.

⚠️ **GitHub.com Fallback** ⚠️