使用Benjamini-Hochberg,p值或q值进行多重假设检验校正?


22

给定从独立测试生成的p值列表(按升序排列),可以使用Benjamini-Hochberg过程进行多次测试校正。对于每个p值,Benjamini-Hochberg过程使您可以计算每个p值的错误发现率(FDR)。也就是说,在p值排序的列表中的每个“位置”,它将告诉您其中有多少比例可能是对原假设的错误拒绝。

我的问题是,这些FDR值是被称为“ q值 ”,还是被称为“ 校正后的p值 ”,或者完全称为其他

EDIT 2010-07-12:我想更全面地描述我们正在使用的更正程序。首先,我们按未校正的原始p值对测试结果进行递增排序。然后,我们遍历列表,使用BH校正计算出我一直解释为“如果我们要拒绝此假设以及列表中所有测试的零假设的FDR期望值”,则alpha等于观察到的,各个迭代的未校正p值。然后,我们一直称其为“ q值”,以保留先前的校正值(迭代i-1的FDR)或当前值(i的最大值)的最大值,以保持单调性。

以下是一些代表此过程的Python代码:

def calc_benjamini_hochberg_corrections(p_values, num_total_tests):
    """
    Calculates the Benjamini-Hochberg correction for multiple hypothesis
    testing from a list of p-values *sorted in ascending order*.

    See
    http://en.wikipedia.org/wiki/False_discovery_rate#Independent_tests
    for more detail on the theory behind the correction.

    **NOTE:** This is a generator, not a function. It will yield values
    until all calculations have completed.

    :Parameters:
    - `p_values`: a list or iterable of p-values sorted in ascending
      order
    - `num_total_tests`: the total number of tests (p-values)

    """
    prev_bh_value = 0
    for i, p_value in enumerate(p_values):
        bh_value = p_value * num_total_tests / (i + 1)
        # Sometimes this correction can give values greater than 1,
        # so we set those values at 1
        bh_value = min(bh_value, 1)

        # To preserve monotonicity in the values, we take the
        # maximum of the previous value or this one, so that we
        # don't yield a value less than the previous.
        bh_value = max(bh_value, prev_bh_value)
        prev_bh_value = bh_value
        yield bh_value

您对q值的参考应该是projecteuclid.org/…–
罗宾吉拉德

Benjamini-Hochberg过程不是用于计算FDR,而是用于控制FDR(将其保持在预定义的阈值下)
罗宾吉拉德

就目前而言,您的问题很难理解。您所说的“指”是什么意思?
罗宾吉拉德

@robin非常感谢您的评论。对于术语的混淆,我深表歉意。我已对问题进行了更新,以包括对我们的更正程序的更完整的描述,希望可以对它进行澄清。我还更新了q值链接;感谢您指出我的意思。
gotgenes

Answers:


17

正如罗宾所说,您已经将本杰米尼-霍格伯格方法倒退了。使用该方法,您可以为Q设置一个值(大写Q;所需的最大FDR),然后将比较结果分为两堆。目的是在“发现”堆中不超过Q%的比较是错误的,因此至少100%-Q%是正确的。

如果您为每个比较计算了一个新值,即比较几乎不会被视为发现的Q值,那么这些新值就是q值(小写q;请参见John Storey的论文链接)在原始问题中)。


我们使用未校正的原始p值对测试结果进行升序排序,然后遍历列表,如果我们要拒绝此假设以及列表中所有测试的零假设,则使用BH来计算期望的FDR。使用等于观察到的未校正p值的alpha进行校正。然后,就像我们一直所说的“ q值”一样,我们采用先前校正后的值(“迭代”时的FDR i - 1)或当前值(“ at” i)的最大值,以保持单调性。这听起来像您在第二段中描述的过程吗?
gotgenes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.