F 检验可以是双尾的(测试)或单尾的(测试)。
如何将 Levene/Brown-Forsythe 修改为“单尾”,即测试而不是?
这是一个演示:

该图显示了正态分布的训练数据(n=1000)和一个模型。F 检验用于将一个点的残差 (n=2) 的方差与所有残差的方差 (n=2000) 进行比较,因此如果其残差方差“太大”,则该点为异常值。这些点按 p 值着色,其中亮点适合模型,暗点是异常值,您可以看到双尾 Brown-Forsythe 拒绝离模型太近和太远的点。
注意:不同的非参数单边方差检验也可以。
Glen_b 提供了我需要的信息,但我想我会留下一些实现细节(使用 scipy)。
#basic F-test
F = var(a) / var(b)
Fp = stats.f.sf(F, df1, df2)
#Brown Forsythe
BF, BFp = stats.levene(a, b, center='median')
#two tailed t-test on transformed data
za = abs(a-median(a))
zb = abs(b-median(b))
t, tp_two_tailed = stats.ttest_ind(za, zb)
#the two tailed t test recapitulates the BF test
assert(t**2 == BF)
assert(p_BF == p_two_tailed)
#one tailed t test p value
tp = stats.t.sf(t, df)

检验和双尾 BF 检验(左)以及单尾检验(右)的 p 值散点图。红点“太近”()。