第九章 多变量群落分析2

步骤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()。到目前为止,关于多元群落分析的讨论大多局限于生态学和其他相关研究领域,而不是微生物群系领域。然而,微生物组的研究已经采用了这些方法和途径,这些方法的优点和局限性也同样适用于微生物组的研究。

你可能感兴趣的:(第九章 多变量群落分析2)