往期文章介绍了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