Dada una lista de valores p generados a partir de pruebas independientes, ordenadas en orden ascendente, se puede usar el procedimiento de Benjamini-Hochberg para la corrección de pruebas múltiples . Para cada valor p, el procedimiento Benjamini-Hochberg le permite calcular la tasa de descubrimiento falso (FDR) para cada uno de los valores p. Es decir, en cada "posición" en la lista ordenada de valores p, le dirá qué proporción de ellos es probable que sean rechazos falsos de la hipótesis nula.
Mi pregunta es, ¿estos valores FDR se denominarán " valores q ", o " valores p corregidos ", o como algo completamente diferente?
EDITAR 2010-07-12: Me gustaría describir más completamente el procedimiento de corrección que estamos utilizando. Primero, clasificamos los resultados de la prueba en orden creciente por su valor p original no corregido. Luego, iteramos sobre la lista, calculando lo que he estado interpretando como "el FDR esperado si rechazáramos la hipótesis nula para esta y todas las pruebas anteriores en la lista", utilizando la corrección BH, con un alfa igual al observado , valor p no corregido para la iteración respectiva. Luego tomamos, como lo que hemos estado llamando nuestro "valor q", el máximo del valor previamente corregido (FDR en la iteración i - 1) o el valor actual (en i), para preservar la monotonicidad.
A continuación se muestra un código de Python que representa este procedimiento:
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
fuente
Respuestas:
Como dijo Robin, tienes el método Benjamini-Hochberg al revés. Con ese método, establece un valor para Q (Q mayúscula; el FDR máximo deseado) y luego clasifica sus comparaciones en dos montones. El objetivo es que no más del Q% de las comparaciones en la pila de "descubrimiento" sean falsas y, por lo tanto, al menos 100% -Q% sean verdaderas.
Si calculó un nuevo valor para cada comparación, que es el valor de Q en el que esas comparaciones apenas se considerarían un descubrimiento, entonces esos nuevos valores son valores q (minúscula q; vea el enlace a un artículo de John Storey en la pregunta original).
fuente
i - 1
) o el valor actual (ati
), para preservar la monotonicidad. ¿Suena esto como el procedimiento que describiste en tu segundo párrafo?