Introduction


DADA2 est un pipeline bio-informatique (Callahan et al., 2016). Il consiste en une série d’étapes permettant de filtrer les séquences brutes obtenues grâce au séquençage Illumina. La dernière étape vise à obtenir la taxonomie des séquences ayant été filtrées en vue d’étudier la communauté microbienne.

DADA2 a deux particularités qui le distingue des autres pipeline courament utilisés. D’une part, il va procéder à modélisation de l’erreur dûe au séquençage ce qui est censé permettre des distinguer les séquences mutantes, des séquences érronées. D’autre part, contrairement à d’autres pipelines comme QIIME ou Mothur, DADA2 ne regroupe pas les séquences similaires à 97% en Unités Taxonomiques Opérationelles (OTUs). Ses Variants de Séquences d’Amplicons (ASVs) ne subissent pas de regroupement si les séqences ne sont pas identiques à 100%. Voir figure ci-dessous.

A l’origine construit pour les séquences de gène marqueur 16S (Bacteria), nous l’utiliserons avec des séquences de gène marqueur ITS (Fungi) provenant d’un séquençage en paire Illumina MiSEQ 2x300 paires de bases. Afin d’accélérer l’exécution de chaques étapes, nous avons sous-échantilloner aléatoirement un jeu de données afin d’avoir 1000 séquences par échantillons.

Enfin, Redde Caesari quae sunt Caesaris : ce tutoriel s’est largement inspiré du propre tutoriel de DADA2.

De manière générale avant de débuter ce pipeline, il faut prendre quelques précautions:

  1. Les échantillons doivent être démultiplexés chaque échantillon doit avoir son propre fichier fastq.
  2. En cas de séquençage en paire, les séquences sens et anti-sens doivent être dans deux fichier fastq distincts et être dans le même ordre dans les deux fichiers.
  3. Les nucléotides qui ne font pas partie de l’amplicon (amorces, adaptateurs, bar-code) doivent avoir été retirées. Dans le cas contraire, ils devront être à l’étape de filtrage.
  4. La plupart des fonctions présentées ont une option de multithreading qui permet d’accélerer les temps de calcul en accédant à plusieurs prorcesseurs. Il suffit d’indiquer multithread = TRUE pour l’activer. Attention, cette option ne marche pas sous Windows.


Cette figure extraite de Hugerth et Andersson, 2017 illustre la différence théorique entre OTUs et ASVs. Chaque couleur représente une clade. Les étoiles jaunes indiquent des mutations, les étoiles rouges indiquent des erreurs d’amplification ou de séquençage. La taille de l’espace entre les séquences indique leur regroupement.

This figure taken from Hugerth and Andersson, 2017 illustrates the theoretical difference between OTUs and ASV. Each color represents a clade. Yellow stars indicate mutations, red stars indicate amplification or sequencing errors. The size of the space between the sequences indicates their clustering.


(A) OTUs regroupés à 100 % d’identité.
La moindre variation de séquences provoque la création d’un nouveau groupe. Les séquences mutantes et les séquences erronées sont traitées de la même manière.
(B) OTUs regroupés à 97 % d’identité.
Un regroupement plus large permet de ne plus considérer les séquences erronées, cependant les séquences mutantes seront également regroupées dans le groupe consensus.
(C) ASVs
L’apprentissage du taux d’erreur permet théoriquement de regrouper les séquences erronées avec les séquences consensus. En revanche, les séquences mutantes sont considérées à part entière.

(A) 100 % identity clustered OTUs.
The slightest variation of sequences causes the creation of a new group. The mutant sequences and the erroneous sequences are treated similarly.
(B) 97 % identity clustered OTUs.
A wider grouping allows to no longer consider the erroneous sequences, however the mutant sequences will also be clustered in the consensus group.
(C) ASVs.
Learning the error rates theoretically enables to group the erroneous sequences with the consensus sequences. In contrast, the mutant sequences are considered integrally.


DADA2 is a bioinformatics pipeline created by Callahan et al., 2016. It consists is a series of steps which filter the raw sequences obtained with Illumina sequencing. The final step is to obtain the taxonomy of the sequences that have been filtered in order to study the microbial community.

DADA2 has two major features which distinguishes it from other commonly used pipelines. On one hand, it will proceed to the modeling of the sequencing error which is supposed to make it possible to distinguish mutant sequences from erroneous sequences. On the other hand, unlike other pipelines such as QIIME or Mothur, DADA2 does not cluster 97% similar sequences in Operational Taxonomy Units (OTUs). Its Amplicon Sequence Variants (ASVs) are not grouped if the sequences are not 100% identical. See figure above.

Originally constructed for 16S marker gene sequences (Bacteria), we will use it with ITS marker gene (Fungi) sequences from Illumina MiSEQ 2x300 bp paired-end sequencing. To speed up the execution of each step, we randomly sub-sampled a dataset in order to only keep 1000 sequences per sample. Finally, Redde Caesari quae sunt Caesaris : this tutorial was largely inspired by the original DADA2 tutorial.

In general, before starting this pipeline, we must take some precautions:

  1. Samples must be demultiplexed: split into individual per-sample fastqs
  2. If the sequences are paired-end, the forward and reverse sequences have to be in distinct fastq files but must contain reads in matched order.
  3. The nucleotides which are not part of the amplicon (primers, adapters, bar-code) have to be removed. They can be removed at the filtring step.
  4. Most functions have a multithreading option that allows faster computing time by accessing multiple processors. Just specify multithread = TRUE to enable it. Warning, this option does not work under Windows.



Commençons ! / Let’s start !


Nous allons tout d’abord chargé la librairie DADA2. Vous devriez avoir la denière version: packageVersion('dada2').
Puis nous allons créer une variable (path) indiquant le chemin qui permettra d’accéder aux objets dont nous allons avoir besoin.

First, we’re going to load the DADA2 package. You should have the latest version: packageVersion('dada2'). Then we’re going to create a variable (path) indicating the path which will allow to access the objects required for this pipeline.

library(dada2); packageVersion("dada2")
## Loading required package: Rcpp
## [1] '1.11.1'
path <- "data/ITS_sub/"

Vérifions ce qu’il y a au bout du chemin… / Let’s check where the path leads to….