![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
当我们深入研究数据,试图发现隐藏的洞察力时,我们经常发现自己在处理一堆假设。想象一下,您正在参加一个聚会,每个客人都戴着面具,而您正试图找出每个人背后的人。你猜的人越多,出错的机会就越大。这就是统计学中多重比较问题的难点——对于你测试的每一个假设,都会弹出另一个假设,从而增加你至少一次出错的机会。让我们用一些 Python 风格和一点幽默来分解这个概念,以使事情变得轻松。
想象一下:您正在进行实验或调查,并且您有一个想要回答的问题(假设)的完整列表。问题是,你问的问题越多,你就越有可能得到错误的答案(你好,第一类错误!)。这是一种统计学上的错误,被称为多重比较问题。
零假设 (H0):零假设是您的基线假设,即没有任何特殊情况发生。这就像在聚会上看着一位客人说:“你只是一个普通人,而不是戴着面具的名人。”当我们测试多个假设时,我们基本上是在检查一组客人,看看他们中是否有人是名人。
第一类错误:第一类错误是指您错误地认为自己发现了一位名人,但实际上只是穿着非常漂亮服装的人。在统计学领域,这是指你错误地拒绝原假设,认为自己发现了显着的影响或差异,而实际上并没有显着的影响或差异。
家庭错误率 (FWER): FWER 就像超级担心在聚会上错误地将一位常客识别为名人一样。它是在您运行的所有测试中至少犯一个 I 类错误的概率。如果您要测试 20 个假设,FWER 会关心在所有 20 个测试中不要犯哪怕一个错误。 Bonferroni 调整等修正通过使显着性标准更加严格来帮助控制 FWER。它们会降低你犯第一类错误的机会,确保你不会因为喊错“名人”而让自己难堪。
错误发现率(FDR): FDR 更多的是关于平衡。这就像在说:“好吧,我可能会错误地称一些常客为名人,但我想确保我能抓住尽可能多的真正的名人。” FDR 控制您所做的所有发现中错误发现的预期比例。与 FWER 相比,它更宽松一些,只要您大部分时间都是正确的,您就可以对某些客人是名人的判断是错误的。当您愿意承担一些风险来发现更多潜在的见解,并承认一些错误警报是该过程的一部分时,这种方法会很有帮助。
Bonferroni 校正是您在聚会上极其谨慎的朋友,可确保您在识别人群中的名人时不会犯任何错误。当你同时考虑多种可能性时,它要求你对每一个发现都格外确定。
怎么运行的:
公式:
其中α是您的初始确定性水平(通常为 0.05), n是您正在测试的假设数量。
影响:
此方法通过将重要结果的标准设置得更高,大大减少了错误发现(I 类错误)的可能性。然而,它的严格性也会阻止你认识到真正的发现,就像你不认识名人,因为你太专注于不犯错误。
从本质上讲,邦费罗尼修正优先考虑避免误报,冒着错过真实发现的风险,使其成为假设检验中的保守选择。
让我们亲自使用一些 Python 代码来浏览这个由多个假设组成的迷宫,同时又不失去理智。
首先,确保您拥有适合这项工作的正确工具:
pip install numpy statsmodels
继续
from statsmodels.stats.multitest import multipletests import numpy as np # Imagine these are your p-values from testing various hypotheses p_values = [0.005, 0.0335, 0.098543, 0.00123] # Let's say we did 4 tests # Applying Bonferroni correction bonf_rejected, bonf_corrected, _, _ = multipletests(p_values, alpha=0.05, method='bonferroni') print("Bonferroni Approach") print(f"Rejected: {bonf_rejected}") print(f"Adjusted p-values: {bonf_corrected}\n")
让我们分解一下对 p 值应用 Bonferroni 校正后得到的结果:
拒绝的假设:Bonferroni 校正告诉我们根据校正的阈值应该拒绝哪些假设。在这里,第一个 ( True
) 和最后一个 ( True
) 假设被拒绝,这意味着即使在调整多重比较后,它们也显示出统计上显着的结果。
调整后的 p 值:调整后的 p 值为[0.02, 0.134, 0.394172, 0.00492]
。该调整增加了 p 值,以控制多次测试带来的 I 类错误(误报)风险增加。
解释:对于 p 值[0.005, 0.00123]
(原始):校正后,这些是[0.02, 0.00492]
。它们仍然低于 0.05 的阈值,表明研究结果具有统计显着性
本杰明-霍赫伯格校正在派对上扮演着平衡守门人的角色,巧妙地管理着将常客误认为名人的风险,但又不过分严格。它找到了一个中间立场,让您能够自信地识别真正的发现,同时接受可控的风险水平。
怎么运行的:
场景:您正在评估多项发现,类似于在聚会常客中发现名人。
Benjamin-Hochberg 的策略:此方法根据每个 p 值的排名调整显着性水平,与严格的 Bonferroni 校正相比,允许采用更灵活的方法。它控制错误发现率 (FDR),即所有发现中错误发现的预期比例。
流程:
对 P 值进行排名:从最小到最大。
调整显着性水平:对于每个假设,它计算不同的阈值,这对于 p 值较小的假设变得更加宽松。这是基于他们的排名和测试总数。
影响:
通过专注于控制 FDR,本杰明-霍赫伯格校正允许更多的发现被认为是重要的,接受其中一些可能是误报,但确保这些错误的总体发生率受到控制。当您正在探索许多假设并愿意容忍一定程度的错误发现以免错过重要发现时,这种方法特别有用。
总之,Benjamin-Hochberg 校正在发现真实效果和控制误报率之间提供了实际的平衡,使其成为研究人员处理多重比较的宝贵工具。
Python 来拯救:
# Benjamini-Hochberg correction for the brave from statsmodels.stats.multitest import multipletests import numpy as np # Imagine these are your p-values from testing various hypotheses p_values = [0.005, 0.0335, 0.098543, 0.00123] # Let's say we did 4 tests # Applying BH correction bh_rejected, bh_corrected, _, _ = multipletests(p_values, alpha=0.05, method='fdr_bh') print("Benjamini-Hochberg Approach") print(f"Rejected: {bh_rejected}") print(f"Adjusted p-values: {bh_corrected}")
拒绝的假设: [True, True, False, True]
指示根据调整后的 p 值拒绝哪些假设。在这种情况下,第一、第二和第四个假设被拒绝,表明这些情况下有重要的发现。
调整后的 p 值: [0.01, 0.04466667, 0.098543, 0.00492]
对应于校正后每个假设的调整后显着性水平。将这些值与 alpha 水平(在本例中为 0.05)进行比较,以确定哪些假设被拒绝。
解释:对于 p 值[0.005, 0.0335, 0.00123]
(原始):校正后,这些是[0.01, 0.04466667, 0.00492]
。它们仍然低于 0.05 的阈值,表明研究结果具有统计显着性
第一和第四假设(双方都认可):这些就像每个人都认识的明确无误的名人,无论你多么谨慎或冒险。两种方法都认为这些发现很重要,就像发现不容错过的一线名人一样。
第二个假设(BH 认可,但 Bonferroni 不认可):这代表了 BH 方法(谨慎与乐观相结合)愿意押注的更小众或崭露头角的名人。然而,极端保守的邦弗罗尼宁愿小心谨慎,因为担心出现假阳性结果而错过了机会。
这个比喻强调了统计校正的敏感性和特异性之间固有的权衡,以及根据您的研究背景或(用我们有趣的比喻,您参加的聚会类型)选择正确方法的重要性。
考虑许多假设有点像在统计错误的雷区中航行。但有了正确的工具(感谢 Python!)和策略(你好 Bonferroni 和 Benjamin-Hochberg),你可以在保持科学完整性的同时处理这个问题。请记住,这一切都是为了平衡风险和回报。无论你是为自己再保险还是追逐黄金,理解和纠正多重比较都会让你的结论更加可靠。祝你数据搜寻愉快!