Korekta testowania wielu hipotez z Benjamini-Hochberg, wartości p czy wartości q?

22

Biorąc pod uwagę listę wartości p wygenerowanych z niezależnych testów, posortowanych w porządku rosnącym, można zastosować procedurę Benjamini-Hochberga do wielokrotnej korekty testu . Dla każdej wartości p procedura Benjamini-Hochberg umożliwia obliczenie współczynnika fałszywego wykrywania (FDR) dla każdej z wartości p. Oznacza to, że w każdej „pozycji” na posortowanej liście wartości p powie ona, jaka część z nich prawdopodobnie będzie fałszywym odrzuceniem hipotezy zerowej.

Moje pytanie brzmi: czy te wartości FDR należy nazywać „ wartościami q ”, „ poprawionymi wartościami p ”, czy też czymś zupełnie innym?

EDYCJA 2010-07-12: Chciałbym dokładniej opisać używaną procedurę korekcji. Najpierw sortujemy wyniki testu w porządku rosnącym według ich nieskorygowanej oryginalnej wartości p. Następnie iterujemy listę, obliczając to, co interpretuję jako „oczekiwany FDR, gdybyśmy odrzucili hipotezę zerową dla tego i wszystkich testów wcześniejszych na liście”, używając korekcji BH, z wartością alfa równą obserwowanemu , nieskorygowana wartość p dla odpowiedniej iteracji. Następnie, jako to, co nazywamy naszą „wartością q”, przyjmujemy maksimum poprzednio skorygowanej wartości (FDR przy iteracji i - 1) lub bieżącej wartości (w i), aby zachować monotoniczność.

Poniżej znajduje się kod Pythona reprezentujący tę procedurę:

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
źródło
twoje odniesienie do wartości q powinno być projecteuclid.org/…
robin girard
Procedura Benjaminiego-Hochberga nie służy do obliczania FDR, lecz do kontrolowania FDR (utrzymywania go poniżej ustalonego progu)
robin girard
Twoje pytanie w obecnej formie jest trudne do zrozumienia. Co rozumiesz przez „odniesiony”?
robin girard
@robin Bardzo dziękuję za komentarze. Przepraszam za zamieszanie w terminologii. Zaktualizowałem pytanie, aby zawierało pełniejszy opis naszej procedury korekty, w nadziei, że zawiera ona wyjaśnienia. Zaktualizowałem również link do wartości q; dzięki za wskazanie mi tego.
gotgenes

Odpowiedzi:

17

Jak powiedział Robin, masz metodę Benjamini-Hochberg do tyłu. Za pomocą tej metody ustawiasz wartość Q (duże litery Q; maksymalny pożądany FDR), a następnie sortuje twoje porównania na dwa stosy. Celem jest, aby nie więcej niż Q% porównań w stosie „odkrycie” było fałszywe, a zatem co najmniej 100% -Q% jest prawdziwe.

Jeśli obliczyłeś nową wartość dla każdego porównania, która jest wartością Q, przy której to porównania ledwo można by uznać za odkrycie, wówczas te nowe wartości są wartościami q (małe litery q; patrz link do artykułu autorstwa John Storey w pierwotnym pytaniu).

Harvey Motulsky
źródło
Sortujemy wyniki testu w porządku rosnącym według ich nieskorygowanej pierwotnej wartości p, a następnie, iterując po liście, obliczamy oczekiwany FDR, gdybyśmy odrzucili hipotezę zerową dla tego i wszystkich testów wcześniejszych na liście, używając BH korekta z wykorzystaniem alfa równej zaobserwowanej, nieskorygowanej wartości p. Następnie, jako to, co nazywamy naszą „wartością q”, przyjmujemy maksimum poprzednio skorygowanej wartości (FDR przy iteracji i - 1) lub bieżącej wartości (at i), aby zachować monotoniczność. Czy to brzmi jak procedura opisana w drugim akapicie?
gotgenes