Setup Bioconductor para microbioma

r
bioconductor
metagenomica
Los paquetes que necesitas instalados antes de tocar datos: DADA2, phyloseq, microbiome, microViz, ANCOM-BC, MaAsLin2 y bases SILVA. Cómo verificar la instalación y cómo usar renv para reproducibilidad.

El stack que necesitas

El análisis 16S moderno en R/Bioconductor reposa sobre seis paquetes clave + dos bases de datos. Conviene tenerlos instalados antes de empezar para no parar el flujo a media tarea.

Paquete Para qué Fuente
dada2 Procesado de reads, ASVs, asignación taxonómica básica Bioconductor
phyloseq Contenedor multi-tabla del microbioma Bioconductor
microbiome Análisis ecológico (diversidad, transformaciones) Bioconductor
microViz Visualización moderna sobre phyloseq CRAN + GitHub
ANCOMBC Análisis diferencial composicional Bioconductor
MaAsLin2 Modelo mixto para microbioma + metadata clínica Bioconductor

Y dos bases de datos:

Recurso Para qué Fuente
SILVA 138 Asignación taxonómica de ASVs zenodo.org/record/4587955
GTDB r214 (opcional) Taxonomía alternativa, especialmente para shotgun data.gtdb.ecogenomic.org

Instalación

Paso 1: BiocManager (una vez por R)

Si ya hiciste la ruta de RNA-seq con Bioconductor, BiocManager está instalado. Si no:

install.packages("BiocManager")
BiocManager::install(version = "3.20")  # o la última stable

Verifica la release de Bioconductor coherente con tu versión de R:

BiocManager::version()
# [1] '3.20'

Paso 2: paquetes de microbioma desde Bioconductor

BiocManager::install(c(
    "dada2",            # ASVs y taxonomía básica
    "phyloseq",         # contenedor central
    "microbiome",       # ecología (diversidad, transformaciones)
    "ANCOMBC",          # análisis diferencial composicional
    "Maaslin2",         # modelos lineales con covariables
    "decontam",         # filtrar contaminación de kits
    "Biostrings",       # manejo de secuencias
    "ShortRead",        # FASTQ IO
    "phangorn"          # árboles filogenéticos
))

Esta instalación tarda, dada2 y phyloseq arrastran dependencias compiladas. Hazla al principio, no a mitad del análisis.

Paso 3: microViz (GitHub)

microViz es CRAN/GitHub, no Bioconductor:

install.packages("microViz",
                 repos = c(davidbarnett = "https://david-barnett.r-universe.dev",
                           getOption("repos")))

Si no quieres añadir el repo de R-universe, alternativa:

# install.packages("remotes")
remotes::install_github("david-barnett/microViz")

Paso 4: utilidades de soporte

Para el flujo completo conviene tener también:

install.packages(c(
    "tidyverse",        # ya lo tienes
    "ggpubr",           # boxplots con tests
    "vegan",            # diversidad ecológica clásica
    "DT",               # tablas interactivas en informe
    "knitr",            # ya viene con R/Quarto
    "patchwork"         # composición de plots
))

Bases de datos SILVA

DADA2 incluye su propia función de asignación taxonómica (assignTaxonomy), pero necesita una base de referencia formateada para DADA2. La de SILVA 138 es el estándar.

Descarga directa (~ 220 MB):

# URL oficial Zenodo
url_silva <- "https://zenodo.org/record/4587955/files/silva_nr99_v138.1_wSpecies_train_set.fa.gz"

dir.create("ref", showWarnings = FALSE)
download.file(url_silva, "ref/silva_nr99_v138.1_wSpecies_train_set.fa.gz", mode = "wb")

Para asignación a nivel de especie (más precisa, opcional):

url_silva_sp <- "https://zenodo.org/record/4587955/files/silva_species_assignment_v138.1.fa.gz"
download.file(url_silva_sp, "ref/silva_species_assignment_v138.1.fa.gz", mode = "wb")

Estas dos descargas las haces una vez. Guarda en una carpeta ref/ del proyecto y reutilizable entre análisis.

Verificación rápida

Después de instalar, comprobar que todo carga:

library(dada2)
library(phyloseq)
library(microbiome)
library(ANCOMBC)
library(Maaslin2)

# Sanity check de versiones
packageVersion("dada2")        # >= 1.30
packageVersion("phyloseq")     # >= 1.46
packageVersion("ANCOMBC")      # >= 2.4

Si todos cargan sin error, el setup está listo.

Estructura recomendada del proyecto

Antes de empezar el análisis, organiza el proyecto así:

mi-analisis-microbioma/
├── mi-analisis-microbioma.Rproj
├── data/
│   ├── fastq/                  ← reads originales (no se versionan)
│   │   ├── SampleA_R1.fastq.gz
│   │   ├── SampleA_R2.fastq.gz
│   │   └── ...
│   └── metadata.csv            ← una fila por muestra
├── ref/                        ← bases SILVA, GTDB
│   └── silva_nr99_v138.1_*.fa.gz
├── R/                          ← funciones reutilizables
│   └── funciones.R
├── analysis/
│   ├── 01_dada2.qmd            ← procesado
│   ├── 02_phyloseq.qmd         ← construcción del objeto
│   ├── 03_diversidad.qmd       ← análisis exploratorio
│   └── 04_diferencial.qmd      ← análisis estadístico
└── output/                     ← outputs (no se versionan)
    ├── figuras/
    └── tablas/

Patrón modular: cada paso del análisis en su propio .qmd. Después se combinan en un informe final.

renv para reproducibilidad

Microbioma es un campo donde las versiones de paquetes importan: ASVs idénticos pueden recibir taxonomía distinta entre versiones de SILVA, y los algoritmos de ANCOM evolucionan. Usa renv.

install.packages("renv")
renv::init()
renv::snapshot()  # captura las versiones actuales

Esto crea renv.lock con las versiones exactas. Cualquiera que clone tu proyecto y haga renv::restore() tendrá el mismo entorno.

Si quieres ir aún más allá, Docker con la imagen bioconductor/bioconductor_docker:RELEASE_3_20 congela también el OS y librerías de sistema. Para análisis clínico auditable o paper reproducible al 100 %, es el camino. Lo cubrimos en la ruta de Quarto y reproducibilidad.

El primer test: ¿corre el tutorial canónico de DADA2?

Antes de pasar al siguiente bloque, asegúrate de poder correr el tutorial oficial de DADA2:

library(dada2)

# Descarga el dataset de ejemplo (datos del tutorial canónico)
# https://benjjneb.github.io/dada2/tutorial.html
miseq_path <- "ref/MiSeq_SOP"

# Si no lo tienes, descárgalo:
url <- "https://mothur.s3.us-east-2.amazonaws.com/wiki/miseqsopdata.zip"
download.file(url, "MiSeqSOPData.zip", mode = "wb")
unzip("MiSeqSOPData.zip", exdir = "ref/")

Si esto descarga sin errores y list.files(miseq_path, pattern = "_R1") devuelve archivos, estás listo.

Recursos útiles

Tres recursos que conviene tener marcados:

Trampas habituales

  • install.packages("dada2"): DADA2 está en Bioconductor, no en CRAN. Usa BiocManager::install(). El error es claro pero confunde a quien viene de tutoriales viejos.
  • Mezcla de versiones Bioc: tener dada2 de Bioc 3.18 con phyloseq de Bioc 3.20 da errores crípticos. BiocManager::valid() lo detecta.
  • SILVA versión equivocada: las bases de SILVA tienen formato específico para DADA2. Descargar directamente de silva.de no funciona con assignTaxonomy(). Usa el Zenodo de DADA2.
  • Olvidar el archivo de especies: silva_nr99_* da hasta género. Para especie necesitas también silva_species_assignment_*. Es opcional pero recomendable.
  • Querer reproducibilidad sin renv: las versiones cambian rápido en microbioma. Sin renv.lock, en 6 meses no reproduces tus propios resultados.

En la siguiente entrega

Tienes el ecosistema instalado y el proyecto estructurado. La siguiente entrega entra al pipeline DADA2: QC y filtrado de reads amplicón, cómo se leen los perfiles de calidad, qué decisiones de truncado tomar y cómo deja filterAndTrim() los reads listos para denoising. Lo siguiente.