Evident es una herramienta para realizar cálculos de potencia y tamaño del efecto en datos del microbioma.
Puede instalar la versión más actualizada de Evident desde PyPi usando el siguiente comando:
pip install evident
Evident también está disponible como complemento QIIME 2. Asegúrese de haber activado un entorno QIIME 2 y ejecutar el mismo comando de instalación que el anterior.
Para comprobar que Evident se instaló correctamente, ejecute lo siguiente desde la línea de comando:
qiime evident --help
Deberías ver algo como esto si Evident se instaló correctamente:
Usage: qiime evident [OPTIONS] COMMAND [ARGS]...
Description: Perform power analysis on microbiome data. Supports
calculation of effect size given metadata covariates and supporting
visualizations.
Plugin website: https://github.com/biocore/evident
Getting user support: Please post to the QIIME 2 forum for help with this
plugin: https://forum.qiime2.org
Options:
--version Show the version and exit.
--example-data PATH Write example data and exit.
--citations Show citations and exit.
--help Show this message and exit.
Commands:
multivariate-effect-size-by-category
Multivariate data effect size by category.
multivariate-power-analysis Multivariate data power analysis.
plot-power-curve Plot power curve.
univariate-effect-size-by-category
Univariate data effect size by category.
univariate-power-analysis Univariate data power analysis.
univariate-power-analysis-repeated-measures
Univariate data power analysis for repeated
measures.
visualize-results Tabulate evident results.
Evident puede operar con dos tipos de datos:
Los datos univariados pueden ser diversidad alfa. relaciones logarítmicas, coordenadas PCoA, etc. Los datos multivariados suelen ser una matriz de distancias de diversidad beta.
Para este tutorial usaremos valores de diversidad alfa, pero los comandos son casi los mismos para las matrices de distancia de diversidad beta.
Primero, abra Python e importe Evident
import evident
A continuación, cargue su archivo de diversidad y metadatos de muestra.
import pandas as pd
metadata = pd . read_table ( "data/metadata.tsv" , sep = " t " , index_col = 0 )
faith_pd = metadata [ "faith_pd" ]
La estructura de datos principal en Evident es el 'DataHandler'. Esta es la forma en que Evident almacena los datos y metadatos para los cálculos de potencia. Para nuestro ejemplo de diversidad alfa, cargaremos la clase UnivariateDataHandler
de Evident. UnivariateDataHandler
toma como entrada la serie pandas con los valores de diversidad y el marco de datos de pandas que contiene los metadatos de muestra. De forma predeterminada, Evident solo considerará columnas de metadatos con, como máximo, 5 niveles. Elegimos 5 muestras como valor predeterminado porque las columnas con más de 5 grupos pueden ser indicativas de columnas técnicas (por ejemplo, ID de sujeto). Para modificar este comportamiento, proporcione un valor para el argumento max_levels_per_category
. Puede establecer este valor en -1 para no proporcionar un límite superior de niveles en los que eliminar una columna. Además, Evident no considerará ningún nivel de categoría representado por menos de 3 muestras. Elegimos 3 muestras como valor predeterminado porque los niveles con menos de 3 muestras pueden presentar altas variaciones. Para modificar este comportamiento, utilice el argumento min_count_per_level
(debe ser > 1).
adh = evident . UnivariateDataHandler ( faith_pd , metadata )
A continuación, digamos que queremos obtener el tamaño del efecto de las diferencias de diversidad entre dos grupos de muestras. En nuestro ejemplo tenemos una columna en la "clasificación" de metadatos que compara dos grupos de pacientes con enfermedad de Crohn. Primero, veremos la media de la PD de Faith entre estos dos grupos.
metadata . groupby ( "classification" ). agg ([ "count" , "mean" , "std" ])[ "faith_pd" ]
lo que resulta en
count mean std
classification
B1 99 13.566110 3.455625
Non-B1 121 9.758946 3.874911
Parece que hay una diferencia bastante grande entre estos dos grupos. Lo que nos gustaría hacer ahora es calcular el tamaño del efecto de esta diferencia. Como estamos comparando sólo dos grupos, podemos usar la d de Cohen. Evident elige automáticamente el tamaño del efecto correcto para calcular: ya sea la d de Cohen si solo hay dos categorías o la f de Cohen si hay más de 2.
adh . calculate_effect_size ( column = "classification" )
Esto nos dice que nuestro tamaño del efecto es 1,03.
Ahora digamos que queremos ver cuántas muestras necesitamos para poder detectar esta diferencia con una potencia de 0,8. Evident le permite especificar fácilmente argumentos para observaciones alfa, de potencia o totales para el análisis de potencia. Luego podemos trazar estos resultados como una curva de potencia para resumir los datos.
from evident . plotting import plot_power_curve
import numpy as np
alpha_vals = [ 0.01 , 0.05 , 0.1 ]
obs_vals = np . arange ( 10 , 101 , step = 10 )
results = adh . power_analysis (
"classification" ,
alpha = alpha_vals ,
total_observations = obs_vals
)
plot_power_curve ( results , target_power = 0.8 , style = "alpha" , markers = True )
Cuando inspeccionamos este gráfico, podemos ver cuántas muestras necesitaríamos recolectar para observar el mismo tamaño del efecto en diferentes niveles de significancia y poder.
Evident permite a los usuarios realizar de forma interactiva cálculos de potencia y tamaño del efecto utilizando Bokeh. Para crear una aplicación Bokeh, use el siguiente comando:
from evident . interactive import create_bokeh_app
create_bokeh_app ( adh , "app" )
Esto guardará los archivos necesarios en un nuevo directorio app/
. Navegue hasta el directorio que contiene app/
( no app/
en sí) y ejecute este comando desde su terminal:
bokeh serve --show app
Esto debería abrir una ventana del navegador con las visualizaciones interactivas. La pestaña "Resumen" ofrece una descripción general de los datos y los tamaños/potencia del efecto. Se muestran diagramas de barras que muestran los tamaños del efecto de los metadatos para categorías binarias y multiclase (clasificadas en orden descendente). A la derecha hay una curva de potencia dinámica que muestra el análisis de potencia de las columnas de metadatos. El nivel de significancia, el rango total de observación y las columnas elegidas se pueden modificar utilizando el panel de control en el lado izquierdo de la pestaña.
Cambie a la pestaña "Datos" usando la barra en la parte superior. Aquí puede ver diagramas de caja de los datos para cada categoría de metadatos. Seleccione una columna del menú desplegable para cambiar los datos que se muestran. También puede marcar la casilla "Mostrar puntos de dispersión" para superponer los datos sin procesar en los diagramas de caja.
Tenga en cuenta que, debido a que evidente utiliza Python para realizar los cálculos de potencia, por el momento no es posible integrar esta aplicación interactiva en una página web independiente.
Evident brinda soporte para el popular marco QIIME 2 de análisis de datos de microbiomas. En este tutorial asumimos que está familiarizado con el uso de QIIME 2 en la línea de comando. De lo contrario, le recomendamos que lea la excelente documentación antes de comenzar con Evident. Tenga en cuenta que solo hemos probado Evident en QIIME 2 versión 2021.11. Si está utilizando una versión diferente y encuentra un error, infórmenos a través de un problema.
Para calcular la potencia, podemos ejecutar el siguiente comando:
qiime evident univariate-power-analysis
--m-sample-metadata-file metadata.qza
--m-sample-metadata-file faith_pd.qza
--p-data-column faith_pd
--p-group-column classification
--p-alpha 0.01 0.05 0.1
--p-total-observations $(seq 10 10 100)
--o-power-analysis-results results.qza
Proporcionamos varios archivos de metadatos de muestra a QIIME 2 porque están fusionados internamente. Debe proporcionar un valor para --p-data-column
para que Evident sepa qué columna de los metadatos combinados contiene los valores numéricos (esto solo es necesario para el análisis univariado). En este caso, el nombre del vector faith_pd.qza
es faith_pd
por lo que lo usamos como entrada.
Observe cómo usamos $(seq 10 10 100)
para proporcionar información sobre el argumento --p-total-observations
. seq
es un comando en sistemas tipo UNIX que genera una secuencia de números. En nuestro ejemplo, usamos seq
para generar los valores de 10 a 100 en intervalos de 10 (10, 20, ..., 100).
Con este artefacto de resultados, podemos visualizar la curva de potencia para tener una idea de cómo varía la potencia con el número de observaciones y el nivel de significancia. Ejecute el siguiente comando:
qiime evident plot-power-curve
--i-power-analysis-results results.qza
--p-target-power 0.8
--p-style alpha
--o-visualization power_curve.qzv
Puede ver esta visualización en view.qiime2.org directamente en su navegador.
Evident brinda soporte para paralelizar los cálculos del tamaño del efecto a través de joblib. La paralelización se realiza en diferentes columnas cuando se usa effect_size_by_category
y pairwise_effect_size_by_category
. Considere la paralelización si tiene muchas muestras y/o muchas categorías de metadatos diferentes de interés. De forma predeterminada, no se realiza ninguna paralelización.
Con Python:
from evident . effect_size import effect_size_by_category
effect_size_by_category (
adh ,
[ "classification" , "cd_resection" , "cd_behavior" ],
n_jobs = 2
)
Con QIIME 2:
qiime evident univariate-effect-size-by-category
--m-sample-metadata-file metadata.qza
--m-sample-metadata-file faith_pd.qza
--p-data-column faith_pd
--p-group-columns classification sex cd_behavior
--p-n-jobs 2
--o-effect-size-results alpha_effect_sizes.qza
Si encuentra un error en Evident, publique un problema de GitHub y lo solucionaremos lo antes posible. Agradecemos cualquier idea o actualización/corrección de documentación, así que envíe un problema y/o una solicitud de extracción si tiene alguna idea sobre cómo mejorar Evident.
Si su pregunta es sobre la versión QIIME 2 de Evident, considere publicarla en el foro QIIME 2. Puede abrir un problema en el tablero de soporte de complementos de la comunidad y etiquetar a @gibsramen si es necesario.
Si utiliza Evident en su trabajo, cite nuestra preimpresión en bioRxiv.