Correzione del test di ipotesi multiple con Benjamini-Hochberg, valori p o valori q?


22

Dato un elenco di valori p generati da test indipendenti, ordinati in ordine crescente, è possibile utilizzare la procedura Benjamini-Hochberg per la correzione multipla dei test . Per ciascun valore p, la procedura Benjamini-Hochberg consente di calcolare il False Discovery Rate (FDR) per ciascuno dei valori p. Cioè, ad ogni "posizione" nella lista ordinata dei valori p, ti dirà quale proporzione di quelli è probabile che siano falsi rifiuti dell'ipotesi nulla.

La mia domanda è: questi valori FDR devono essere indicati come " valori q " o come " valori p corretti " o come qualcos'altro?

EDIT 2010-07-12: Vorrei descrivere più a fondo la procedura di correzione che stiamo utilizzando. Innanzitutto, ordiniamo i risultati dei test in ordine crescente in base al loro valore p originale non corretto. Quindi, ripetiamo l'elenco, calcolando ciò che ho interpretato come "previsto dalla FDR se dovessimo rifiutare l'ipotesi nulla per questo e tutti i test precedenti nell'elenco", usando la correzione BH, con un alfa uguale all'osservato , valore p non corretto per la rispettiva iterazione. Prendiamo quindi, come quello che abbiamo chiamato il nostro "valore q", il massimo del valore precedentemente corretto (FDR all'iterazione i - 1) o il valore corrente (at i), per preservare la monotonia.

Di seguito è riportato un codice Python che rappresenta questa procedura:

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

il tuo riferimento a q-value dovrebbe essere projecteuclid.org/…
robin girard

La procedura Benjamini-Hochberg non è per il calcolo del FDR, ma per il controllo del FDR (mantenendolo al di sotto di una soglia predefinita)
robin girard

La tua domanda, così com'è, è difficile da capire. Cosa intendi con "riferito a"?
Robin Girard,

@robin Mille grazie per i tuoi commenti. Chiedo scusa per la mia confusione di terminologia. Ho aggiornato la domanda per includere una descrizione più completa della nostra procedura di correzione, nella speranza che fornisca chiarimenti. Ho anche aggiornato il link q-value; grazie per avermi indicato.
gotgenes,

Risposte:


17

Come ha detto Robin, hai il metodo Benjamini-Hochberg al contrario. Con quel metodo, imposti un valore per Q (maiuscolo Q; il massimo FDR desiderato) e poi ordina i tuoi confronti in due pile. L'obiettivo è che non più del Q% dei confronti nella pila "scoperta" sono falsi, e quindi almeno il 100% -Q% è vero.

Se hai calcolato un nuovo valore per ogni confronto, che è il valore di Q in base al quale quei confronti sarebbero appena considerati una scoperta, quei nuovi valori sono valori q (lettere minuscole q; vedi il link a un articolo di John Storey nella domanda originale).


Ordiniamo i risultati dei test in ordine crescente in base al loro valore p originale non corretto, quindi, ripetendo l'elenco, calcoliamo il FDR previsto se dovessimo rifiutare l'ipotesi nulla per questo e tutti i test precedenti nell'elenco, usando il BH correzione usando un alfa pari al valore p osservato, non corretto. Prendiamo quindi, come quello che abbiamo chiamato il nostro "valore q", il massimo del valore precedentemente corretto (FDR all'iterazione i - 1) o il valore corrente (at i), per preservare la monotonia. Questo suona come la procedura che hai descritto nel tuo secondo paragrafo?
gotgenes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.