16S 基础知识、分析工具和分析流程详解
工作中有个真理:如果你连自己所做的工作的来龙去脉都讲不清楚,那你是绝对不可能把这份工作做好的。
这适用于任何行业。如果你支支吾吾,讲不清楚,那么说难听点,你在混日子,没有静下心来工作。
检验标准:随时向别人解释你的工作,让别人提出尖锐的问题,看你是不是答不上来。
16S概念
- 什么是16S?S是什么意思?
- 16S分析是用来干嘛的?能分析什么?
- 16S大致的分析原理是什么?
有点生物学基础的会知道16S和核糖体有关,但大多数还是搞不清楚它们之间的关系。
先明确一些概念:
核糖体:Ribosome,由 RNA(rRNA)和蛋白质 组成,配合 tRNA 来翻译 mRNA。核糖体按沉降系数来分类,S就是沉降系数,原核70S,真核80S。我们一般研究微生物,70S,由50S和30S两个亚基组成。再细分为 5S、16S、23S,我们的 16S 就是指核糖体的亚基的一个组分,16S rRNA。(记住,这是原核生物核糖体的一个组分)
16S rRNA:这并不是我们的研究对象,因为我们测序的不是它,而是它对应在DNA双链上的基因序列,
16S rDNA。可以这样理解,我们所说的16S 就是指 16S rDNA。
分子钟:即氨基酸在单位时间以同样的速度进行置换。16S 的进化具有良好的时钟性质,在结构与功能上具有高度的保守性,在大多数原核生物中rDNA都具有多个拷贝,5S、16S、23S rDNA的拷贝数相同。16S rDNA由于大小适中,约1.5Kb左右,既能体现不同菌属之间的差异,又能利用测序技术较容易地得到其序列,故被细菌学家和分类学家接受。(来源百度)
所以,16S测序的大致逻辑就是:
拿到一个样品,我们捕获其16S区域(引物PCR),然后测序,16S既然有极好的保守性,那就可以用于鉴别不同的物种(相当于一个物种的独一无二的条形码)(有很大一部分是鉴定不到物种的)。
分析逻辑就是聚类成OTU,然后注释(比对已知数据库),后续分析。
偶然看到一篇好的科普文,转载一下:来自伯豪生物
1、16S
通常所说的16S是指16S rDNA(或16S rRNA),16S rRNA 基因是编码原核生物核糖体小亚基的基因,长度约1542bp,包括9个可变区和10个保守区,保守区序列反映了物种间的亲缘关系,而可变区序列则能反映物种间的差异。
因16S rDNA分子大小适中,突变率小,故成为细菌系统发育和分类鉴定最常用的标签。
16S测序是指选择16S rDNA某个或某几个变异区域,选择通用引物对环境样本(肠道、土壤、水体等)微生物进行PCR扩增,然后对PCR产物进行高通量测序,并将得到的测序数据与已有的16S rDNA数据库进行比对分析,从而对环境群落多样性进行研究,核心是物种分析,包括微生物的种类,不同种类间的相对丰度,不同分组间的物种差异以及系统进化等。
16S rDNA序列结构
2、OTU
OTU即Operational Taxonomic Units的缩写(千万表手滑写成OUT,否则就OUT了),在系统发生学或群体遗传学研究中,为了便于进行分析,人为给某一个分类单元(品系,属,种、分组等)设置的同一标志。理论上一个OTU代表一个微生物物种。
通过测序获得的大量reads,如何才能转变为我们需要的物种信息呢?首先需要对这些reads进行归类(cluster),通常在97%的相似水平划分为不同的OTU,将OTU代表序列与相应的微生物数据库比对(Silva、RDP、Greengene等),得到每个样本所含的物种信息,进而进行后续生物信息统计分析。
3、Q值
Q值评估用来测序的碱基质量,Q值与测序错误E值之间关系为如果一个碱基的Q值为20,那表示这个碱基的可能测错的可能性为1%。实际操作中常用Q20/Q30作为标准,Q20大于90%妥妥的。
4、Coverage
Coverage值是指各样本文库的覆盖率,数值越高,则样本中序列被检测出来的概率越高,该数值可反映本次测序结果是否代表样本的真实情况。数值越接近于100%,代表本次测序结果越符合样本中微生物的实际情况。
5、Alpha-diversity
Alpha多样性用于度量群落生态单样本的物种多样性,是反映丰富度和均匀度的综合指标。
菌群丰富度(Community richness)指数有:Chao、Ace,Chao或Ace指数越大,说明菌群丰富度越高。
菌群多样性(Community diversity)指数有:Shannon、Simpson,Shannon值越大,说明群落多样性越高;Simpson指数值越大,说明菌群多样性越低。
根据各样本生成的OTU,对样本序列进行随机取样,以取出的序列数及这些序列所能代表的OTU数构建曲线,计算样本的Alpha多样性。
通常Alpha多样性指数均以表格形式呈现,这显然不利于论文颜值的提升,那么可以将Alpha多样性指数结合起来,出个箱线图(Box-plot)或可有所帮助。
6、Beta-diversity
Beta多样性用于不同生态系统之间多样性的比较,利用各样本序列间的进化关系及丰度信息来计算样本间距离,反映样本(组)间是否具有显著的微生物群落差异。目前应用比较多的是PCA、PCoA、NMDS分析等。由于微生物多样性研究通常会涉及到大样本数量的样本,因此通过Beta-diversity分析可以直观地反映样本组间的差异情况。距离越远,微生物群落差异越大,即相似性越高。
7、LEfSe
LEfSe分析即LDA Effect Size分析,多用于多个分组(≧2)之间的比较,或者进行亚组比较分析,进而找到组间在丰度上有显著差异的物种(biomaker)。
基本过程是首先在多组样本中采用非参数因子Kruskal-Wallis秩和检验检测不同分组间丰度差异显著的物种;然后基于获得的显著差异物种,利用成组的Wilcoxon秩和检验进行组间差异分析;最后采用线性判别分析(LDA)对数据进行降维并评估差异显著的物种的影响力大小(即LDA score)。
LEfSe分析包含了不同分类学水平(门到属或者种)的物种信息,并且是显著差异的物种,因而是一项信息量大、采用率(biger)高的分析,值得拥有~~~
16S分析流程
建库测序暂且跳过,一下是我们拿到测序数据后的分析步骤:
- 过滤Filter
- 连接Connect Tags
- 聚类OTU Cluster
- 分类Taxonomy
- 多样性Alpha_Beta
- 。。。
Hiseq 的 16S分析流程已经比较成熟了,网上能搜到一些pipeline。
PacBio的 16S分析是最近才开发出来的。
参考文章:High-resolution phylogenetic microbial community profiling
以下是该文章的分析流程:
可以看到,PacBio 16S中大部分都在使用 mothur,这真是个好工具啊,还有详细的教程。
还有详细的数据库: Alignment database(greengenes 和 SILVA)
16S分析细节
- step01.OTU_Cluster.sh
- step02.OTU_Taxonomy.sh
- step03.Alpha_Diversity.sh
- step04.OTU_Analysis.sh
以下一次详解:
step01.OTU_Cluster.sh 的核心就是聚类得到 OTU,使用的是mothur,步骤很多。
得到OTU后,将原来的序列比对回得到的OTU上。
usearch7.0.1090/usearch7.0.1090_i86linux32 -usearch_global ./1.Clean_Tags/All_Sample.fasta -db ./2.OTU_Cluster/OTU.fasta -strand both -id 0.97 -uc ./2.OTU_Cluster/global.map.uc
usearch_global command
转化格式
bin/usearch7.0.1090/uc2otutab.py ./2.OTU_Cluster/global.map.uc > ./2.OTU_Cluster/OTU_shared_all.xls
待续~
参考:
16Sr DNA 百科
附录:
稀释性曲线(rarefaction curve)
稀释性曲线(rarefaction curve):一般是从样本中随机抽取一定数量的个体,统计出这些个体所代表物种数目,并以个体数与物种数来构建曲线。它可以用来比较测序数量不同的样本物种的丰富度,也可以用来说明样本的取样大小是否合理。分析采用对优化序列进行随机抽样的方法,以抽到的序列数与它们所能代表OTU的数目构建rarefaction curve。稀释性曲线图中,当曲线趋向平坦时,说明取样的数量合理,更多的取样只会产生少量新的OTU,反之则表明继续取样还可能产生较多新的OTU。因此,通过作稀释性曲线,可以得出样品的取样深度情况。 默认是在 97%相似性水平下划分OUT并制作各样品的稀疏曲线。
画OTU Rank curve
data <- read.table("Sample.OTU_rank_percent.xls",header=T,check.names=F)
data <- t(data)
data <- data[rowSums(is.na(data)) != 16,]
library("RColorBrewer")
col=c("#00FF40FF","#FF0000FF","#00FFFFFF")
x_point=as.numeric(rownames(data))
x=max(x_point,na.rm=T)
x=x*1.1
y=max(data[,1:ncol(data)],na.rm=T) pdf("Sample.OTU_rank.pdf",width=6+1*1,height=6)
par(mai=c(1,1,0.5,1*1))
par("usr")
plot(x,y,xlim=c(0,x),ylim=c(0.0005,100),type="n",xlab="Number of OTUs",ylab="Relative abundance(%)",main="OTU Rank Curve",tcl=-0.2,mgp=c(3,0.3,0),cex.lab=1.2,las=1,log="y",yaxt="n")
axis(2,tcl=-0.2,at=c(0.001,0.01,0.1,1,10,100),labels=c(0.001,0.01,0.1,1,10,100),las=1,hadj=0.6) points(x_point,data[,1],lwd=2,lty=1,cex=0.6,col=col[1],type="l") #C1
points(x_point,data[,2],lwd=2,lty=1,cex=0.6,col=col[2],type="l") #C3.1
points(x_point,data[,3],lwd=2,lty=1,cex=0.6,col=col[3],type="l") #C3.2 legend(par("usr")[2],10^par("usr")[4],legend=colnames(data),col=col[1:3],pch=15,pt.cex=1.2,cex=0.9,bty="n",ncol=1,xpd=TRUE)
dev.off() png("Sample.OTU_rank.png",type="cairo",width=6+1*1,height=6,units="in",res=120)
par(mai=c(1,1,0.5,1*1))
plot(x,y,xlim=c(0,x),ylim=c(0.0005,100),type="n",xlab="Number of OTUs",ylab="Relative abundance(%)",main="OTU Rank Curve",tcl=-0.2,mgp=c(3,0.3,0),cex.lab=1.2,las=1,log="y",yaxt="n")
axis(2,tcl=-0.2,at=c(0.001,0.01,0.1,1,10,100),labels=c(0.001,0.01,0.1,1,10,100),las=1,hadj=0.6) points(x_point,data[,1],lwd=2,lty=1,cex=0.6,col=col[1],type="l") #C1
points(x_point,data[,2],lwd=2,lty=1,cex=0.6,col=col[2],type="l") #C3.1
points(x_point,data[,3],lwd=2,lty=1,cex=0.6,col=col[3],type="l") #C3.2 legend(par("usr")[2],10^par("usr")[4],legend=colnames(data),col=col[1:16],pch=15,pt.cex=1.2,cex=0.9,bty="n",ncol=1,xpd=TRUE)
dev.off()
16S 基础知识、分析工具和分析流程详解的更多相关文章
- 网络基础知识-TCP/IP协议各层详解
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- Android学习之基础知识二(build.gradle文件详解)
一.详解build.gradle文件 1.Android Studio是采用Gradle来创建项目的,Gradle是非常先进的构建的项目的工具,基于Groovy领域特定的语言(DSL)来声明项目配置, ...
- Jvm(jdk8)源码分析1-java命令启动流程详解
JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...
- linux分析工具之top命令详解
Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 一.top ...
- Android学习之基础知识十三 — 四大组件之服务详解第一讲
一.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使程序被切换到后台, ...
- MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现
一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在 ...
- Android学习之基础知识十三 — 四大组件之服务详解第二讲(完整版的下载示例)
上一讲学习了很多关于服务的使用技巧,但是当在真正的项目里需要用到服务的时候,可能还会有一些棘手的问题让你不知所措.接下来就来综合运用一下,尝试实现一下在服务中经常会使用到的功能——下载. 在这一讲我们 ...
- Android学习之基础知识六—Android四种布局详解
一.Android基本布局 布局是一种可以放置多个控件的容器,它可以按照一定规律调整内部控件的位置,而且布局内部除了可以放置控件外,还可以放置布局,实现多层布局嵌套.布局和控件.布局和布局之间的关系如 ...
- 基础知识《七》---Java多线程详解
- vue.js基础知识篇(7):表单校验详解
目录 网盘 第12章:表单校验 1.npm安装vue-validator $ npm install vue-validator 代码示例: var Vue=require("vue&quo ...
随机推荐
- mongodb mongotemplate聚合
1.group by并且计算总数 @Test public void insertTest() { //测试数据 //insertTestData(); Aggregation agg = Aggre ...
- MySQL从删库到跑路(五)——SQL查询
作者:天山老妖S 链接:http://blog.51cto.com/9291927 1.查询所有字段 在SELECT语句中使用星号“”通配符查询所有字段在SELECT语句中指定所有字段select f ...
- Linux基础命令---bzcat
bzcat 解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s.该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性. 此命令的适用范围:RedHat.RHEL.Ub ...
- 组合类C++
C++中类的组合 ※组合的概念 ×类中的成员是另一个类的对象. ×可以在已有的抽象的基础上实现更加复杂的抽象. 通过对复杂对象进行分解.抽象,使我们能够将一个复杂对象 理解为简单对象的组合. 分解得到 ...
- bzoj1634 / P2878 [USACO07JAN]保护花朵Protecting the Flowers
P2878 [USACO07JAN]保护花朵Protecting the Flowers 难得的信息课......来一题水题吧. 经典贪心题 我们发现,交换两头奶牛的解决顺序,对其他奶牛所产生的贡献并 ...
- servlet+jsp+java实现Web应用
servlet+jsp+java实现Web应用 环境: 1,eclipse 2,tomcat3,eclipse tomcat 插件 开发过程: 1,建立一个Dynamic Web Project 2, ...
- 如何让VS2012编写的程序在XP下运行
Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和 Minimum Required Ve ...
- 把一个activity作为弹窗
1.可以在这个activity的xml中设置其高度为某个固定高度 2.在java中:getWindow().setGravity(Gravity.BOTTOM);//设置在底部出现 getWindo ...
- HDU3652 B-number(数位DP)题解
思路: 这里的状态分为3种,无13和末尾的1,无13且末尾为1,有13,然后DFS 等我搞清楚数位DP就来更新Orz 代码: #include<iostream> #include< ...
- HDU 1285 确定比赛名次(拓扑排序)题解
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...