Lee–You–Lin maximum pairwise Bayes factor for means#
Status: Equation (4), log-domain, translation, scaling, group-exchange, large-magnitude, and degenerate-feature gates pass.
For each feature, lyl_2samp uses the ordinary centered maximum-likelihood
variances from Equation (4). The published model is Gaussian with a common
covariance matrix under the two samples. At a0=b0=0, its component log
Bayes factor is
0.5 log(gamma / (1 + gamma)) + n / 2 * log(RSS_pooled / RSS_within).
The maximum component log Bayes factor is returned without exponentiation and without a fabricated p-value or universal cutoff. All component values remain available on the immutable result.
By default, alpha=2.01 and
gamma=max(n_x+n_y, p)**(-alpha), matching the paper’s numerical choice and
dimension-dependent rate. Supplying gamma explicitly overrides that rule
and is recorded in diagnostics.
Audit finding#
The legacy C++ helper weakened centering by dividing the squared total by
1 + gamma. That made the result change after adding the same constant to
both groups and does not match Equation (4). pySHT uses exact centered residual
sums; gamma appears only in the prior penalty. A shared inverse-gamma
a0,b0 extension is retained for compatibility and reduces algebraically to
Equation (4) at zero. It is explicitly labeled as a pySHT extension in the
result diagnostics and documentation, not attributed to Equation (4).
Scaling b0 by the square of the data scale preserves the result.
The two samples use a shared deterministic feature-wise anchor before working-scale selection. This preserves group exchange and translation invariance at large common locations without changing the log Bayes factors.
Targeted alternative-evidence gate#
Because lyl_2samp returns a Bayes factor rather than a p-value, this gate
does not invent a rejection cutoff. Seed 2026090322 initializes a
SeedSequence; child 0 drives one persistent PCG64 data stream and child 1 is
reserved as an independent auxiliary stream. In each of 1,000 replications,
child 0 draws x and then y as independent 30-by-60 standard-normal
matrices. The matched null value is mean.lyl_2samp(x, y).statistic; the
alternative value is mean.lyl_2samp(x, y + shift).statistic, where shift
equals 1.0 in the first three coordinates and zero elsewhere. The same
realized (x,y) is used in each matched pair, and the default published
gamma rate is retained.
Replications |
Null median maximum log BF |
Alternative median maximum log BF |
Alternative exceeds matched null |
|---|---|---|---|
1,000 |
-0.817807 |
5.961739 |
992 / 1,000 = 0.992 |
The paired ordering and median displacement establish directional evidence
under this sparse strong alternative; neither number is proposed as a
universal evidence threshold. The audit is reproduced by
python -m tools.mean_power_audits mean.lyl_2samp under Python 3.12.13,
NumPy 2.5.1, and SciPy 1.18.0.
Primary reference: K. Lee, K. You, and L. Lin, Bayesian Optimal Two-Sample Tests for High-Dimensional Gaussian Populations, Bayesian Analysis 19 (2024), 869–893, doi:10.1214/23-BA1373.