QIIME 2用户文档. 11数据筛选Filtering data(2018.11)


(Yong-Xin Liu) #1

[TOC]

前情提要

QIIME 2用户文档. 11数据筛选

Filtering data

https://docs.qiime2.org/2018.11/tutorials/filtering/

注:此实例需要要求完成本系列文章《1简介和安装》

本教程介绍如何过滤qiime 2中的特征表、序列和距离矩阵,软件将随着新增可用的过滤功能的而不断扩大其应用范围。

详者注:复杂的实验通常会有非常多的组,具体分析中会根据批次、处理条件、基因型等信息进行反复筛选和分析,是分析中常用的操作。本文主讲特征表(Feature/OTU table)和距离矩阵的筛选,是分析大项目中常用的技术。

下载实验相关数据

Obtain the data

# 创建工作目录并进入
mkdir qiime2-filtering-tutorial
cd qiime2-filtering-tutorial

# 下载实验设计、特征表和距离矩阵
wget \
  -O "sample-metadata.tsv" \
  "https://data.qiime2.org/2018.11/tutorials/moving-pictures/sample_metadata.tsv"
wget \
  -O "table.qza" \
  "https://data.qiime2.org/2018.11/tutorials/filtering/table.qza"
wget \
  -O "distance-matrix.qza" \
  "https://data.qiime2.org/2018.11/tutorials/filtering/distance-matrix.qza"
wget \
  -O "taxonomy.qza" \
  "https://data.qiime2.org/2018.11/tutorials/filtering/taxonomy.qza"
wget \
  -O "sequences.qza" \
  "https://data.qiime2.org/2018.11/tutorials/filtering/sequences.qza"

过滤特征表

Filtering feature tables

在本教程的这一节中,我们将看到如何从特征表中过滤(即删除)样本和特征。特征表有两个轴:样本轴和特征轴。本教程中描述的过滤操作通常分别适用于过滤样本和过滤特征对应的样本轴和特征轴。这两种方法都在q2-feature-table插件中实现。基于分类的过滤也可以使用q2-taxa插件中的方法从特征表中过滤特征。

按数据量过滤

Total-frequency-based filtering

基于总频率的过滤用于根据样本或特征在特征表中出现的频率进行过滤。

例如,在过滤样本时,可以使用此功能来过滤样本,其总频率在样本频率分布中是一个异常值。在许多16S研究中,一些样本只会获得少数(可能个位数至几百)条序列,这可能是由于样本生物量低导致DNA提取率低。在这种情况下,用户可能希望根据其最小总频率(即样本测序的序列总数)删除样本。可以通过以下方式实现(在本例中,总频率小于1500的样本将被过滤掉)。

qiime feature-table filter-samples \
  --i-table table.qza \
  --p-min-frequency 1500 \
  --o-filtered-table sample-frequency-filtered-table.qza

输出对象:

  • distance-matrix.qza: 距离矩阵
  • taxonomy.qza: 物种注释
  • sequences.qza: 代表序列
  • table.qza: 特征表
  • sample-frequency-filtered-table.qza: 过滤后的特征表

按特征表的数据量过滤,只有特征序列总测序量大于10条以上的才保留

详者注:(实验中会有大量低丰度的特征/OTU,它们会增加计算工作量和影响高丰度结果差异比较时FDR校正pvale,导致假阴性,通常需要选择一定的阈值进行筛选,常用的有相对丰度千分之五、千分之一、万分之五、万分之一;也可根据测序总量,reads频率的筛选阈值常用2、5、10等,大项目有时甚至超过100)

qiime feature-table filter-features \
  --i-table table.qza \
  --p-min-frequency 10 \
  --o-filtered-table feature-frequency-filtered-table.qza

有时也会过滤掉高丰度的特征/ASV/OTU或样本,因为极高样本也可能异常,需要使用--p-max-frequency参数

偶然因素的过滤

Contingency-based filtering

举个栗子,你有实验和对照组各有十个样品的生物学重复,结果中会有很多OTU/特征只在一个样品中出现,而在其它所有样品中均为零,这种情况一般认为是偶然因素的结果,不具有普遍性,有生物学意义的可能性也比较小,因此通常过滤掉他们,以减少下游分析工作量,降低结果的假阴性率。

# 过滤至少在2个样品中存在的Feature,去除偶然的Feature
qiime feature-table filter-features \
  --i-table table.qza \
  --p-min-samples 2 \
  --o-filtered-table sample-contingency-filtered-table.qza

# 去除频率总数小于10个Feature的样品(根据具体情况,有些样品微生物种类极低,可能是异常,如服用过抗生素或PCR扩增出现问题),一般也要筛选后再分析
qiime feature-table filter-samples \
  --i-table table.qza \
  --p-min-features 10 \
  --o-filtered-table feature-contingency-filtered-table.qza

同样上面筛选最小值,有时也会筛选最大值,它们的参数为--p-max-features--p-max-samples

基于索引的过滤

Identifier-based filtering

比如实验中的某些样品发现问题,如生长过程到受胁迫、人或动物吃错药(某些人源样品查出末如实申报的抗生素使用),需要在实验中进行剔除。或挑选指定的样品下游分析。

# 生成一样需要保留或剔除的样品列表(也可以手动编写文本文件)
echo SampleID > samples-to-keep.tsv
echo L1S8 >> samples-to-keep.tsv
echo L1S105 >> samples-to-keep.tsv

# 只保留指定的两个样品L1S8和L1S105
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file samples-to-keep.tsv \
  --o-filtered-table id-filtered-table.qza

基于元数据的筛选

Metadata-based filtering

这是最常用的,重点关注

基于元数据的筛选与基于标识符的筛选类似,只是要保留的ID列表是基于元数据搜索条件而不是由用户直接提供的。这是使用--p-where参数和--m-metadata-file参数实现的。用户使用--p-where提供了基于元数据应保留样本的描述,其描述的语法是SQLite WHERE-clause语法。

例如,过滤表以仅包含来自分组1(subject 1)的样本,如下所示。这里,--p-where参数指定我们要保留sample-metadata.tsv中分组为subject-1的所有样本。注意,值subject-1必须用单引号括起来。

# 筛选某个条件下一类:元数据Subject列中,名为subject-1的所有样品
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "Subject='subject-1'" \
  --o-filtered-table subject-1-filtered-table.qza

筛选后结果:subject-1-filtered-table.qza

如果一个元数据列中想要保留多个分组,则可以使用IN子句指定这些值。例如,可以使用以下命令保留所有皮肤样本,其中包括的左掌和右掌的值用单引号括起来。

# 筛选某个条件下多类:身体取样部分中左掌和右掌的样品
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "BodySite IN ('left palm', 'right palm')" \
  --o-filtered-table skin-filtered-table.qza

筛选后结果:skin-filtered-table.qza

--p-where表达式可以使用ANDOR组合关键字。对sample-metadata.tsv中的样本进行筛选,这里--p-where参数指定我们只保留其分组为subject-1且其bodysite位于gut的样品。对于要保留的示例,使用AND关键字时,要计算的两个表达式都必须为true。这意味着其身体部位是肠道但其Subject是subject-2的样本不会出现在结果表中。同样,subject为subject-1但其身体部位不是肠道的样本也不会出现在结果表中。

# 同时筛选两个条件共有(和关系/交集):Subject列中subject-1组且在BodySite中的gut
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "Subject='subject-1' AND BodySite='gut'" \
  --o-filtered-table subject-1-gut-filtered-table.qza

OR关键字语法类似于AND关键字语法,但指定对于要保留的样本,两个表达式中的任何一个都可以为true即可。由于缺少与此处使用的示例数据更相关的应用,本示例中的OR关键字将应用于保留BodySitegut或在sample-metadata.tsvreportedantibiocusageyes的所有样品。与AND和不同的是,这意味着,如果样本的身体部位是肠道,但其报告的抗生物库容为“否”,则会出现在结果表中。同样,报告的抗生物活性是“是”,但其身体部位不是肠道的样本也将出现在结果表中。

# 同时筛选两个条件并集:BodySite例为gut或ReportedAntibioticUsage为Yes
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "BodySite='gut' OR ReportedAntibioticUsage='Yes'" \
  --o-filtered-table gut-abx-positive-filtered-table.qza

此语法还支持否定--p-where表达式(或整个表达式)的各个子句。这里,在sample-metadata.tsv中,--p-where参数指定我们只保留主题为subject-1且其bodysite不属于gut的样本。

# 使用非NOT进行条件筛选:subject-1组中非肠道的样品
qiime feature-table filter-samples \
  --i-table table.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "Subject='subject-1' AND NOT BodySite='gut'" \
  --o-filtered-table subject-1-non-gut-filtered-table.qza

基于物种过滤表和序列

Taxonomy-based filtering of tables and sequences

基于物种注释的过滤是feature-metadata-based一种非常常见的过滤方法,因此q2 taxa插件提供了filter-table方法来简化这个过程。过滤可以应用于仅使用--p-include保留特定的taxa和/或使用--p-exclude删除特定的taxa

如果物种分类注释包含某些特定的文本,则可以使用--p-exclude参数删除这些物种。例如,这里使用-p-exclude从表中删除注释为线粒体的所有物种。当使用--p-mode(默认)进行搜索时,搜索词不区分大小写,因此搜索词线粒体将返回与搜索词线粒体Mitochondria相同的结果。

qiime taxa filter-table \
  --i-table table.qza \
  --i-taxonomy taxonomy.qza \
  --p-exclude mitochondria \
  --o-filtered-table table-no-mitochondria.qza

通过在逗号分隔的列表中提供搜索词,可以实现删除与多个搜索词匹配结果。以下命令将删除其分类注释中包含线粒体或叶绿体的所有特征。(在宿主相关的微生物组研究中,去除线粒体和叶绿体是必须的,如扩增叶际微生物时,由于叶片比例高,叶绿体高拷贝数,总数据量中90%以上可能全是叶绿体)

qiime taxa filter-table \
  --i-table table.qza \
  --i-taxonomy taxonomy.qza \
  --p-exclude mitochondria,chloroplast \
  --o-filtered-table table-no-mitochondria-no-chloroplast.qza

使用--p-include参数过滤表以只保留特定的特性。例如,--p-include可用于仅保留至少已注释到门级别的功能。在greengenes分类法中(用于生成这里提供FeatureTable[Taxonomy]),所有的门注释都以文本p__开头。如果某个功能没有分配给某个门(即它最多包含一个kingdom/domain),那么它不应该包含文本p__。因此,我们可以在这里使用p__作为--p-include包含术语,以仅保留包含门级注释的物种。在实践中,这个过滤器对于过滤那些在分类上不太可能提供关于您的样本信息的特性很有用。(相当于只筛选比较确定属于细菌或古菌门的序列,可以有效去除宿主非特异扩增污染和其它未知来源的序列)

qiime taxa filter-table \
  --i-table table.qza \
  --i-taxonomy taxonomy.qza \
  --p-include p__ \
  --o-filtered-table table-with-phyla.qza

可以组合--p-include--p-exclude参数。以下命令将保留包含门级注释的所有物种,但在其分类注释中排除包含线粒体或叶绿体的所有序列。

重点:筛选主要16S扩增细菌对象,且排除宿主污染

qiime taxa filter-table \
  --i-table table.qza \
  --i-taxonomy taxonomy.qza \
  --p-include p__ \
  --p-exclude mitochondria,chloroplast \
  --o-filtered-table table-with-phyla-no-mitochondria-no-chloroplast.qza

默认情况下,为--p-include--p-exclude提供的术语匹配(如果它们包含在分类注释中)。如果您希望您的术语只有在它们是完整的分类注释的情况下才匹配,那么可以通过传递--p-mode-exact(表示搜索需要精确匹配)来实现。当使用-p-mode exact搜索时,搜索词区分大小写,因此搜索词线粒体不会返回与搜索词线粒体相近的结果。

去除线粒体序列的精确匹配可以实现如下。(在greengenes分类中,有时有与线粒体注释相关的科注释,因此该命令可能不会删除所有注释为线粒体的特征。)

qiime taxa filter-table \
  --i-table table.qza \
  --i-taxonomy taxonomy.qza \
  --p-mode exact \
  --p-exclude "k__Bacteria; p__Proteobacteria; c__Alphaproteobacteria; o__Rickettsiales; f__mitochondria" \
  --o-filtered-table table-no-mitochondria-exact.qza

基于分类的表过滤也可以使用feature-table filter-features--p-where参数来实现。如果筛选查询比通过qiime taxa filter-table支持的查询更复杂,则应使用qiime feature-table filter-features

过滤序列

Filtering sequences

q2-taxa插件提供了一种方法filter-seqs,用于根据功能的分类注释过滤功能FeatureData[Sequence]。该功能与qiime taxa filter-table中提供的功能非常相似,因此您应该参考上面的qiime taxa filter-table示例,以了解有关基于分类筛选的更多信息。简单地说,filter-seqs可以保留包含门级注释的所有特征,但在其分类注释中排除包含线粒体或叶绿体的所有特征。

qiime taxa filter-seqs \
  --i-sequences sequences.qza \
  --i-taxonomy taxonomy.qza \
  --p-include p__ \
  --p-exclude mitochondria,chloroplast \
  --o-filtered-sequences sequences-with-phyla-no-mitochondria-no-chloroplast.qza

q2-feature-table插件还具有一个filter-seqs方法,允许用户根据各种标准删除序列,包括特征表中存在哪些物种。

另请参见q2-quality-control插件,它具有一个exclude-seqs操作,用于根据对一组参考序列或引物的对齐来过滤序列

过滤距离矩阵

Filtering distance matrices

在本教程的这一节中,我们将看到如何使用q2-diversity插件提供的过滤距离矩阵filter-distance-matrix方法从距离矩阵中过滤(即删除)样本。

注: 过滤距离矩阵的工作方式与通过标识符或示例元数据过滤特征表的原理相同。本节中提供的示例很简单;有关详细信息,请参阅上面的基于标识符的筛选和基于元数据的筛选。

可以根据标识符过滤距离矩阵。例如,要过滤距离矩阵以保留上面samples-to-keep.tsv中指定的两个样本(详细请参见基于标识符的过滤)

# 按样品名过滤
qiime diversity filter-distance-matrix \
  --i-distance-matrix distance-matrix.qza \
  --m-metadata-file samples-to-keep.tsv \
  --o-filtered-distance-matrix index-filtered-distance-matrix.qza

还可以基于样品元数据中分组条件过滤距离矩阵。例如,要过滤距离矩阵以仅保留来自分组2的样本:

# 按实验设计中的某条件中的组过滤
qiime diversity filter-distance-matrix \
  --i-distance-matrix distance-matrix.qza \
  --m-metadata-file sample-metadata.tsv \
  --p-where "Subject='subject-2'" \
  --o-filtered-distance-matrix subject-2-filtered-distance-matrix.qza

Reference

Bolyen E, Rideout JR, Dillon MR, Bokulich NA, Abnet C, Al-Ghalith GA, Alexander H, Alm EJ, Arumugam M, Asnicar F, Bai Y, Bisanz JE, Bittinger K, Brejnrod A, Brislawn CJ, Brown CT, Callahan BJ, Caraballo-Rodríguez AM, Chase J, Cope E, Da Silva R, Dorrestein PC, Douglas GM, Durall DM, Duvallet C, Edwardson CF, Ernst M, Estaki M, Fouquier J, Gauglitz JM, Gibson DL, Gonzalez A, Gorlick K, Guo J, Hillmann B, Holmes S, Holste H, Huttenhower C, Huttley G, Janssen S, Jarmusch AK, Jiang L, Kaehler B, Kang KB, Keefe CR, Keim P, Kelley ST, Knights D, Koester I, Kosciolek T, Kreps J, Langille MG, Lee J, Ley R, Liu Y, Loftfield E, Lozupone C, Maher M, Marotz C, Martin BD, McDonald D, McIver LJ, Melnik AV, Metcalf JL, Morgan SC, Morton J, Naimey AT, Navas-Molina JA, Nothias LF, Orchanian SB, Pearson T, Peoples SL, Petras D, Preuss ML, Pruesse E, Rasmussen LB, Rivers A, Robeson, II MS, Rosenthal P, Segata N, Shaffer M, Shiffer A, Sinha R, Song SJ, Spear JR, Swafford AD, Thompson LR, Torres PJ, Trinh P, Tripathi A, Turnbaugh PJ, Ul-Hasan S, van der Hooft JJ, Vargas F, Vázquez-Baeza Y, Vogtmann E, von Hippel M, Walters W, Wan Y, Wang M, Warren J, Weber KC, Williamson CH, Willis AD, Xu ZZ, Zaneveld JR, Zhang Y, Zhu Q, Knight R, Caporaso JG. 2018. QIIME 2: Reproducible, interactive, scalable, and extensible microbiome data science. PeerJ Preprints 6:e27295v2 https://doi.org/10.7287/peerj.preprints.27295v2

译者简介

刘永鑫,博士。2008年毕业于东北农大微生物学专业。2014年中科院遗传发育所获生物信息学博士学位,2016年博士后出站留所工作,任宏基因组学实验室工程师,目前主要研究方向为宏基因组学、数据分析与可重复计算和植物微生物组、QIIME 2项目参与人。发于论文12篇,SCI收录9篇。2017年7月创办“宏基因组”公众号,目前分享宏基因组、扩增子原创文章400+篇,代表博文有《扩增子图表解读、分析流程和统计绘图三部曲》,关注人数3.2万+,累计阅读500万+。

猜你喜欢

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外3000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。

学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

image

点击阅读原文,跳转最新文章目录阅读
https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA