kraken2 微生物物种分类

kraken 是微生物组分析进行物种分类的工具,目前已经是第二代 kraken2 了。kraken2 对比 kraken 重点优化了数据库创建速度和数据库大小,以及分类速度。

kraken 用 k-mer 方法对输入数据的每一条序列进行分类分析。将每一条序列分成多个 k-mers, 每个 k-mer 在分类数据库寻找 LCA (lowest common ancestor), 序列所有 k-mers 所在的分类及其祖先组成一个分类树————属于总分类树的子集,这个分类树每个节点的权重是序列 k-mers 分配到该分类的次数。分类树上每个 RTL (root-to-leaf) 路径得分是这些权重总分,得分最高的路径是分类路径。然后将该路径分类 left 标签分配给该序列。如果有多个路径得分相等,那么他们的共同祖先标签分配给该序列。
从上面原理可以看出,用 kraken2 分析时提供合适的分类数据库至关重要。比如你期望分类到物种(species)水平,那么 silva 的 16S 数据库是不合适的,因为 silva 数据库本身只分类到属(genus)。如果你提供的分类数据库根本不包含样品主要物种,那么分析肯定是错误的。
完成 kraken2 分析得到每个序列的分类,再用 bracken 对各分类进行丰度估计。


kraken 原理

分类数据库
分类数据库可以用 kraken2-build 命令创建,也可以从 Index zone by BenLangmead 下载现成的。默认下载的包含 50, 75, 100, 150, 200, 250, 300 k-mers 索引。

kraken2 提供现成的数据库下载

kraken2-build 命令创建时需要安装标记低复杂度区域的 dustmasker 工具,如果没有用 --no-masking 取消标记,否则工具会出错。创建标准的数据库直接用 --standard 命令,这将下载 NCBI 分类数据库,包含细菌、古细菌、病毒、人类和一些已知质粒载体。

kraken2-build --standard --threads 12 --no-masking --db ${db_dir}

普通数据库先下载 NCBI 分类数据,然后下载参考序列数据(archaea, bacteria, viral, human, fungi, ...)。这一步可以下载多个数据库到同一目录,最后一起创建成分类数据库。

kraken2-build --download-taxonomy --db ${db_dir}
kraken2-build --no-masking --download-library bacteria --db ${db_dir}
kraken2-build --build --threads 8 --db ${db_dir}

除 NCBI 分类数据库,也可以创建别的,比如 silva 16S 数据库,使用 --special 参数设置对应的 "TYPE". 比如 "silva/greengenes/rdp",这些数据库是 kraken2 下载对应数据库,并处理为 kraken2 可用的格式。

kraken2-build --db $DBNAME --special TYPE

如果不是下载处理好的,需要自己 bracken-build 命令创建 bracken 定量数据库。

bracken-build -d kraken2db -t 12

分类与定量
kraken2 输入是需要分类的序列,可以是 fasta 格式也可以是 fastq 格式。

kraken2 --paired --gzip-compressed --use-names --threads 8 --output ${kraken2_dir}/${sample}.kraken \
--report ${kraken2_dir}/${sample}.kreport --db ${kraken2_db} \
${clean_dir}/${sample}_R1.fq.gz ${clean_dir}/${sample}_R2.fq.gz

设置 --confidence 给每个序列分类增加过滤阈值,根据 From defaults to databases: parameter and database choice dramatically impact the performance of metagenomic taxonomic classification tools 这个参数对结果有比较明显影响。
"confidence" 的得分计算:每个序列的每个分类得分为 C/Q 其中 C 是该序列分配到某个 LCA 的 k-mer 数目,Q 是该序列不包含未知(ambiguous)碱基的 k-mer 数目。以下面第 5 条 LCA 记录为例,#561 是 #562 的父节点,#562 的分数是
C/Q = (13 + 3)/(13 + 4 + 1 + 3) = 16/21
#561 的分数是
C/Q = (13 + 4 + 3)/(13 + 4 + 1 + 3) = 20/21
如果设定的 --confidence 大于 16/21 那么 kraken2 会将序列分类到 #561; 如果大于 20/21 那么序列会是未分类。

kraken2 的输出每条序列分类结果,每一列内容是:

  1. 第一列 "C/U" 分别表示该 reads 是否被分类
  2. 第二列是序列 ID
  3. 第三列是分类 ID, 如果 0 表示未分类,比如:Lactobacillus jensenii (taxid 109790)
  4. 第四列是序列长度,双端测序的话用 "|" 分割,比如:"100|98"
  5. 第五列是序列 kmer 的 LCA 记录,比如 "562:13 561:4 A:31 0:1 562:3" 表示:
    • 前 13 kmer 分类到分类 ID #562
    • 接下去 4 kmer 分类到 #561
    • 接下去 31 kmer 包含 ambiguous 碱基
    • 下一个 kmer 不在分类数据库
    • 最后 3 kmer 分类到 #562
      注意如果是双端测序会出现 |:| 表示一个 reads 的结束和另一个 reads 的开始

用 kraken2 分类结果进行 bracken 定量分析。

bracken -d ${kraken2_db} -i ${kraken2_dir}/${sample}.kreport \
-o ${kraken2_dir}/${sample}.bracken -t 8

分析输出 *.bracken 后缀结果,未分类或低于分类层级的 reads 会被移除,剩下 reads 计算百分比。

name    taxonomy_id     taxonomy_lvl    kraken_assigned_reads   added_reads     new_est_reads   fraction_total_reads
Aureimonas sp. AU20     1349819 S       33      1       34      0.00000
Granulicatella adiacens 46124   S       8       0       8       0.00000
Bacillus velezensis     492670  S       35      23      58      0.00000
Clostridium manihotivorum       2320868 S       8       0       8       0.00000
Candidatus Fonsibacter ubiquis  1925548 S       11      0       11      0.00000

输出 *bracken_species.kreport 文件按分类学从大到小统计序列占比。至此完成了分类与定量,另外说一下 KrakenTools 提供了 kraken 分析相关的小工具,比如提取指定物种的序列。

参考资料
Wood, Derrick E., and Steven L. Salzberg. "Kraken: ultrafast metagenomic sequence classification using exact alignments." Genome biology 15.3 (2014): 1-12.
Home · DerrickWood/kraken2 Wiki · GitHub

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容