本文“宏基因组”公众号原创。
作者:舟行天下
编辑:metagenome
在进行微生物多样性分析时,大家一定会做α,β多样性分析。α多样品通俗来讲就是样本内的物种多样性。β多样性是指在地区尺度上,物种组成沿着某个梯度方向从一个群落到另一个群落的变化率。即沿着某一环境梯度,物种替代的速率、物种周转率等。
排序的过程是将样品或微生物物种排列在一定的空间, 使得排序轴能够反映一定的生态梯度。这些排序方法又可以分成间接梯度排序(indirect gradient analysis)和直接梯度排序(direct gradient analysis)。间接梯度排序又叫非约束性排序;寻求潜在的或在间接的环境梯度来解释物种数据的变化包括PCA,PCoA,NDMS,直接排序又叫约束性排序;它是指在特定的梯度上(环境轴) 上探讨物种的变化情况;方法包括 RDA, CCA, db-RDA。排序分析(Ordination analysis)。排序(ordination)的过程就是在一个可视化的低维空间或平面重新排列这些样本,使得样本之间的距离最大程度地反映出平面散点图内样本之间的关系信息。
distance-based redundancy analysis (db-RDA) 是目前在微生物领域应用的最为广泛的环境因子分析,该分析方法内置在R中的vegan包中。相信大家一定都知道vegan包,该R包是进行生态学(包括微生物多样性分析)研究的必备神器,google统计引用了12578次!vegan包中提供了所有基本排序分析的方法,可以说是一包在手搞定所有!
关于vegan包的详细介绍,请大家查看vegan包的官方文档http://ftp.uni-bayreuth.de/math/statlib/R/CRAN/doc/packages/vegan.pdf
之前我们讲解环境因子分析结果的解读:环境因子关联分析——我应该选择CCA还是RDA分析?。今天带大家亲自分析环境因子并绘图。
要进行微生物环境因子分析,我们需要两个文件,一个是微生物多样性的OTU 表格,另一个就是你所有样品的环境因子数据。
比如,你进行土壤微生物研究,这时候你就需要知道你所测土壤的C,N,P,K等化学元素含量以及不同样地的气候信息等等,总之,在分析之前可以多准备些环境因子数据,后期我们还可以对这些环境因子进行共线性,以及环境因子与数据拟合优良性判断。
下载测序数据,请宏基因组公众号后台回复:“db-RDA”获取最新下载链接。
首先看看我们准备的OTU表格以及环境因子数据结构(图1,图2),读取完数据之后,我们要把OTU的横轴和纵轴调换位置,然后把OTU表格也要进行hellinger转化,使数据均一性更好。并把环境因子进行log转化,以减少同一种环境因子之间本身数值大小造成的影响。
#OTU ID KO1 KO2 KO3 KO4 KO5 KO6 OE1
OTU_1 8 0 0 0 0 1 10
OTU_10 1 2 0 2 0 0 6
OTU_100 0 17 8 0 0 5 18
OTU_1000 1 0 1 2 1 5
OTU_1004 3 1 0 0 1 1
OTU_1005 5 5 26 71 20 64
OTU_1007 1 0 0 0 3 0
OTU_1008 8 6 3 6 1 2
图1. OTU表格式示例
N P K Ca Mg
KO1 17.8 42.1 139.9 519.4 90
KO2 13.4 39.1 167.3 356.7 70.7
KO3 20.2 67.7 207.1 973.3 209.1
KO4 20.6 60.8 233.7 834 127.2
KO5 23.8 54.5 180.6 777 125.8
KO6 22.8 40.9 171.4 691.8 151.4
图2. 环境因子格式示例
数据都进行均一化之后,我们要进行RDA和CCA的模型筛选。先用species-sample资料做DCA分析看分析结果中Lengths of gradient的第一轴的大小,如果大于4.0,就应该选CCA,如果在3.0-4.0之间,选RDA和CCA均可,如果小于3.0,RDA的结果要好于CCA。(图3)
在筛选完RDA和CCA分析后,我们需要利用方差膨胀因子分析,对所有环境因子进行共线性分析。我们要依次删掉最大的变量,也就是删除掉共线性的环境因子,直到所有的变量都小于10。
最后我们要用step模型检测最低AIC值,在这一步中该模型会自动筛选出最优的环境因子。当“none”位于最顶端时意味着该模型筛选结束,位于none值上方的环境因子即为与OTU拟合最好的环境因子。
在进行完以上的数据筛选之后,我们可以用筛选的结果重新进行一次环境因子与OTU的线性回归分析,这样我们就拿到了最终的计算结果,并且用ANOVA进行显著性检验,并且通过该分析我们还可以看到所筛选的环境因子的整体贡献率,以及每个环境因子的单独贡献率。
本例中我们使用了基于ggplot2的vegan–ggvegan进行的分析。ggvegan的出图结果可以调用ggplot2进行绘图,使你的图更为美观,其具体用法与ggplot2的图层叠加方式类似。详情大家可以参考ggvegan的官网https://www.rdocumentation.org/packages/ggvegan/versions/0.0-9。
下面是用plot和ggvegan的autoplot来进行绘制的两种结果。
# 首先要安装devtools包,仅需安装一次
install.packages("devtools")
# 加载devtools包
library(devtools)
# 下载ggvegan包
devtools::install_github("gavinsimpson/ggvegan")
library(ggvegan)
otu.tab <- read.csv("otutab.txt", row.names = 1, header=T, sep="\t")
env.data <- read.csv("new_meta.txt", row.names = 1, fill = T, header=T, sep="\t")
#transform data
otu <- t(otu.tab)
#data normolization (Legendre and Gallagher,2001)
##by log
env.data.log <- log1p(env.data)##
##delete NA
env <- na.omit(env.data.log)
###hellinger transform
otu.hell <- decostand(otu, "hellinger")
#DCA analysis
sel <- decorana(otu.hell)
sel
otu.tab.0 <- rda(otu.hell ~ 1, env) #no variables
#Axis 第一项大于四应该用CCA分析
otu.tab.1<- rda(otu.hell ~ ., env)
#我们在筛选完RDA和CCA分析后,我们需要对所有环境因子进行共线性分析,利用方差膨胀因子分析
vif.cca(otu.tab.1)
#删除掉共线性的环境因子,删掉最大的变量,直到所有的变量都小于10
otu.tab.1 <- rda(otu.hell ~ N+P+K+Ca+Mg+pH+Al+Fe+Mn+Zn+Mo, env.data.log)
vif.cca(otu.tab.1)
#进一步筛选
otu.tab.1 <- rda(otu.hell ~ N+P+K+Mg+pH+Al+Fe+Mn+Zn+Mo, env.data.log)
vif.cca(otu.tab.1)
#test again
otu.tab.1 <- rda(otu.hell ~ N+P+K+Mg+pH+Fe+Mn+Zn+Mo, env.data.log)
#方差膨胀因子分析,目前所有变量都已经小于10
vif.cca(otu.tab.1)
##用step模型检测最低AIC值
mod.u <- step(otu.tab.0, scope = formula(otu.tab.1), test = "perm")# "perm"增加P值等参数
mod.d <- step(otu.tab.0, scope = (list(lower = formula(otu.tab.0), upper = formula(otu.tab.1))))
mod.d
##本处筛选的结果,找到一个Mg环境因子适合模型构建,为了下一步画图,我们
#保留所有非共线性的环境因子
#choose variables for best model and rda analysis again#
(otu.rda.f <- rda(otu.hell ~ N+P+K+Mg+pH+Fe+Mn+Zn+Mo, env))
anova(otu.rda.f)
anova(otu.rda.f, by = "term")
anova(otu.rda.f, by = "axis")
#计算db-rda
## 用ggvegan绘图
p<- autoplot(otu.rda.f, arrows = TRUE,axes = c(1, 2), geom = c("point", "text"), layers = c( "species","sites", "biplot", "centroids"), legend.position = "right", title = "db-RDA")
## 添加图层
p + theme_bw()+theme(panel.grid=element_blank())
本文“宏基因组”公众号原创。
作者:舟行天下
编辑:metagenome
在进行微生物多样性分析时,大家一定会做α,Β多样性分析。α多样品通俗来讲就是样本内的物种多样性。Β多样性是指在地区尺度上,物种组成沿着某个梯度方向从一个群落到另一个群落的变化率。即沿着某一环境梯度,物种替代的速率、物种周转率等。
排序的过程是将样品或微生物物种排列在一定的空间, 使得排序轴能够反映一定的生态梯度 这些排序方法又可以分成间接梯度排序(indirect gradient analysis)和直接梯度排序(direct gradient analysis)。间接梯度排序又叫非约束性排序;寻求潜在的或在间接的环境梯度来解释物种数据的变化包括PCA,PCoA,NDMS,直接排序又叫约束性排序;它是指在特定的梯度上(环境轴) 上探讨物种的变化情况;方法包括 RDA, CCA, db-RDA。排序分析(Ordination analysis)。排序(ordination)的过程就是在一个可视化的低维空间或平面重新排列这些样本,使得样本之间的距离最大程度地反映出平面散点图内样本之间的关系信息。
distance-based redundancy analysis (db-RDA) 是目前在微生物领域应用的最为广泛的环境因子分析,该分析方法内置在R中的vegan包中。相信大家一定都知道vegan包,该R包是进行生态学(包括微生物多样性分析)研究的必备神器!vegan包中提供了所以基本排序分析的方法,可以说是一包在手搞定所有!
关于vegan包的详细介绍,请大家查看vegan包的官方文档
要进行微生物环境因子分析,我们需要两个文件,一个是微生物多样性的OTU 表格,另一个就是你所有样品的环境因子数据。
比如,你进行土壤微生物研究,这时候你就需要知道你所测土壤的C,N,P,K等化学元素含量以及不同样地的气候信息等等,总之,在分析之前可以多准备些环境因子数据,后期我们还可以对这些环境因子进行共线性,以及环境因子与数据拟合优良性判断。
首先看看我们准备的OTU表格以及环境因子数据结构(图1,图2),读取完数据之后,我们要把OTU的横轴和纵轴调换位置,然后把OTU表格也要进行hellinger转化,使数据均一性更好。并把环境因子进行log转化,以减少同一种环境因子之间本身数值大小造成的影响。
数据都进行均一化之后,我们要进行RDA和CCA的模型筛选。先用species-sample资料做DCA分析看分析结果中Lengths of gradient的第一轴的大小,如果大于4.0,就应该选CCA,如果在3.0-4.0之间,选RDA和CCA均可,如果小于3.0,RDA的结果要好于CCA。(图3)
在筛选完RDA和CCA分析后,我们需要利用方差膨胀因子分析,对所有环境因子进行共线性分析。我们要依次删掉最大的变量,也就是删除掉共线性的环境因子,直到所有的变量都小于10。
最后我们要用step模型检测最低AIC值,在这一步中该模型会自动筛选出最优的环境因子。当“none”位于最顶端时意味着改模型筛选结束,位于none值上方的环境因子即为与OTU拟合最好的环境因子。
在进行完以上的数据筛选之后,我们可以用筛选的结果重新进行一次环境因子与OTU的线性回归分析,这样我们就拿到了最终的计算结果,并且用ANOVA进行显著性检验,并且通过该分析我们还可以看到所筛选的环境因子的整体贡献率,以及每个环境因子的单独贡献率。
本例中我们使用了内置ggplot2的vegan–ggvegan进行的分析。ggvegan的出图结果可以用内置的ggplot2进行优化,使你的图更为美观,其具体用法与ggplot2的图层叠加方式类似。详情大家可以参考ggvegan的官网
# 首先要安装devtools包,仅需安装一次
install.packages("devtools")
# 加载devtools包
library(devtools)
# 下载ggvegan包
devtools::install_github("gavinsimpson/ggvegan")
library(ggvegan)
otu.tab <- read.csv("otutab.txt", row.names = 1, header=T, sep="\t")
env.data <- read.csv("new_meta.txt", row.names = 1, fill = T, header=T, sep="\t")
#transform data
otu <- t(otu.tab)
#data normolization (Legendre and Gallagher,2001)
##by log
env.data.log <- log1p(env.data)##
##delete NA
env <- na.omit(env.data.log)
###hellinger transform
otu.hell <- decostand(otu, "hellinger")
#DCA analysis
sel <- decorana(otu.hell)
sel
otu.tab.0 <- rda(otu.hell ~ 1, env) #no variables
#Axis 第一项大于四应该用CCA分析
otu.tab.1<- rda(otu.hell ~ ., env)
#我们在筛选完RDA和CCA分析后,我们需要对所有环境因子进行共线性分析,利用方差膨胀因子分析
vif.cca(otu.tab.1)
#删除掉共线性的环境因子,删掉最大的变量,直到所有的变量都小于10
otu.tab.1 <- rda(otu.hell ~ N+P+K+Ca+Mg+pH+Al+Fe+Mn+Zn+Mo, env.data.log)
vif.cca(otu.tab.1)
#进一步筛选
otu.tab.1 <- rda(otu.hell ~ N+P+K+Mg+pH+Al+Fe+Mn+Zn+Mo, env.data.log)
vif.cca(otu.tab.1)
#test again
otu.tab.1 <- rda(otu.hell ~ N+P+K+Mg+pH+Fe+Mn+Zn+Mo, env.data.log)
#方差膨胀因子分析,目前所有变量都已经小于10
vif.cca(otu.tab.1)
##用step模型检测最低AIC值
mod.u <- step(otu.tab.0, scope = formula(otu.tab.1), test = "perm")# "perm"增加P值等参数
mod.d <- step(otu.tab.0, scope = (list(lower = formula(otu.tab.0), upper = formula(otu.tab.1))))
mod.d
##本处筛选的结果,找到一个Mg环境因子适合模型构建,为了下一步画图,我们
#保留所有非共线性的环境因子
#choose variables for best model and rda analysis again#
(otu.rda.f <- rda(otu.hell ~ N+P+K+Mg+pH+Fe+Mn+Zn+Mo, env))
anova(otu.rda.f)
anova(otu.rda.f, by = "term")
anova(otu.rda.f, by = "axis")
#计算db-rda
## 用ggvegan绘图
p<- autoplot(otu.rda.f, arrows = TRUE,axes = c(1, 2), geom = c("point", "text"), layers = c( "species","sites", "biplot", "centroids"), legend.position = "right", title = "db-RDA")
## 添加图层
p + theme_bw()+theme(panel.grid=element_blank())
为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外1200+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
点击阅读原文,跳转最新文章目录阅读
https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA
为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外1400+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。
学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”
点击阅读原文,跳转最新文章目录阅读
https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA