Ausgehend von einer Liste von p-Werten, die aus unabhängigen Tests in aufsteigender Reihenfolge generiert wurden, kann das Benjamini-Hochberg-Verfahren für die Korrektur mehrerer Tests verwendet werden . Mit dem Benjamini-Hochberg-Verfahren können Sie für jeden p-Wert die False Discovery Rate (FDR) berechnen. Das heißt, an jeder "Position" in der sortierten Liste der p-Werte wird angegeben, welcher Anteil davon wahrscheinlich falsche Ablehnungen der Nullhypothese sind.
Meine Frage ist, sind diese FDR-Werte als " q-Werte " oder als " korrigierte p-Werte " oder als etwas ganz anderes zu bezeichnen?
EDIT 2010-07-12: Ich möchte das Korrekturverfahren, das wir verwenden, genauer beschreiben. Zunächst sortieren wir die Testergebnisse in aufsteigender Reihenfolge nach ihrem nicht korrigierten ursprünglichen p-Wert. Dann iterieren wir über die Liste und berechnen, was ich als "den FDR erwartet habe, wenn wir die Nullhypothese für diese und alle Tests vor der Liste ablehnen", wobei wir die BH-Korrektur mit einem Alpha gleich dem beobachteten verwenden , unkorrigierter p-Wert für die jeweilige Iteration. Wir nehmen dann, wie wir es als unseren "q-Wert" bezeichnet haben, das Maximum des zuvor korrigierten Wertes (FDR bei Iteration i - 1) oder den aktuellen Wert (bei i), um die Monotonie zu erhalten.
Nachfolgend finden Sie einen Python-Code, der diese Prozedur darstellt:
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
quelle
Antworten:
Wie Robin sagte, haben Sie die Benjamini-Hochberg-Methode rückwärts. Mit dieser Methode setzen Sie einen Wert für Q (Großbuchstaben Q; der maximal gewünschte FDR) und sortieren dann Ihre Vergleiche in zwei Stapel. Das Ziel ist, dass nicht mehr als Q% der Vergleiche im "Entdeckungs" -Stapel falsch sind und somit mindestens 100% -Q% wahr sind.
Wenn Sie für jeden Vergleich einen neuen Wert berechnet haben, bei dem es sich um den Wert von Q handelt, bei dem diese Vergleiche kaum als Entdeckung gewertet würden, handelt es sich bei diesen neuen Werten um q-Werte (Kleinbuchstaben q; siehe den Link zu einem Artikel von John Storey) in der ursprünglichen Frage).
quelle
i - 1
) oder den aktuellen Wert (ati
), um die Monotonie zu erhalten. Klingt dies nach der Vorgehensweise, die Sie in Ihrem zweiten Absatz beschrieben haben?