Correção de múltiplos testes de hipótese com Benjamini-Hochberg, valores de p ou valores de q?

22

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
gotgenes
fonte
sua referência sobre o valor q deve ser projetecteuclid.org/…
robin girard
O procedimento Benjamini-Hochberg não é para o cálculo do FDR, é para controlar o FDR (mantendo-o sob um limiar pré-definido)
robin Girard
Sua pergunta, como está, é difícil de entender. O que você quer dizer com "referido"?
Robin girard
@robin Muito obrigado por seus comentários. Peço desculpas pela minha confusão de terminologia. Atualizei a questão para incluir uma descrição mais completa do nosso procedimento de correção, na esperança de que ele forneça esclarecimentos. Também atualizei o link do valor q; obrigado por me apontar para isso.
gotgenes 12/08

Respostas:

17

Como Robin disse, você tem o método Benjamini-Hochberg ao contrário. Com esse método, você define um valor para Q (Q maiúsculo; o FDR máximo desejado) e, em seguida, classifica suas comparações em duas pilhas. O objetivo é que não mais que Q% das comparações na pilha "descoberta" sejam falsas e, portanto, pelo menos 100% -Q% sejam verdadeiras.

Se você calculou um novo valor para cada comparação, que é o valor de Q no qual essas comparações apenas seriam consideradas uma descoberta, esses novos valores são valores-q (letras minúsculas q; veja o link para um artigo de John Storey na pergunta original).

Harvey Motulsky
fonte
Classificamos os resultados do teste em ordem crescente pelo valor-p original não corrigido e, repetindo a lista, calculamos o FDR esperado se rejeitássemos a hipótese nula para este e todos os testes anteriores na lista, usando o BH correção usando um alfa igual ao valor de p não corrigido observado. Em seguida, assumimos, como o que chamamos de "valor q", o valor máximo do valor corrigido anteriormente (FDR na iteração i - 1) ou o valor atual (at i), para preservar a monotonicidade. Isso soa como o procedimento que você descreveu no seu segundo parágrafo?
gotgenes