“单尾”列文测试

机器算法验证 非参数 f检验 levenes-测试
2022-04-02 01:59:18

F 检验可以是双尾的(测试)或单尾的(测试)。s12s22s12>s22

如何将 Levene/Brown-Forsythe 修改为“单尾”,即测试而不是s12>s22s12s22

这是一个演示:

演示

该图显示了正态分布的训练数据(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 值散点图。红点“太近”()。Fts12<s22

2个回答

Browne-Forsythe 简单地对,其中个观察值分布较大的组将具有较大的均值(Levene 类似,但是根据与组均值的偏差而不是组中位数来定义的。)zij=|yijy~j|yijijyzz

如果您只有两组(其中单尾测试有意义),您只需将其中任何一个测试中的 ANOVA 替换为 s 上的普通双样本 t 检验......除了一个尾。z

当然,您必须先验地指定方向(在查看数据之前)。

如果您已经得出结论,Browne-Forsythe 或 Levene在两组双尾情况下是合适的,那么相应的检验在两组版本中必然是合适的(它拒绝完全相同的情况当双尾工作时) - 因此,唯一剩下的考虑是它是否像双尾一样好用。对论证中对称性的简单考虑就足够了。FtF

因此,如果您认为 Browne-Forsythe 或 Levene 没问题,那么只需进行检验。没什么。t


[注意事项:在 ANOVA 之前使用这样的测试来决定是否对异方差性或更稳健的程序进行一些调整是不可取的。最好在一开始就假设方差不相等。]

我知道这是 2 年后的事了,但您可能想调查您正在使用的软件,看看它是否已经是单向测试。在 R 中有 3 个包含 Brown-Forsythe 的包(这只是 Levene's,但使用中位数而不是平均值),它们都是单面测试。

您可以通过查看给定的 F 值并查看 F 分布表来自行测试。由于 F 分布通常预期用于 ANOVA,并且 ANOVA 通常是单尾的,因此这些表几乎总是以单尾的形式给出。你没有给出具体的值,但这里有一个例子。我从一个正态分布的总体中随机抽取了两个样本(x 和 y,无放回抽样)。两个样本最初具有相似的方差(0.73 和 0.25),并且都是 n=50。我操纵了 x 中的数据以显着改变其方差(6.99)。我运行了 Brown-Forsythe,它给了我 F(1,98)=4.06,p=0.047。我第二次在 xa 中操作数据以稍微降低方差(6.90)。我重新运行了 Brown-Forsythe,这次我得到了 F(1,98)=3.75,p=0.056。

显然,如果 alpha=5%,那么 x 的后两个操纵方差跨越这条线。现在看一下这个 F 分布表——它的顶部有一个图表,以帮助您确保它是一个单尾检验。 https://www.safaribooksonline.com/library/view/random-data-analysis/9780470248775/images/tabA-5a.jpg

对于 df1=1 和 df2=100,单尾 F 分布的临界值为 3.94。由于我们有 df2=98,我们希望我们的特定临界值略高于 3.94,但不会高很多。第一次操作的 F=4.06,p=0.049,第二次是 F=3.75,p=0.056。你可以看到,根据这个单尾 F 分布表,这个 Brown-Forsythe 检验在 R 中产生的 p 值使用的是单尾检验——即 p=0.05 的临界值为 3.94,即正好在两个计算的 F 值之间。如果您可以使用自己的软件来执行 Brown-Forsythe,并操纵您的数据以获得接近 p=0.05 的 F 值,那么您可以将它与这个 F 分布表进行比较,就像我所做的那样你的软件使用什么样的“尾随”来产生它的 p 值

但是,让我们假设您的软件使用双尾测试,但您仍然真的想要一个单尾测试。只要您从 Brown-Forsythe 获得 F 值,您就可以使用表格自行查找。如果您计算的 F 大于表中针对您的自由度的临界值,那么您必须拒绝空值(即方差不相等);如果您计算的 F 值小于表中的临界值,那么您应该无法拒绝空值,并假设方差足够相等,可以继续进行您打算运行的任何参数测试以测试均值。如果您正在运行 R,那么您可以使用 1-pf(F,df1,df2)