1. Introducción

Cuando trabaja en su propio proyecto genómico o utiliza genomas disponibles públicamente para análisis comparativos, es fundamental evaluar la calidad de sus datos. En los últimos años, se han desarrollado varias herramientas y propuesto diversas métricas para evaluar la calidad del ensamblaje y la anotación de un genoma.

El paquete cogeqc ayuda a los usuarios a interpretar las estadísticas de ensamblaje de su genoma comparándolas con estadísticas de genomas disponibles públicamente en el NCBI. Además, cogeqc también proporciona una interfaz para BUSCO, una herramienta popular para evaluar la integridad del espacio génico. Están disponibles funciones gráficas para crear gráficos listos para publicación que resumen los resultados del control de calidad.

2. Instalación

Puede instalar cogeqc desde Bioconductor con el siguiente código:

if(!requireNamespace('BiocManager', quietly = TRUE))
  install.packages('BiocManager')
BiocManager::install("cogeqc")

Una vez instalado, cargue el paquete:

library(cogeqc)

3. Evaluación de la calidad del ensamblaje del genoma: estadísticas en contexto

Al analizar e interpretar las estadísticas del ensamblaje del genoma, a menudo es útil poner sus estadísticas en contexto comparándolas con las de genomas de especies estrechamente relacionadas o incluso la misma especie. cogeqc proporciona a los usuarios una interfaz para la API de NCBI Datasets, que se puede utilizar para recuperar estadísticas resumidas de los genomas en NCBI.

3.1 Obtención de estadísticas de ensamblaje para genomas NCBI

Para obtener un data frame de estadísticas resumidas para genomas NCBI de un taxón en particular, se utiliza la función get_genome_stats(). En el parámetro taxon, debe especificar el taxón del cual se extraerán los datos. Esto se puede hacer pasando el nombre del taxón (carácter) o su ID de taxonomía de NCBI (numérico).

Por ejemplo, el siguiente código muestra cómo extraer estadísticas sobre los genomas de maíz (Zea mays):

# Ejemplo 1: obtener estadísticas para todos los genomas de maíz usando el nombre del taxón
maize_stats <- get_genome_stats(taxon = "Zea mays")
head(maize_stats)
##         accession  source species_taxid species_name species_common_name
## 1 GCA_902167145.1 GENBANK          4577     Zea mays                <NA>
## 2 GCF_902167145.1  REFSEQ          4577     Zea mays                <NA>
## 3 GCA_022117705.1 GENBANK          4577     Zea mays                <NA>
## 4 GCA_051912235.1 GENBANK          4577     Zea mays                <NA>
## 5 GCA_029775835.1 GENBANK          4577     Zea mays                <NA>
## 6 GCA_965287125.1 GENBANK          4577     Zea mays                <NA>
##   species_ecotype species_strain species_isolate species_cultivar
## 1            <NA>             NA            <NA>              B73
## 2            <NA>             NA            <NA>              B73
## 3            <NA>             NA            <NA>        Mo17-2021
## 4            <NA>             NA            <NA>            LH244
## 5            <NA>             NA            <NA>           LT2357
## 6            <NA>             NA            <NA>             <NA>
##   assembly_level assembly_status                      assembly_name
## 1     Chromosome         current           Zm-B73-REFERENCE-NAM-5.0
## 2     Chromosome         current           Zm-B73-REFERENCE-NAM-5.0
## 3           <NA>         current Zm-Mo17-REFERENCE-CAU-T2T-assembly
## 4     Chromosome         current                       ASM5191223v1
## 5     Chromosome         current                       ASM2977583v1
## 6     Chromosome         current                  Zm-EA1197-AMZ-1.0
##   assembly_type submission_date
## 1       haploid              NA
## 2       haploid              NA
## 3       haploid              NA
## 4       haploid              NA
## 5       haploid              NA
## 6       haploid              NA
##                                                                              submitter
## 1                                                                             MaizeGDB
## 2                                                                             MaizeGDB
## 3                                                         China Agriculture University
## 4                                                         China Agriculture University
## 5                                                       Beijing Lantron Seed Co., LTD.
## 6 Institut national de recherche pour l'agriculture, l'alimentation et l'environnement
##                       sequencing_technology atypical  refseq_category
## 1                             PacBio SEQUEL    FALSE reference genome
## 2                             PacBio SEQUEL    FALSE reference genome
## 3        Oxford Nanopore PromethION; PacBio    FALSE             <NA>
## 4 Oxford Nanopore PromethION; PacBio Sequel    FALSE             <NA>
## 5                             PacBio Sequel    FALSE             <NA>
## 6                       Illumina HiSeq 2500    FALSE             <NA>
##   chromosome_count sequence_length ungapped_length contig_count contig_N50
## 1               10      2182075994      2178268108         1393   47037903
## 2               10      2182075994      2178268108         1393   47037903
## 3               10      2178604320      2178604320           10  220303002
## 4               10      2286149880      2286149380           15  210418674
## 5               10      2106865080      2106637080          460   15883073
## 6               10      2226752758      2214060529        41618     119671
##   contig_L50 scaffold_count scaffold_N50 scaffold_L50 GC_percent
## 1         16            685    226353449            5       47.0
## 2         16            685    226353449            5       47.0
## 3          5             10    220303002            5       47.0
## 4          5             10    228666739            5       46.5
## 5         41             10    222005600            5       47.0
## 6       5706             10    239478437            5       46.5
##   annotation_provider annotation_release_date gene_count_total
## 1                <NA>                    <NA>               NA
## 2         NCBI RefSeq              2025-02-14            49888
## 3                <NA>                    <NA>               NA
## 4                <NA>                    <NA>               NA
## 5                <NA>                    <NA>               NA
## 6                <NA>                    <NA>               NA
##   gene_count_coding gene_count_noncoding gene_count_pseudogene gene_count_other
## 1                NA                   NA                    NA               NA
## 2             34313                10353                  5222               NA
## 3                NA                   NA                    NA               NA
## 4                NA                   NA                    NA               NA
## 5                NA                   NA                    NA               NA
## 6                NA                   NA                    NA               NA
##   CC_ratio
## 1    139.3
## 2    139.3
## 3      1.0
## 4      1.5
## 5     46.0
## 6   4161.8

También puede incluir filtros en sus búsquedas pasando una lista de pares clave-valor. Por ejemplo, para obtener solo genomas de maíz a escala cromosómica y anotados, ejecutaría:

# Obtener genomas de maíz a escala cromosómica con anotación
## Crear lista de filtros
filt <- list(
    filters.has_annotation = "true",
    filters.assembly_level = "chromosome"
)

## Obtener datos filtrados
filtered_maize_genomes <- get_genome_stats(taxon = "Zea mays", filters = filt)
head(filtered_maize_genomes)
##         accession  source species_taxid species_name species_common_name
## 1 GCF_902167145.1  REFSEQ          4577     Zea mays                  NA
## 2 GCA_049266015.1 GENBANK          4577     Zea mays                  NA
## 3 GCA_003185045.1 GENBANK          4577     Zea mays                  NA
## 4 GCA_000005005.6 GENBANK          4577     Zea mays                  NA
## 5 GCF_000005005.2  REFSEQ          4577     Zea mays                  NA
##   species_ecotype species_strain species_isolate species_cultivar
## 1              NA             NA            <NA>              B73
## 2              NA             NA       B73plus2B              B73
## 3              NA             NA            <NA> inbred line Mo17
## 4              NA             NA            <NA>              B73
## 5              NA             NA            <NA>              B73
##   assembly_level assembly_status             assembly_name assembly_type
## 1     Chromosome         current  Zm-B73-REFERENCE-NAM-5.0       haploid
## 2     Chromosome         current              ASM4926601v1       haploid
## 3     Chromosome         current Zm-Mo17-REFERENCE-CAU-1.0       haploid
## 4     Chromosome         current             B73 RefGen_v4       haploid
## 5     Chromosome      suppressed             B73 RefGen_v4       haploid
##   submission_date                     submitter sequencing_technology atypical
## 1              NA                      MaizeGDB         PacBio SEQUEL    FALSE
## 2              NA   Chinese Academy of Sciences            HiFi; Hi-C    FALSE
## 3              NA China Agricultural University                PacBio    FALSE
## 4              NA                 maizesequence                PacBio    FALSE
## 5              NA                 maizesequence                PacBio    FALSE
##    refseq_category chromosome_count sequence_length ungapped_length
## 1 reference genome               10      2182075994      2178268108
## 2             <NA>               11      2378498113      2378478313
## 3             <NA>               10      2182605176      2147450341
## 4             <NA>               10      2134373047      2103640169
## 5             <NA>               10      2134373047      2103640169
##   contig_count contig_N50 contig_L50 scaffold_count scaffold_N50 scaffold_L50
## 1         1393   47037903         16            685    226353449            5
## 2         1305   45343449         17           1206    229238952            5
## 3         9040    1491782        455           2203    220382597            5
## 4         2787    1279870        506            596     10679170           62
## 5         2787    1279870        506            596     10679170           62
##   GC_percent           annotation_provider annotation_release_date
## 1       47.0                   NCBI RefSeq              2025-02-14
## 2       46.5   Chinese Academy of Sciences              2025-04-03
## 3       47.0 China Agricultural University              2018-06-13
## 4       47.0                 maizesequence              2017-02-07
## 5         NA                   NCBI RefSeq              2020-04-23
##   gene_count_total gene_count_coding gene_count_noncoding gene_count_pseudogene
## 1            49888             34313                10353                  5222
## 2            42607             42607                   NA                    NA
## 3            38620             38620                   NA                    NA
## 4            39320             39320                   NA                    NA
## 5            45960             33461                 7556                  4939
##   gene_count_other CC_ratio
## 1               NA 139.3000
## 2               NA 118.6364
## 3               NA 904.0000
## 4               NA 278.7000
## 5                4 278.7000

3.2 Comparación de estadísticas personalizadas con estadísticas de NCBI

Supongamos que secuenció un nuevo genoma y desea comparar sus estadísticas con las de NCBI para identificar posibles problemas (por ejemplo, si el tamaño del genoma parece erróneo o el número de genes es inusual).

Utilice la función compare_genome_stats(). Esta función incluirá sus valores observados en la distribución de los genomas de NCBI y devolverá el percentil y el rango de sus valores.

Ejemplo con un genoma de maíz hipotético: *Tamaño del genoma = 2.4 Gb* Número de genes = 50,000 * Relación CC (CC ratio) = 2

Nota: La relación CC es la proporción entre el número de contigs y el número de pares de cromosomas, propuesta como una medida de contigüidad comparable entre especies.

# Primero asegúrese de tener los datos de referencia (si no los cargó antes)
# maize_stats <- get_genome_stats(taxon = "Zea mays")

# Crear un data frame con sus estadísticas personalizadas
# La columna 'accession' es obligatoria.
my_stats <- data.frame(
    accession = "mi_maiz_personalizado",
    sequence_length = 2.4 * 1e9,
    gene_count_total = 50000,
    CC_ratio = 2
)
# Comparar estadísticas
compare_genome_stats(ncbi_stats = maize_stats, user_stats = my_stats)
##               accession         variable percentile rank
## 1 mi_maiz_personalizado  sequence_length 0.96875000    7
## 2 mi_maiz_personalizado gene_count_total 1.00000000    1
## 3 mi_maiz_personalizado         CC_ratio 0.02521008    3

3.3 Visualización de estadísticas resumidas del ensamblaje

Para tener una representación visual de las estadísticas resumidas obtenidas, utilizará la función plot_genome_stats().

# Generar gráficos resumen
# Requiere que el objeto 'maize_stats' esté cargado en el entorno.
plot_genome_stats(ncbi_stats = maize_stats)

Finalmente, puedes pasar tu marco de datos (data frame) de estadísticas observadas para resaltar tus valores (como puntos rojos) en las distribuciones.

plot_genome_stats(ncbi_stats = maize_stats, user_stats = my_stats)

4. Evaluación de la integridad del espacio génico con BUSCO

Una de las métricas más comunes para evaluar la integridad del espacio génico es BUSCO (Best Universal Single-Copy Orthologs) (Simão et al. 2015). cogeqc permite a los usuarios ejecutar BUSCO desde una sesión de R y visualizar los resultados gráficamente. Las estadísticas resumidas de BUSCO le ayudarán a evaluar qué ensamblajes tienen alta calidad en función del porcentaje de BUSCOs completos.

4.1 Ejecución de BUSCO

Para ejecutar BUSCO desde R, utilizará la función run_busco().

Nota: Debe tener BUSCO instalado y en su PATH para usar run_busco(). Puede verificar si BUSCO está instalado ejecutando busco_is_installed(). Si aún no lo tiene, puede instalarlo manualmente o usar un entorno virtual de conda con el paquete de Bioconductor Herper (Paul, Carroll, and Barrows 2021).

Aquí, usaremos un archivo FASTA de ejemplo que contiene las primeras 1,000 líneas del genoma de Herbaspirillum seropedicae SmR1 (GCA_000143225), que se descargó de Ensembl Bacteria. Ejecutaremos BUSCO utilizando burkholderiales_odb10 como el conjunto de datos de linaje. Para ver todos los conjuntos de datos disponibles, ejecute list_busco_datasets().

# Path to FASTA file
sequence <- system.file("extdata", "Hse_subset.fa", package = "cogeqc")

# Path to directory where BUSCO datasets will be stored
download_path <- paste0(tempdir(), "/datasets")

# Run BUSCO if it is installed
if(busco_is_installed()) {
  run_busco(sequence, outlabel = "Hse", mode = "genome",
            lineage = "burkholderiales_odb10",
            outpath = tempdir(), download_path = download_path)
}
# Path to output directory
output_dir <- system.file("extdata", package = "cogeqc")

busco_summary <- read_busco(output_dir)
busco_summary
##                Class Frequency           Lineage
## 1        Complete_SC      1412 chlorophyta_odb10
## 2 Complete_duplicate         4 chlorophyta_odb10
## 3         Fragmented        35 chlorophyta_odb10
## 4            Missing        68 chlorophyta_odb10
#>                Class Frequency           Lineage
#> 1        Complete_SC      1412 chlorophyta_odb10
#> 2 Complete_duplicate         4 chlorophyta_odb10
#> 3         Fragmented        35 chlorophyta_odb10
#> 4            Missing        68 chlorophyta_odb10

Este es un ejemplo de salida para una ejecución de BUSCO con un solo archivo FASTA. También puedes especificar un directorio que contenga múltiples archivos FASTA en el argumento sequence de run_busco(). De esta manera, BUSCO se ejecutará en modo por lotes (batch mode). Veamos cómo es la salida de BUSCO en modo por lotes:

data(batch_summary)
batch_summary
##                Class Frequency               Lineage   File
## 1        Complete_SC      98.5 burkholderiales_odb10 Hse.fa
## 2        Complete_SC      98.8 burkholderiales_odb10 Hru.fa
## 3 Complete_duplicate       0.7 burkholderiales_odb10 Hse.fa
## 4 Complete_duplicate       0.7 burkholderiales_odb10 Hru.fa
## 5         Fragmented       0.4 burkholderiales_odb10 Hse.fa
## 6         Fragmented       0.3 burkholderiales_odb10 Hru.fa
## 7            Missing       0.4 burkholderiales_odb10 Hse.fa
## 8            Missing       0.2 burkholderiales_odb10 Hru.fa

La única diferencia entre este marco de datos (data frame) y el anterior es la columna File, que contiene información sobre el archivo FASTA. El conjunto de datos de ejemplo batch_summary contiene la salida de run_busco() utilizando un directorio que contenía dos genomas (Herbaspirillum seropedicae SmR1 y Herbaspirillum rubrisubalbicans M1) como parámetro para el argumento sequence.

Visualización de estadísticas resumidas de BUSCO

Después de usar run_busco() y analizar su salida con read_busco(), los usuarios pueden visualizar estadísticas resumidas con plot_busco().

# Single FASTA file - Ostreococcus tauri
plot_busco(busco_summary)

# Batch mode - Herbaspirillum seropedicae and H. rubrisubalbicans
plot_busco(batch_summary)

Por lo general, consideramos que los genomas con más del 90% de BUSCO completos tienen una alta calidad. Por lo tanto, podemos concluir que los tres genomas analizados aquí son genomas de alta calidad.

Referencias

Adaptado y traducido de.

Información de la sesión

Este documento fue creado bajo las siguientes condiciones:

sessioninfo::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.5.2 Patched (2025-11-19 r89053)
##  os       macOS Tahoe 26.2
##  system   aarch64, darwin20
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       America/Mexico_City
##  date     2026-07-09
##  pandoc   3.6.3 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
##  quarto   1.7.32 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/quarto
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package           * version date (UTC) lib source
##  ape                 5.8-1   2024-12-16 [1] CRAN (R 4.5.0)
##  aplot               0.3.1   2026-07-07 [1] CRAN (R 4.5.2)
##  beeswarm            0.4.0   2021-06-01 [1] CRAN (R 4.5.0)
##  BiocGenerics        0.56.0  2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
##  BiocManager         1.30.27 2025-11-14 [1] CRAN (R 4.5.2)
##  Biostrings          2.78.0  2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
##  bslib               0.11.0  2026-05-16 [1] CRAN (R 4.5.2)
##  cachem              1.1.0   2024-05-16 [1] CRAN (R 4.5.0)
##  cli                 3.6.6   2026-04-09 [1] CRAN (R 4.5.2)
##  cogeqc            * 1.14.1  2026-03-05 [1] https://bioc-release.r-universe.dev (R 4.5.2)
##  crayon              1.5.3   2024-06-20 [1] CRAN (R 4.5.0)
##  dichromat           2.0-0.1 2022-05-02 [1] CRAN (R 4.5.0)
##  digest              0.6.39  2025-11-19 [1] CRAN (R 4.5.2)
##  dplyr               1.2.1   2026-04-03 [1] CRAN (R 4.5.2)
##  evaluate            1.0.5   2025-08-27 [1] CRAN (R 4.5.0)
##  farver              2.1.2   2024-05-13 [1] CRAN (R 4.5.0)
##  fastmap             1.2.0   2024-05-15 [1] CRAN (R 4.5.0)
##  fontBitstreamVera   0.1.1   2017-02-01 [1] CRAN (R 4.5.0)
##  fontLiberation      0.1.0   2016-10-15 [1] CRAN (R 4.5.0)
##  fontquiver          0.2.1   2017-02-01 [1] CRAN (R 4.5.0)
##  fs                  2.1.0   2026-04-18 [1] CRAN (R 4.5.2)
##  gdtools             0.5.1   2026-05-25 [1] CRAN (R 4.5.2)
##  generics            0.1.4   2025-05-09 [1] CRAN (R 4.5.0)
##  ggbeeswarm          0.7.3   2025-11-29 [1] CRAN (R 4.5.2)
##  ggfun               0.2.1   2026-07-02 [1] CRAN (R 4.5.2)
##  ggiraph             0.9.6   2026-02-21 [1] CRAN (R 4.5.2)
##  ggplot2             4.0.3   2026-04-22 [1] CRAN (R 4.5.2)
##  ggplotify           0.1.3   2025-09-20 [1] CRAN (R 4.5.0)
##  ggtree              4.0.5   2026-03-17 [1] https://bioc-release.r-universe.dev (R 4.5.3)
##  glue                1.8.1   2026-04-17 [1] CRAN (R 4.5.2)
##  gridGraphics        0.5-1   2020-12-13 [1] CRAN (R 4.5.0)
##  gtable              0.3.6   2024-10-25 [1] CRAN (R 4.5.0)
##  htmltools           0.5.9   2025-12-04 [1] CRAN (R 4.5.2)
##  htmlwidgets         1.6.4   2023-12-06 [1] CRAN (R 4.5.0)
##  igraph              2.3.3   2026-06-26 [1] CRAN (R 4.5.2)
##  IRanges             2.44.0  2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
##  jquerylib           0.1.4   2021-04-26 [1] CRAN (R 4.5.0)
##  jsonlite            2.0.0   2025-03-27 [1] CRAN (R 4.5.0)
##  knitr               1.51    2025-12-20 [1] CRAN (R 4.5.2)
##  labeling            0.4.3   2023-08-29 [1] CRAN (R 4.5.0)
##  lattice             0.22-7  2025-04-02 [2] CRAN (R 4.5.2)
##  lazyeval            0.2.3   2026-04-04 [1] CRAN (R 4.5.2)
##  lifecycle           1.0.5   2026-01-08 [1] CRAN (R 4.5.2)
##  magrittr            2.0.5   2026-04-04 [1] CRAN (R 4.5.2)
##  MASS                7.3-65  2025-02-28 [2] CRAN (R 4.5.2)
##  nlme                3.1-168 2025-03-31 [2] CRAN (R 4.5.2)
##  otel                0.2.0   2025-08-29 [1] CRAN (R 4.5.0)
##  patchwork           1.3.2   2025-08-25 [1] CRAN (R 4.5.0)
##  pillar              1.11.1  2025-09-17 [1] CRAN (R 4.5.0)
##  pkgconfig           2.0.3   2019-09-22 [1] CRAN (R 4.5.0)
##  plyr                1.8.9   2023-10-02 [1] CRAN (R 4.5.0)
##  purrr               1.2.2   2026-04-10 [1] CRAN (R 4.5.2)
##  R6                  2.6.1   2025-02-15 [1] CRAN (R 4.5.0)
##  rappdirs            0.3.4   2026-01-17 [1] CRAN (R 4.5.2)
##  RColorBrewer        1.1-3   2022-04-03 [1] CRAN (R 4.5.0)
##  Rcpp                1.1.2   2026-07-05 [1] CRAN (R 4.5.2)
##  reshape2            1.4.5   2025-11-12 [1] CRAN (R 4.5.0)
##  rlang               1.3.0   2026-07-05 [1] CRAN (R 4.5.2)
##  rmarkdown           2.31    2026-03-26 [1] CRAN (R 4.5.2)
##  rstudioapi          0.19.0  2026-06-11 [1] CRAN (R 4.5.2)
##  S4Vectors           0.48.1  2026-04-04 [1] https://bioc-release.r-universe.dev (R 4.5.3)
##  S7                  0.2.2   2026-04-22 [1] CRAN (R 4.5.2)
##  sass                0.4.10  2025-04-11 [1] CRAN (R 4.5.0)
##  scales              1.4.0   2025-04-24 [1] CRAN (R 4.5.0)
##  Seqinfo             1.0.0   2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
##  sessioninfo         1.2.4   2026-06-04 [1] CRAN (R 4.5.2)
##  stringi             1.8.7   2025-03-27 [1] CRAN (R 4.5.0)
##  stringr             1.6.0   2025-11-04 [1] CRAN (R 4.5.0)
##  systemfonts         1.3.2   2026-03-05 [1] CRAN (R 4.5.2)
##  tibble              3.3.1   2026-01-11 [1] CRAN (R 4.5.2)
##  tidyr               1.3.2   2025-12-19 [1] CRAN (R 4.5.2)
##  tidyselect          1.2.1   2024-03-11 [1] CRAN (R 4.5.0)
##  tidytree            0.4.8   2026-07-02 [1] CRAN (R 4.5.2)
##  treeio              1.34.0  2025-10-30 [1] Bioconductor 3.22 (R 4.5.1)
##  vctrs               0.7.3   2026-04-11 [1] CRAN (R 4.5.2)
##  vipor               0.4.7   2023-12-18 [1] CRAN (R 4.5.0)
##  withr               3.0.3   2026-06-19 [1] CRAN (R 4.5.2)
##  xfun                0.60    2026-07-09 [1] CRAN (R 4.5.2)
##  XVector             0.50.0  2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
##  yaml                2.3.12  2025-12-10 [1] CRAN (R 4.5.2)
##  yulab.utils         0.2.4   2026-02-02 [1] CRAN (R 4.5.2)
## 
##  [1] /Users/niko.cruz/Library/R/arm64/4.5/library
##  [2] /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/library
##  * ── Packages attached to the search path.
## 
## ──────────────────────────────────────────────────────────────────────────────