Correction de tests d'hypothèses multiples avec Benjamini-Hochberg, valeurs p ou valeurs q?

22

Étant donné une liste de valeurs de p générées à partir de tests indépendants, triées par ordre croissant, on peut utiliser la procédure de Benjamini-Hochberg pour la correction de plusieurs tests . Pour chaque valeur de p, la procédure de Benjamini-Hochberg vous permet de calculer le taux de fausse découverte (FDR) pour chacune des valeurs de p. Autrement dit, à chaque "position" dans la liste triée des valeurs de p, il vous indiquera quelle proportion de celles-ci sont susceptibles d'être de faux rejets de l'hypothèse nulle.

Ma question est la suivante: ces valeurs FDR doivent-elles être appelées " valeurs q ", ou " valeurs p corrigées ", ou comme autre chose?

EDIT 2010-07-12: Je voudrais décrire plus en détail la procédure de correction que nous utilisons. Tout d'abord, nous trions les résultats des tests dans l'ordre croissant en fonction de leur valeur p d'origine non corrigée. Ensuite, nous parcourons la liste, calculant ce que j'ai interprété comme "le FDR attendu si nous rejetions l'hypothèse nulle pour cela et tous les tests antérieurs dans la liste", en utilisant la correction BH, avec un alpha égal à l'observé , valeur de p non corrigée pour l'itération respective. Nous prenons ensuite, comme ce que nous avons appelé notre "valeur q", le maximum de la valeur précédemment corrigée (FDR à l'itération i - 1) ou la valeur actuelle (à i), pour préserver la monotonie.

Ci-dessous se trouve du code Python qui représente cette procédure:

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
la source
votre référence sur la valeur q devrait être projecteuclid.org/…
robin girard
La procédure de Benjamini-Hochberg n'est pas pour calculer le FDR, c'est pour contrôler le FDR (le maintenir sous un seuil prédéfini)
robin girard
Votre question, en l'état, est difficile à comprendre. Qu'entendez-vous par «référé»?
robin girard
@robin Merci beaucoup pour vos commentaires. Je m'excuse pour ma confusion de terminologie. J'ai mis à jour la question pour inclure une description plus complète de notre procédure de correction, dans l'espoir qu'elle apporte des éclaircissements. J'ai également mis à jour le lien q-value; merci de m'avoir indiqué ça.
gotgenes

Réponses:

17

Comme l'a dit Robin, vous avez la méthode Benjamini-Hochberg à l'envers. Avec cette méthode, vous définissez une valeur pour Q (Q majuscule; le FDR maximum souhaité) et il trie ensuite vos comparaisons en deux piles. L'objectif est que pas plus de Q% des comparaisons dans la pile "découverte" soient fausses, et donc au moins 100% -Q% sont vrais.

Si vous avez calculé une nouvelle valeur pour chaque comparaison, qui est la valeur de Q à laquelle ces comparaisons seraient à peine considérées comme une découverte, alors ces nouvelles valeurs sont des valeurs q (minuscules q; voir le lien vers un article de John Storey dans la question d'origine).

Harvey Motulsky
la source
Nous trions les résultats des tests dans l'ordre croissant en fonction de leur valeur p d'origine non corrigée, puis, en parcourant la liste, calculons le FDR attendu si nous rejetions l'hypothèse nulle pour cela et tous les tests antérieurs dans la liste, en utilisant le BH correction utilisant un alpha égal à la valeur de p non corrigée observée. Nous prenons ensuite, comme ce que nous avons appelé notre "valeur q", le maximum de la valeur précédemment corrigée (FDR à l'itération i - 1) ou la valeur actuelle (at i), pour préserver la monotonie. Cela ressemble-t-il à la procédure que vous avez décrite dans votre deuxième paragraphe?
gotgenes