Estoy examinando algunos datos de cobertura genómica que son básicamente una larga lista (unos pocos millones de valores) de enteros, cada uno de los cuales dice cuán bien (o "profunda") está cubierta esta posición en el genoma.
Me gustaría buscar "valles" en estos datos, es decir, regiones que son significativamente "más bajas" que su entorno.
Tenga en cuenta que el tamaño de los valles que estoy buscando puede variar de 50 bases a unos pocos miles.
¿Qué tipo de paradigmas recomendarías usar para encontrar esos valles?
ACTUALIZAR
Algunos ejemplos gráficos para los datos:
ACTUALIZACIÓN 2
Definir qué es un valle es, por supuesto, una de las preguntas con las que estoy luchando. Estos son obvios para mí:
pero hay algunas situaciones más complejas. En general, hay 3 criterios que considero: 1. La cobertura (¿promedio? ¿Máxima?) En la ventana con respecto al promedio global. 2. La (...) cobertura en la ventana con respecto a su entorno inmediato. 3. ¿Qué tan grande es la ventana: si veo una cobertura muy baja para un período corto es interesante, si veo una cobertura muy baja durante un largo periodo también es interesante, si veo una cobertura ligeramente bajo para un corto espacio es no realmente interesante , pero si veo una cobertura levemente baja durante un período largo, es ... Entonces, es una combinación de la longitud del sapn y su cobertura. Cuanto más largo es, más alto dejo la cobertura y aún lo considero un valle.
Gracias,
Dave
Respuestas:
Podría utilizar algún tipo de enfoque de Monte Carlo, utilizando, por ejemplo, el promedio móvil de sus datos.
Tome un promedio móvil de los datos, usando una ventana de un tamaño razonable (supongo que depende de usted decidir qué tan ancho).
Los datos en sus datos (por supuesto) se caracterizarán por un promedio más bajo, por lo que ahora necesita encontrar algún "umbral" para definir "bajo".
Para hacerlo, intercambia aleatoriamente los valores de sus datos (por ejemplo, usando
sample()
) y recalcula el promedio móvil de sus datos intercambiados.Repita este último pasaje una cantidad de veces razonablemente alta (> 5000) y almacene todos los promedios de estos ensayos. Así que esencialmente tendrá una matriz con 5000 líneas, una por prueba, cada una con el promedio móvil de esa prueba.
En este punto, para cada columna, elige el cuantil del 5% (o 1% o lo que quiera), ese es el valor bajo el cual se encuentra solo el 5% de las medias de los datos aleatorios.
Ahora tiene un "límite de confianza" (no estoy seguro si ese es el término estadístico correcto) para comparar sus datos originales. Si encuentra que una parte de sus datos es inferior a este límite, puede llamar a eso a través.
Por supuesto, tenga en cuenta que ni este ni ningún otro método matemático podría darle alguna indicación de importancia biológica, aunque estoy seguro de que lo sabe.
EDITAR - un ejemplo
Esto solo le permitirá encontrar gráficamente las regiones, pero puede encontrarlas fácilmente usando algo en la línea de
which(values>limits.5)
.fuente
Soy completamente ignorante de estos datos, pero suponiendo que los datos estén ordenados (no a tiempo, sino por posición), tiene sentido utilizar métodos de series de tiempo. Existen muchos métodos para identificar grupos temporales en los datos. Generalmente se usan para encontrar valores altos, pero se pueden usar para valores bajos agrupados. Estoy pensando en las estadísticas de escaneo, las estadísticas de suma acumulativa (y otras) utilizadas para detectar brotes de enfermedades en los datos de conteo. Ejemplos de estos métodos están en el paquete de vigilancia y el paquete DCluster.
fuente
surveillance
yDCluster
, pero ¿podría ser un poco más específico? Ambos son paquetes relativamente grandes y su objetivo parece bastante específico. No estoy seguro de por dónde empezar.Hay muchas opciones para esto, pero una buena: puede usar la
msExtrema
función en elmsProcess
paquete .Editar:
En el análisis del desempeño financiero, este tipo de análisis a menudo se realiza utilizando un concepto de "reducción". El
PerformanceAnalytics
paquete tiene algunas funciones útiles para encontrar estos valles . Podría usar el mismo algoritmo aquí si trata sus observaciones como una serie de tiempo.Aquí hay algunos ejemplos de cómo podría aplicar esto a sus datos (donde las "fechas" son irrelevantes pero solo se usan para ordenar), pero los primeros elementos en el
zoo
objeto serían sus datos:fuente
Algunos de los Bioconductor paquetes 's (por ejemplo, ShortRead , Biostrings , BSgenome , IRanges , genomeIntervals ) ofrecen instalaciones para el tratamiento de posiciones del genoma o vectores de cobertura, por ejemplo, para el chip-ss y la identificación de regiones enriquecidas. En cuanto a las otras respuestas, estoy de acuerdo en que cualquier método que se base en observaciones ordenadas con algún filtro basado en el umbral permitiría aislar la señal baja dentro de un ancho de banda específico.
Quizás también pueda ver los métodos utilizados para identificar las llamadas "islas"
fuente