paint-brush
不死鲑鱼的故事:探索多重假设检验中的 Bonferroni 校正经过@igorkhomyanin
2,134 讀數
2,134 讀數

不死鲑鱼的故事:探索多重假设检验中的 Bonferroni 校正

经过 Igor Khomyanin10m2023/05/24
Read on Terminal Reader

太長; 讀書

这篇文章解释了在没有适当调整的情况下测试多个假设的问题。它引入了 Bonferroni 校正作为控制假阳性结果的解决方案。仿真证明了校正的有效性。理解和应用多重假设检验中的校正对于准确的数据分析和决策至关重要。
featured image - 不死鲑鱼的故事:探索多重假设检验中的 Bonferroni 校正
Igor Khomyanin HackerNoon profile picture
0-item


统计推断是根据样本数据得出结论和预测总体的强大工具。它使我们能够做出明智的决定并了解不同选择的有效性。统计推断的一种流行应用是A/B 测试,我们在其中比较两个版本或处理以确定表现更好的那个。但是,当我们向实验中引入更多版本或处理时会发生什么


在实验中引入额外的版本似乎是做出更好决策的机会。不幸的是,如果处理不当,可检验假设数量的增加会导致误导性结果和错误决策。这个挑战被称为多重比较问题


在这篇文章中,我解释了多重假设检验的概念、它的潜在缺陷,并给出了一种由 Python 模拟支持的可能解决方案。


什么是多重假设检验?

要了解多重假设检验,让我们首先检查涉及两个变体的简单 A/B 测试的基本概念。


在 A/B 测试中,我们首先制定两个相互竞争的假设:零假设表示变体之间不存在差异,备择假设表示存在差异。


然后我们设置一个显着性水平,表示为alpha 。该阈值决定了拒绝原假设所需的证据量。常用的显着性水平为 0.05 (5%) 和 0.01 (1%),表示原假设为真时观察到数据的概率。


运行实验并收集数据后,我们计算p 值p 值表示如果零假设为真,则获得与观察到的数据一样极端或更极端的结果的概率。如果 p 值小于显着性水平alpha ,我们拒绝原假设而支持备择假设。


重要的是要注意,低 p 值表明有强有力的证据反对原假设,表明观察到的数据不太可能单独偶然发生。然而,这并不意味着确定性。即使原假设为真,观察到样本之间差异的概率仍然不为零。


当我们遇到有多个替代假设的情况时,我们将其称为多重假设检验。在这种情况下,复杂性会增加,因为我们需要仔细考虑同时进行多项测试的潜在影响。


多重假设检验的缺陷

当我们在不调整显着性水平alpha的情况下检验多个假设时,就会出现多重假设检验的陷阱。在这种情况下,我们无意中夸大了“I 类”错误的比率,这意味着我们倾向于拒绝零假设(找出差异) ,而这个零假设实际上是正确的(根本没有差异)。


我们同时检验的假设越多,找到至少一个假设的 p 值低于alpha并错误地得出显着差异结论的可能性就越大。


为了说明这个问题,请考虑一个场景,我们要测试N假设以确定多个新网页设计中的哪一个可以吸引更多具有所需alpha = 0.05的客户。假设我们知道没有一个新设计比默认设计更好,这意味着零假设适用于所有N个案例。


然而,对于每种情况,有 5% 的概率(假设原假设为真)犯下“I 类”错误误报。换句话说,有 95% 的概率没有正确检测到误报。理论上, N测试中至少出现一次误报的概率等于1 - (1 - alpha)^N = 1 - 0.95^N 。例如,当N = 10时,这个概率约为 40%,明显高于最初的 5%。



当你进一步增加一些可检验的假设时会发生什么



随着我们增加测试假设的数量,问题变得更加明显。即使在只涉及少数变体和子样本的场景中,比较的数量也可以快速累积。例如,为所有用户比较三种设计 D1、D2 和 D3,然后分别为 C1 国家的用户和 C1 以外的国家的用户进行比较,结果总共有九次比较。很容易在不知不觉中进行多重比较,而没有意识到随后 I 类错误率的膨胀。


使用多重假设检验的鲑鱼复活

每个橙色方块都是一个有大脑活动的体素!在死鲑鱼!



让我们深入研究一个有趣的例子,它强调了在测试多个假设时不控制“I 类”错误的后果。


2009 年,一组研究人员对死去的大西洋鲑鱼进行了 fMRI 扫描,并惊人地发现大脑活动就好像它还活着一样!要了解这种意想不到的结果是如何产生的,我们需要探索 fMRI 扫描的本质。


fMRI 扫描仪作为广泛的实验平台,对每位患者进行大量测试。扫描仪监测血液氧合的变化,作为大脑活动的指标。研究人员通常专注于特定的感兴趣区域,这导致他们将整个身体体积划分为称为体素的小立方体。每个体素都代表一个假设,用于测试该特定立方体中是否存在大脑活动。由于对高分辨率扫描的需求, fMRI 扫描仪最终会在单个程序中评估数千个假设。


在这种情况下,研究人员故意没有适当纠正初始显着性水平alpha = 0.001他们在死去的鲑鱼中识别出三个具有大脑活动的体素。然而,这一结果与我们对鲑鱼确实死亡的理解相矛盾。修正显着性水平后,类似复活的现象消失,说明解决 I 类错误问题的重要性。


每当在单个实验中测试多个假设时,应对这一挑战和控制 I 类错误就变得至关重要。可以采用各种统计技术(例如Bonferroni 校正)来减轻与多重假设检验相关的夸大的误报率。


Bonferroni校正

Bonferroni 校正是一种统计程序,专门用于解决假设检验期间多重比较的挑战。

理论

假设您需要在实验期间检验N假设,同时确保 I 类错误的概率保持在alpha以下。


该过程的基本思想很简单:降低拒绝每个替代假设的原假设所需的显着性水平。还记得至少一个误报概率的公式吗?在该公式中,我们有alpha ,可以降低它以降低整体概率。


因此,为了在多个假设中实现至少一个误报的较低概率,您可以将每个 p 值不与alpha进行比较,而是与更小的值进行比较。但“更小的东西”到底是什么?


事实证明,使用bonferroni_alpha = alpha / N作为每个单独假设的显着性水平可确保 I 类错误的总体概率保持在alpha以下。


例如,如果您要检验 10 个假设 ( N = 10 ) 并且所需的显着性水平为 5% ( alpha = 0.05 ),则您应该将每个单独的 p 值与bonferroni_alpha = alpha / N = 0.05 / 10 = 0.005进行比较因此,错误地拒绝至少一个真实零假设的概率不会超过 0.05 的期望水平。


在 Bonferroni 校正后,如果在所有检验零假设中成立,则概率正好等于 alpha



由于布尔不等式,这项非凡的技术之所以奏效,它表明事件并集的概率小于或等于它们各自概率的总和。虽然存在正式的数学证明,但视觉解释提供了直观的理解:


我的涂鸦:)


因此,当在bonferroni_alpha = alpha / N显着性水平上测试每个单独的假设时,我们有一个bonferroni_alpha假阳性概率。对于N个这样的测试,“假阳性”事件并集的概率小于或等于各个概率的总和。其中,在所有 N 个检验零假设都成立的最坏情况下,等于N * bonferroni_alpha = N * (alpha / N) = alpha


实践

为了进一步支持前面讨论的概念,让我们在 Python 中进行模拟我们将观察结果并评估 Bonferroni 校正的有效性。


考虑一个场景,我们在单个测试中有 10 个备选假设。假设在所有 10 种情况下,零假设都为真。您同意alpha = 0.05的显着性水平适合您的分析。然而,如果不对夸大的 I 类错误进行任何校正,我们预计出现至少一个假阳性结果的理论概率约为 40%。在应用 Bonferroni 修正后,我们预计这个概率不会超过 5%。


对于特定的实验,我们要么得到至少一个假阳性,要么没有。只有在多次实验的规模上才能看到这些概率。然后让我们对每个单独的实验进行 100 次模拟,并计算至少有一个假阳性(p 值低于显着性水平)的实验数量!


您可以在我的 GitHub 存储库中找到包含运行此模拟和生成图形的所有代码的.ipynb文件 - IgorKhomyanin/blog/bonferroni-and-salmon


 import numpy as np import matplotlib.pyplot as plt # To replicate the results np.random.seed(20000606) # Some hyperparameters too play with N_COMPARISONS = 10 N_EXPERIMENTS = 100 # Sample p-values # As we assume that null hypothesis is true, # the p-value would be distributed uniformly sample = np.random.uniform(0, 1, size=(N_COMPARISONS, N_EXPERIMENTS)) # Probability of type I error we are ready to accept # Probabiltiy of rejecting null hypothesis when it is actually true alpha = 0.05 # Theoretical False Positive Rate # # 1. # Probability that we cocnlude a significant difference for a given comparison # is equal to alpha by definition in our setting of true null hypothesis # Then [(1 - alpha)] is the probability of not rejecting the null hypothesis # # 2. # As experiments are considered independent, the probability of not rejecting # the null hypothesis in [(1 - alpha)]^N # # 3. # Probability that at least one is a false positive is equal to # 1 - (probability from 2.) prob_at_least_one_false_positive = 1 - ((1 - alpha) ** N_COMPARISONS) # Observed False Positive Rate # We conclude that experiment is a false positive when p-value is less than alpha false_positives_cnt = np.sum(np.sum(sample <= alpha, axis=0) > 0) false_positives_share = false_positives_cnt / N_EXPERIMENTS # Bonferroni correction bonferroni_alpha = alpha / N_COMPARISONS bonferroni_false_positive_comparisons_cnt = np.sum(np.sum(sample <= bonferroni_alpha, axis=0) > 0) bonferroni_false_positive_comparisons_share = bonferroni_false_positive_comparisons_cnt / N_EXPERIMENTS print(f'Theoretical False Positive Rate Without Correction: {prob_at_least_one_false_positive:0.4f}') print(f'Observed False Positive Rate Without Correction: {false_positives_share:0.4f} ({false_positives_cnt:0.0f} out of {N_EXPERIMENTS})') print(f'Observed False Positive Rate With Bonferroni Correction: {bonferroni_false_positive_comparisons_share:0.4f} ({bonferroni_false_positive_comparisons_cnt:0.0f} out of {N_EXPERIMENTS})') # Output: # Theoretical False Positive Rate Without Correction: 0.4013 # Observed False Positive Rate Without Correction: 0.4200 (42 out of 100) # Observed False Positive Rate With Bonferroni Correction: 0.0300 (3 out of 100)


这是结果的可视化:


您可以在我的 GitHub 存储库中找到此图的代码



顶部图片将每个正方形表示为单个比较(假设检验)的 p 值。正方形越暗,p 值越高。由于我们知道原假设在所有情况下都成立,因此任何显着的结果都将是误报。


当 p 值低于显着性水平(由几乎为白色的方块表示)时,我们拒绝原假设并获得假阳性结果。中间的图代表没有校正的实验,而底部的图代表有 Bonferroni 校正的实验。至少有一个假阳性的实验被涂成红色。


显然,修正有效。在没有校正的情况下,我们观察到 100 次实验中有 42 次至少有一次误报,这与理论 ~40% 的概率非常接近。然而,通过 Bonferroni 校正,100 次实验中只有 3 次至少有一次误报,远低于所需的 5% 阈值。


通过这个模拟,我们可以直观地观察到 Bonferroni 校正在减轻误报发生方面的影响,进一步验证了它在多假设检验中的实用性。


结论

在本文中,我解释了多重假设检验的概念并强调了它的潜在危险。当测试多个假设时,例如在 A/B 测试期间进行多重比较,观察到罕见的“假阳性”事件的概率会增加。如果处理不当,这种提高的概率可能会导致关于可能偶然发生的重大影响的错误结论。


此问题的一种可能解决方案是 Bonferroni 校正,它调整每个假设的显着性水平。通过利用布尔不等式,此校正有助于将整体显着性水平控制在所需阈值,从而降低误报风险。


然而,重要的是要认识到每个解决方案都是有代价的。当使用 Bonferroni 校正时,所需的显着性水平会降低,这会影响实验的功效。这意味着可能需要更大的样本量或更强的效果来检测相同的差异。在决定实施 Bonferroni 校正或其他校正方法时,研究人员必须仔细考虑这种权衡。


如果您对本文讨论的内容有任何问题或意见,请随时分享。参与对统计技术的进一步讨论和探索对于更好地理解和在实践中应用至关重要。


参考