给定从独立测试生成的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