步骤1:以适当的格式加载和读取OTU表:设置目录的方式与我们在前几章中所做的相同。“td_OTU_tag_mapped_lineage.txt”数据集包含两条信息:最后一列中的OTU计数表和分类法。来自原始数据集作者的部分R码是有用的。我们在这里修改它们,并解释和评论代码的作用。
> setwd("E:/Home/MicrobiomeStatUsingR/Analysis/")
> otu_tab <- read.table("td_OTU_tag_mapped_lineage.txt", header=T, sep="\t", row.names=1, comment.char="", check.names=FALSE)
在参数中,row.ames=1参数指定包含行名的表的第1列;comment.char=“”用于完全关闭注释的解释。它比默认的read.table()快得多。数据集“td_OTU_tag_mapped_lineage.txt"的前6行如下所示:
但是,为了正确使用GUniFrac软件包,OTU表应该是数字矩阵。以下R代码用于从原始数据集中删除分类列。
> taxonomy <- otu_tab$taxonomy
> otu_tab <- otu_tab[-length(colnames(otu_tab))]
OTU表需要通过OTU矩阵转置成样本。
> otu_tab <- t(as.matrix(otu_tab))
> head(otu_tab)
......
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
S31 38 2866 437 3356 12 145 43 0 20 19 33 27 16 21 79 40 30 12
S1 36 15069 9831 7407 478 238 1368 25 306 2821 91 169 323 475 1290 3795 532 186
S42 30 42985 4628 5355 16 234 14491 2 357 153 48 109 136 520 781 617 727 867
S13_T2 14 3292 4231 62 342 3 282 1 188 51 64 168 161 574 557 33 408 7
S30 13 1223 4473 121 23 56 3 0 123 3 13 3 279 207 703 123 617 5
S50 18 1056 718 14 8 1 3 1 20 5 0 1 35 49 119 28 83 5
步骤2:使用稀疏化将样本OTU计数归一化到标准测序深度(Use Rarefaction to Normalize the Sample OTU Counts to a Standard Sequencing Depth)
推荐UniFrac的作者使用这些稀有数据,并用于计算未加权的UniFrac距离矩阵,而非稀疏数据使用其定制的UniFrac脚本进行加权、信息和比率UniFrac。然而,在GUniFrac软件包手册中,所有UniFrac距离计算都使用稀疏数据。因为GUniFrac对不同的测序深度很敏感,为了在平等的基础上比较微生物群,可以使用稀释法。因此,我们遵循包装手册;在执行未加权、加权UniFrac和方差调整的加权UniFrac距离之前,对样本进行稀疏处理。稀疏可以使用vegan包中的函数rrarefy()或rarefy()来完成。
> library(vegan)
> otu_tab_rarefy <- rrarefy(otu_tab, min(apply(otu_tab,1,sum)))
步骤3:阅读系统发育树(Read Phylogenetic Tree):GUniFrac包需要一个根树作为输入数据。我们可以使用Pangorn包中的函数Midpoint()来获取根树
> library(phangorn)
> otu_tree <- midpoint(otu_tree)
> otu_tree
Phylogenetic tree with 115 tips and 114 internal nodes.
Tip labels:
1, 11, 6686, 18, 230, 82, ...
Node labels:
NA, 71.9, 79.1, 86.9, 87.1, 52.4, ...
Rooted; includes branch lengths.
步骤4:计算UniFracs:现在,可以使用GUniFrac包计算UniFracs。
> library(GUniFrac)
> #Calculate the UniFracs
> unifracs <- GUniFrac(otu_tab_rarefy, otu_tree, alpha=c(0, 0.5, 1))
$unifracs
> dw <- unifracs[,, "d_1"] # Weighted UniFrac
> du <- unifracs[,, "d_UW"] # Unweighted UniFrac
> dv <- unifracs[,, "d_VAW"]# Variance adjusted weighted UniFrac
> d0 <- unifracs[,, "d_0"] # GUniFrac with alpha 0
> d5 <- unifracs[,, "d_0.5"]# GUniFrac with alpha 0.5
步骤5:执行PERMANOVA以比较一个UniFrac度量:为了检验这些UniFrac度量的假设,需要从元数据中提取组信息。我们使用函数read.table()读取元数据,如下所示:
> meta_tab<- read.table("metadata.txt", header=T, sep="\t",row.names=1, comment.char="", check.names=FALSE)
匹配OTU表和元数据以保留仅出现在两个数据集中的样本。
> otu_meta_matched <- match(rownames(meta_tab),rownames(otu_tab))
> otu_meta_matched <- otu_meta_matched[!is.na(otu_meta_matched)]
> otu_tab <- otu_tab[otu_meta_matched,]
> meta_tab_Ordered <- meta_tab[match(rownames(otu_tab),rownames(meta_tab)),]
下面的R代码使用vegan包中的函数Adonis()执行PERMANOVA,以比较妊娠距离序列中间的距离。感兴趣的读者可以尝试其他UniFrac距离度量。
> set.seed(123)
> adonis(as.dist(d5) ~ meta_tab$Gestation)
Call:
adonis(formula = as.dist(d5) ~ meta_tab$Gestation)
Permutation: free
Number of permutations: 999
Terms added sequentially (first to last)
Df SumsOfSqs MeanSqs F.Model R2 Pr(>F)
meta_tab$Gestation 4 0.4336 0.108391 1.2001 0.08305 0.22
Residuals 53 4.7869 0.090319 0.91695
Total 57 5.2205 1.00000
同样,性别和挤奶类型的影响可以测试如下。
Step 6: Conduct PERMANOVA to Compare Multiple UniFrac Measures Using the Function PermanovaG()(使用PermanovaG()函数执行PERMANOVA以比较多个UniFrac度量)
组合多个距离矩阵可以增加假设检验的能力。下面的R代码使用d(0)、d(0.5)、d(1)和PermanovaG()函数进行置换多变量方差分析。
> PermanovaG(unifracs[, , c("d_0", "d_0.5", "d_1")] ~ meta_tab$Gestation)
$aov.tab
F.Model p.value
meta_tab$Gestation 1.262764 0.263
9.6 Summary and Discussion
在这一章中,我们介绍了多变量群落微生物组数据的假设检验及其在R系统中的逐步实现。我们用来说明的数据来自我们自己的研究。读者可以使用本章提供的R代码和解释来分析自己的微生物组数据。关于β多样性的多变量群落分析,生态学文献中存在两种方法:“原始数据方法”和“距离(Mantel)方法”。PERMANOVA、冗余分析(RDA)、基于距离的RDA(db-RDA)和主坐标规范分析是基于原始数据的方法,而Mantel检验是典型的基于距离的方法。ANOSIM只是基于两个距离矩阵之间的标准化秩相关的Mantel检验的修改版本。因此,它也属于基于距离的方法。Mantel检验的应用领域也被应用于相似性分析(ANOSIM)(Legendre等人。2005)。问题是哪种方法更适合分析多变量群落微生物组数据?在生态文献中,有很多关于这个主题的讨论。基于距离的方法有问题:(1)它们没有正确地划分数据中的变化,并且没有提供正确的第I类错误率,因此不适合于分析β分集;(2)正如Anderson等人所指出的,更有问题的是使用划分方法来直接推断在β分集中驱动模式的底层过程的相对重要性。例如,ANOSIM和Mantel测试已经证明它们不适合测试关于原始数据变化的假设。因此,建议他们只分析β多样性的变化,而不是β多样性的变化。基于原始数据的替代方法被认为为β多样性分析提供了更合适和更强大的工具。然而,基于距离的方法确实有一些优势。例如,Mantel检验被认为是关联两个距离矩阵的有效方法,并提供了更大的灵活性,允许使用其他类型的距离函数,如Jaccard或Steinhaus/Bray-Curtis,它可能适合于关于不同地点(样本)之间β多样性变化的假设。与简单的Mantel测试相比,生态学研究也指出,部分Mantel方法在一段时间内对解释是有问题的。关于vegan包中函数的用法,该包的作者推荐使用Adonis()而不是mrpp()和anosim()。原因在于,函数Adonis()允许对由连续和/或分类预测器解释的β多样性的方差进行类似于ANOVA的测试。然而,mrpp()和anosim()都只处理范畴预测器,并且它们的健壮性不如Adonis()。到目前为止,关于多元群落分析的讨论大多局限于生态学和其他相关研究领域,而不是微生物群系领域。然而,微生物组的研究已经采用了这些方法和途径,这些方法的优点和局限性也同样适用于微生物组的研究。