Dada una lista de los p-valores generados a partir de pruebas independientes, ordenados en orden ascendente, se puede utilizar el Benjamini-Hochberg procedimiento para pruebas múltiples de corrección. Para cada valor de p, el Benjamini-Hochberg procedimiento permite calcular la Tasa de Falso Descubrimiento (FDR) para cada uno de los p-valores. Es decir, en cada "posición" en la lista ordenada de los valores de p, te dirá qué proporción de los que probablemente sean falsos rechazos de la hipótesis nula.
Mi pregunta es, ¿estos FDR valores a ser referido como el "p-valor", o como "corregido los valores de p", o como algo totalmente?
EDITAR 2010-07-12: me gustaría a más de describir en su totalidad el procedimiento de corrección de la que estamos utilizando. En primer lugar, podemos ordenar los resultados de la prueba en orden creciente por sus onu-corregido original p-valor. Entonces, podemos iterar sobre la lista, el cálculo de lo que he venido interpretando como "el FDR se espera que si vamos a rechazar la hipótesis nula para esta y todas las pruebas antes en la lista," el uso de la B-H de corrección, con un alfa igual a lo observado, la onu ha corregido el p-valor para esa iteración. A continuación, tomamos, como lo hemos estado llamando a nuestro "p-valor", la máxima de la anteriormente valor de corrección (FDR en la iteración i - 1) o el valor de la corriente (i), para preservar la monotonía.
A continuación se presenta el 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