组间差异分析:MRPP

2022-05-05 13:52:14 浏览数 (3)

无论是野外环境样品,还是室内试验样品,一般我们都会设置样方或平行样来增强分析的准确性,必要时还会进行区组设计,因此在数据分析中需要进行组间差异的比较判别。然而对于微生物群落数据,由于物种繁多,而且不同物种的敏感环境因子不同,因此基于正态分布的参数检验难以满足分析需要,要进行多元非参数检验(non-parametric multivariate statistical tests)来计算显著性,R语言vegan包含有多种非参数检验方法,包括Anosim、Adonis、MRPP等,不同方法在统计量的选择、零模型等方面存在差异。

往期文章介绍了Anosim和Adonis,今天继续介绍MRPP分析。

MRPP分析即多重响应排列程序(Multiple ResponsePermutation Procedure),使用方法与Anosim类似,用于分析组间微生物群落结构的差异是否显著,通常可以配合PCA、PCoA、NMDS等降维图使用。MRPP的研究原理是通过置换把所有观察对象统一分成各种可能的组合情况,构造统计量δ:

然后计算每种分组下统计量的值并统计该统计量的分布,其中n为组数,Ci为第i组的权重,一般为改组观察值占全部观察值的比例,ξi为第i个小组的平均对象距离,可以想象如果统计量δ值越小分组越有效,然后根据实际观察值计算统计量进行检验。可以看出,MRPP与Anosim以及Adonis的理念完全不同,Anosim与Adonis旨在比较组内与组间差异,而MRPP旨在搜寻组内距离最小的分组方案而不考虑组间距离,也即坚信一定存在一种显著的分组。

在R中可以使用vegan包中的mrpp()函数进行分析,其默认距离为distance="euclidean",可以先计算距离矩阵再进行分析,示例如下:

代码语言:javascript复制
#读取物种和环境因子信息
data=read.csv("otu_table.csv", header=TRUE, row.names=1)
envir=read.table("environment.txt", header=TRUE)
rownames(envir)=envir[,1]
env=envir[,-1]
#筛选高丰度物种
means=apply(data, 1, mean)
otu=data[names(means[means>10]),]
otu=t(otu)
#计算距离矩阵
library(vegan)
dist=vegdist(otu, method="bray", diag=TRUE, upper=TRUE)
#根据地理距离聚类
kms=kmeans(env, centers=3, nstart=22)
Position=factor(kms$cluster)
#进行MRPP分析
mrpp=mrpp(dist, Position, permutations=999)
mrpp

结果给出了每个组的样品数目以及组内平均对象距离(class delta)、分组解释的距离比例(A)。可以使用meandist()函数计算组间平均距离,如下所示:

代码语言:javascript复制
#计算组间平均距离
meandist(dist, Position)

MRPP分析也常用来识别和检验不同小组在排序图上的差异程度,使用主排序轴数据(需要欧氏距离!)和分组数据,来检验排序结果是否符合预期。例如如下所示PCoA排序:

我们想要判断两种动物肠道微生物群落的排序坐标是否具有显著差异:

代码语言:javascript复制
dist=read.table("new.weighted.phylip.subsample.dist", header=FALSE)
rownames(dist)=dist[,1]
dist=dist[,-1]
colnames(dist)=t(rownames(dist))
dist=as.dist(dist, diag=TRUE)
#进行PCoA分析
otu_pca=prcomp(dist, scal=FALSE)
pc12=otu_pca$x[, 1:2]
#检验排序结果
fish=c(rep("Bp", 10), rep("Ci", 10))
mrpp2=mrpp(pc12, fish, distance="euclidean", permutations=999)
mrpp2

检验结果显著,也即排序结果与实验设计分组是相符的。

示例数据下载链接:

链接:https://pan.baidu.com/s/1X0W-ns8kSdwzyliycYwV8A

提取码:65pc

END

1 人点赞