CCA与RDA通常用于分析微生物群落与环境变量之间的关系,并且能够作出定性结论。如果是两个变量想要定量的话,直接用相关系数来计算即可。然而,微生物群落和环境变量的数据通常以矩阵为主,因此要抛开计算两个变量相关系数的思路。我们可以利用Mantel test,它是一种检验,主要是用于计算矩阵之间的相关系数,原假设为两个矩阵之间没有相关性。今天,我们主要学习一下该方法的代码部分。
🐣 一、曼特尔检验与部分曼特尔检验的简介
一般来说, 曼特尔检验(Mantel test) 是两个距离(或相异性)矩阵之间的相关性测试。 部分曼特尔检验(Partial Mantel test) 也是两个矩阵的相关性测试,但控制了第三个距离矩阵的影响。这种控制是通过在对第三个距离矩阵进行线性回归之后计算两个主要距离矩阵中的每一个残差之间的相关性来完成的。需要注意,在简单和部分Mantel test中,计算的是两个变量之间(和我们所理解的不同,比如微生物群落与环境因子,这是矩阵)的相关系数。然后,我们将其中一个矩阵进行多次置换(例如,999 次)并在每次置换后重新计算相关系数。然后根据观察到的相关值在相关值的随机分布的分布范围内的位置计算p值。如果大家想要更多关于Mantel test的原理,可以阅读链接Mantel分析原理介绍。
🐤 二、Mantal及Partial Mantel分析的R实现过程
主要用到"vegan
"R包中的mantel与mantel.partial函数,首先我们简单了解一下两个函数的用法和主要参数。
#加载R包
library(vegan)
#向help查询相关函数的用法
?mantel
?mantel.partial
查询如下:
继续看该函数的Examples:
#函数自带例子
data(varespec)
data(varechem)
#查看函数的数据结构,便于学习和模仿
str(varespec)
str(varechem)
从例子来看,需要准备物种群落和环境因子的数据,当然是根据自己情况来选择非生物数据。通常都是在做完CCA或者RDA后,我们进一步利用Mantel test再做一遍定量的验证,证明微生物群落与环境因子之间的关系。从这两张截图来看,我们需要准备的数据均为data.frame数据格式(数据框格式)。
关于CCA和RDA分析的区别,如果不清楚如何选择最优环境变量可以参考不同环境因子组合与群落变化相关性的BioEnv分析。
下一步我们需要将数据都转换成矩阵格式:
#将物种数据转换成以dist格式的矩阵
veg.dist <- vegdist(varespec, method="bray")
str(veg.dist)
#这个可以看到method部分显示的是bray,表明用的是bray curtis的算法
#另外,我们对环境变量数据进行转化时,可以使用标准化,因为存在量纲的差异
#同时可以使用其他的计算距离的算法,这里使用的是欧式距离
env.dist <- vegdist(scale(varechem), "euclidean")
str(env.dist)
在测试之前,让我们绘制我们的变量。我们可以看到,随着环境因子距离的变化,组成似乎变得更加不同。
plot(env.dist, veg.dist, pch=16, cex=0.5, col="black",
bty="l", xlab="environment distance",ylab="species")
然后进行mantel test:
#我们将使用mantel test来测试是否存在物种相似性的距离随环境因子的变化而衰减。
#需要注意,我们将在测试中使用 Pearson 相关系数和 999 置换次数。
mantel(veg.dist, env.dist, method = "pearson", permutations = 999)
通常默认使用pearson的方法来计算相关性,我们也可以使用spearman或者kendall的方法。这里方法的选择,主要根据数据的实际情况,符合哪种就选择哪种方法。这里可以参考如何用R让你的统计分析变得更规范?
mantel(veg.dist, env.dist, method="spearman", permutations = 999)
从结果来看,两种方法均有一个统计上显著的正相关系数,表明存在物种相似性的随环境因子变化而衰减。
最后,我们还可以利用partial Mantel test方法来控制一个矩阵,探究另外两个矩阵之间的相关关系:
#我们随机构建第三个矩阵的数据
soil <- data.frame(varechem[4:10])
soil.dist <- vegdist(scale(soil), method="euclidean")
mantel.partial(veg.dist, soil.dist, env.dist, method = "pearson",
permutations = 999) #控制了环境变量,探究物种与土壤养分的关系
#根据我们的结果,物种和土壤成分差异之间没有关系。
我们在学习Mantel test分析的时候需要注意的是,1)该方法研究的是两个矩阵之间的相关关系,而不是单一的两个变量;2)如果需要控制变量,请选择partial Mantel test;3)通常做完CCA或者RDA后会补充一个定量的Mantel test;4)在进行测试之前,需要将所需分析的数据集进行dist格式矩阵转化。另外,在学习过程可能还有需要注意的地方,请大家自行尝试。