Consenso y Anotación

Autor/a

Francisco Ascue Orosco

Introducción al Consenso de Genoma

El consenso de genoma es un proceso fundamental en la bioinformática genómica que implica la generación de una secuencia de ADN representativa a partir de múltiples secuencias de lecturas de ADN. En los proyectos de secuenciación masiva de próxima generación (NGS), las secuencias de lecturas provienen de fragmentos de ADN secuenciados y suelen ser cortas y fragmentadas. El objetivo del consenso de genoma es reconstruir una secuencia de genoma completa y precisa a partir de estas lecturas.

Importancia del Consenso de Genoma

El consenso de genoma es esencial para una variedad de aplicaciones en genómica y biología molecular. Algunos de los usos más comunes incluyen:

  1. Ensamblaje de Genomas: En proyectos de secuenciación de novo, donde no se dispone de una referencia genómica, el consenso de genoma se utiliza para ensamblar el genoma completo a partir de las secuencias de lecturas.

  2. Variación Genómica: La identificación de variantes genómicas, como mutaciones o polimorfismos, se basa en comparaciones entre el genoma de referencia y las lecturas secuenciadas.

  3. Análisis de Metagenómica: En estudios de metagenómica, donde se analiza el ADN de múltiples organismos en una muestra, el consenso de genoma permite identificar y caracterizar las especies presentes.

  4. Estudios de Filogenia: La construcción de árboles filogenéticos y la comparación de genomas entre especies se basan en secuencias de consenso.

Proceso de Consenso de Genoma

El proceso de consenso de genoma implica la alineación y comparación de las secuencias de lecturas contra un genoma de referencia o entre ellas mismas. A medida que se realizan estas comparaciones, se determina la secuencia de consenso, que representa la secuencia de ADN más probable en las regiones cubiertas por las lecturas.

Herramientas y Bibliotecas

Para realizar el consenso de genoma, se utilizan herramientas y bibliotecas bioinformáticas especializadas, como Rsamtools, Samtools, Bioconductor y otras, que permiten el procesamiento eficiente de archivos de alineación (BAM/SAM) y la generación de secuencias de consenso de alta calidad.

El consenso de genoma es una parte esencial de la investigación en genómica y juega un papel crucial en la comprensión de la estructura y la función de los genomas. A medida que avanza la tecnología de secuenciación, las técnicas y las herramientas de consenso de genoma continúan evolucionando para abordar desafíos cada vez más complejos en la genómica.

Generación de consenso genómico

En esta sección, se genera un consenso genómico utilizando la biblioteca Rsamtools. Primero, se cuenta la posición de la alineación y se muestra un resumen:

res <- pileup(bamFile)
head(res)
table(res$strand, res$nucleotide)

Luego, se genera un gráfico de cobertura:

cover <- res[,c("pos","count")]
plot(count ~ pos, cover , pch =".")

Se definen parámetros para el consenso genómico:

p_param <- PileupParam(distinguish_strands = FALSE, 
                       distinguish_nucleotides = TRUE,
                       min_mapq = 10,
                       min_nucleotide_depth = 5,
                       min_base_quality = 10,
                       min_minor_allele_depth = 0)

Y finalmente, se genera el consenso genómico:

res <- pileup(bamFile, pileupParam = p_param)
ex <- head(res, 20000)

cons2  <- consensus_parallel(sup = 9000, ex = res, depth = 1, 
                                    freq_threshold = 0.6, mltcore = 7, 
                             fastafile = "results/SRR15616379.fasta")
Comparativa con Linux

Este código calcula un consenso genómico a partir de la alineación en el archivo BAM utilizando los parámetros especificados y lo almacena en un archivo FASTA en el directorio results/.

Tambien podemos ver este proceso en Linux usando el programa ivar:


samtools mpileup -A -d 0 -Q 0 SRR15616379.bam | ivar consensus -p ref -q 10 -t 0.6 -n N -m 20

Anotación de Genomas Bacterianos

En esta sección, aprenderás a realizar la anotación de genomas bacterianos utilizando la herramienta Prokka. Asegúrate de seguir los pasos detallados a continuación.

Paso 1: Instalación de Prokka

Antes de comenzar con la anotación, primero debemos instalar la herramienta Prokka. Si aún no lo has hecho, puedes encontrar instrucciones detalladas en el índice del curso.

Paso 2: Anotación con Prokka

Una vez que tengas Prokka instalado, puedes usar el siguiente comando para realizar la anotación de tu genoma bacteriano:

# Anotación de genomas bacterianos
prokka --kingdom Bacteria --outdir annotation/ --centre X --compliant ref.fa

Este comando creará una carpeta llamada annotation/ donde podrás encontrar los diferentes formatos de anotación generados por Prokka.

Paso 3: Edición de los Datos de Anotación

Antes de trabajar con los datos de anotación, es importante realizar algunas ediciones. A continuación, se presentan los comandos necesarios:

# Retirar el encabezado del archivo GFF
head -n 2 PROKKA_10052023.gff > annotation.gff

# Retirar las secuencias fasta no deseadas del archivo GFF
fgrep "gnl|X|DKBIDJJK_1" PROKKA_10052023.gff | fgrep -v ">gnl" >> annotation.gff
cut -d";" -f1 annotation.gff > annotation2.gff

# Retirar el encabezado del archivo TSV
head -n 1 PROKKA_10052023.tsv | cut -f1,2,3,4 > annotation.csv

# Retirar las anotaciones del archivo TSV
awk '{print $1"\t"$2"\t"$3"\t"$4}' PROKKA_10052023.tsv >> annotation.tsv

Paso 4: Procesamiento de Datos en R

Ahora que hemos preparado los datos, podemos cargarlos en R y realizar análisis adicionales. Asegúrate de tener las bibliotecas necesarias instaladas. Puedes ejecutar estos comandos en R:


Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union

Attaching package: 'ape'
The following object is masked from 'package:dplyr':

    where
# Leer los datos de anotación desde un archivo GFF
gfff <- read.gff("data/annotation/annotation2.gff")
gfff$attributes <- gsub("ID=", "", gfff$attributes, fixed = TRUE)
gfff$attributes <- gsub("_gene", "", gfff$attributes, fixed = TRUE)
# Leer los datos de anotación desde un archivo TSV
df <- read.table("data/annotation/annotation.tsv", sep = "\t", header = TRUE)
df <- df %>% dplyr::filter(ftype %in% c("CDS", "rRNA", "tRNA"))
# Filtrar y procesar los datos
gffCDS <- gfff %>% dplyr::filter(type %in% c("CDS", "rRNA", "tRNA"))
tmp <- merge(x = df, y = gffCDS, by.y = "attributes", by.x = "locus_tag", all = TRUE)
# Contar el número de etiquetas de locus únicas
length(unique(tmp$locus_tag))
[1] 1143
# Filtrar y seleccionar las primeras 20 filas de genes no hipotéticos
genes_annot <- tmp %>% dplyr::filter(gene != "hypothetical") %>% head(20)
colnames(genes_annot) <- c("locus", "ftype", "width", "gene", "seqid", "source", "type",
                           "start", "end", "score", "strand", "phase")

Paso 5: Visualización en Gráfico Circular

Finalmente, podemos visualizar los datos de anotación en un gráfico circular utilizando la biblioteca circlize. Ejecuta estos comandos en R:

# Cargar bibliotecas necesarias
library(circlize)
========================================
circlize version 0.4.15
CRAN page: https://cran.r-project.org/package=circlize
Github page: https://github.com/jokergoo/circlize
Documentation: https://jokergoo.github.io/circlize_book/book/

If you use it in published research, please cite:
Gu, Z. circlize implements and enhances circular visualization
  in R. Bioinformatics 2014.

This message can be suppressed by:
  suppressPackageStartupMessages(library(circlize))
========================================

Attaching package: 'circlize'
The following object is masked from 'package:ape':

    degree
# Crear un dataframe con los datos de anotación
df <- data.frame(
  name  = genes_annot$gene,
  start = genes_annot$start,
  end   = genes_annot$end,
  tipo = genes_annot$ftype
)

# Inicializar el gráfico circular
circos.genomicInitialize(df)

# Configurar una pista en el gráfico circular
circos.track(
  ylim = c(0, 1),  # Rango de valores en el eje Y
  bg.col = viridis(20),  # Colores de fondo de las regiones
  bg.border = NA,  # Sin borde en las regiones
  track.height = 0.05  # Altura de la pista
)

En resumen

En esta sección, hemos cargado las bibliotecas necesarias y creado un dataframe df con los datos de anotación. Luego, inicializamos el gráfico circular utilizando circos.genomicInitialize y configuramos una pista en el gráfico circular con circos.track.

Volver arriba