Dada uma lista de valores-p gerados a partir de testes independentes, classificados em ordem crescente, pode-se usar o procedimento de Benjamini-Hochberg para correção de múltiplos testes . Para cada valor p, o procedimento Benjamini-Hochberg permite calcular a taxa de descoberta falsa (FDR) para cada um dos valores p. Ou seja, em cada "posição" na lista ordenada de valores-p, ele informará qual a proporção deles com probabilidade de serem falsas rejeições da hipótese nula.
Minha pergunta é: esses valores de FDR devem ser referidos como " valores q " ou " valores p corrigidos " ou como algo completamente diferente?
EDIT 12-07-2010: Gostaria de descrever mais detalhadamente o procedimento de correção que estamos usando. Primeiro, classificamos os resultados do teste em ordem crescente pelo valor-p original não corrigido. Em seguida, iteramos sobre a lista, calculando o que tenho interpretado como "o FDR esperava se rejeitássemos a hipótese nula para este e todos os testes anteriores na lista", usando a correção BH, com um alfa igual ao observado , valor p não corrigido para a respectiva iteração. Em seguida, tomamos, como o que chamamos de "valor q", o máximo do valor corrigido anteriormente (FDR na iteração i - 1) ou o valor atual (em i), para preservar a monotonicidade.
Abaixo está um código Python que representa este procedimento:
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