做微生物16S测序的时候,公司的报告里经常会给到两种检验Adonis和ANOSIM,听过t.test、wilicox、anova各种检验,那么Adonis和ANOSIM检验是什么呢?
本文参考:
什么是ANOSIM分析?
Adonis和ANOSIM,安能辨我是雄雌
Adonis 多元方差分析
Adonis,多元方差分析,亦可称为非参数多元方差分析。其原理是利用距离矩阵(比如基于Bray-Curtis距离、Euclidean距离)对总方差进行分解,分析不同分组因素对样品差异的解释度,并使用置换检验对其统计学意义进行显著性分析。
Adonis分析结果通常如下:
Index | Df | SumsOfSqs | MeanSqs | F.Model | R2 | Pr(>F) |
---|---|---|---|---|---|---|
GroupFactor | 4 | 1.0899 | 0.27248 | 1.4862 | 0.14883 | 0.011 |
Residuals | 34 | 6.2335 | 0.18334 | 0.85117 | ||
Total | 38 | 7.3234 | 1.00000 |
其中,GroupFactor表示实验中的分组方法
Df表示自由度
SumsOfSqs表示总方差即离差平方和
MeanSqs表示均方差(SumsOfSeqs/Df)
F.Model表示检验值F
R2表示该分组方式对样品间差异的解释度,R2越大说明该分组方案对差异的解释度越高
Pr表示P值,小于0.05时显著说明本次检验的可信度高。
那么Adonis具体要如何使用呢?
在微生物的分析中我们通常把Adonis和PCA分析结合在一起。进行完PCA分析后,我们想要检验不同的分组之间究竟是否有差异,差异是否显著,这时候我们就可以用Adonis检验。如下图,虽然我们可以看到三组被分开了,但是这种分开真的显著吗?这种分组又能对样本的差异解释多少呢?那么右侧的Adonis检验就告诉了我们明确的答案,这种分组时显著的,R2=0.11。
在R中我们可以使用Vegan包中的函数adonis()
或adonis2()
进行adonis检验。
adonis2(formula, data, permutations = 999, method = "bray",
sqrt.dist = FALSE, add = FALSE, by = "terms",
parallel = getOption("mc.cores"), ...)
adonis(formula, data, permutations = 999, method = "bray",
strata = NULL, contr.unordered = "contr.sum",
contr.ordered = "contr.poly", parallel = getOption("mc.cores"), ...)
ANOSIM 相似性分析
ANOSIM,相似性分析是一种非参数检验,用于检验高纬度数据间的相似性,比较组间和组内差异的大小,从而判断分组是否有意义,其可以用于检验两组的组间和组内差异,也可以用于多组。
ANOSIM的原理如下,以最基本的两个组为例:
现在一共有6个样本,根据我们的实验方案将其分为两组Group1和Group2,每组含有3个样本。
1、首先我们基于组内样本间的距离计算组内的相似性。
Within Groups Dissimilarities2、然后我们基于组间样本的距离计算组间的相似性。
Between Groups Dissimilarities结合组内和组间,得到:
Result然后我们根据公式计算R值:
其中,
r0= mean rank of between group dissimilarities 即组间差异性秩的平均值
rw= mean rank of within group dissimilarities 即组内差异性秩的平均值
n=the number of samples 即样本总数量
因此根据公式可以知道,R的取值范围为[-1,1]:
当R趋向于1时,说明组间差异大于组内差异
当R=0时,说明组间没有差异,即分组无效,不同分组之间没有差异。
当R趋向于-1时,说明组间差异小于组内差异。
当R大于0时,我们还要进一步检验这种差异是否显著具有可信度,ANOSIM中对其的检验方法也是使用Permutation Test即置换检验。
置换检验:1、对原始样本进行随机分组,分为实验组和对照组
2、计算随机分组的Ri值,并和R比较
3、重复1000次
4、计算p=Ri大于R的百分比,从而计算P值
在我们做完PCoA、NMDS等降维分析的时候,我们也会遇到一同样的问题,数据看起来是分开的,但是不同的组之间差异真的显著吗?这个时候也可以选择ANOSIM进行检验。
R中Vegan包也提供了ANOSIM检验。下面用R中自带的鸢尾花数据集(iris)做一个示范:
library(vegan)
library(ggplot2)
#Delete Species Infor
dat<-subset(iris,select = -Species)
#Calculate Distance
iris.dist<-vegdist(dat)
#MDS analysis
m<-monoMDS(iris.dist)
MDS<-as.data.frame(m$points)
#Gain group information
MDS$group<-iris$Species
#Plot
p<-ggplot(MDS,aes(MDS1,MDS2,col=group,shape=group))+
geom_point()+
theme_bw()+
theme(legend.title=element_blank())
从上图我们可以直观地看出,组间差异大于组内差异,三组样本明显可以分开。
那么进一步我们用ANOSIM检验来验证我们从图中得到的结论。
#ANOSIM
anosim_result<-anosim(dat,iris$Species,permutations = 999)
summary(anosim_result)
plot(anosim_result, col = c('#FFD700','#FF7F00','#EE2C2C','#D02090','#9400D3'))
从上图可以直观看到组间差异大于组内差异,R=0.858,接近于1,P值为0.001,小于0.05,说明该不同的分组之间差异明显,该分组是有意义的。
网友评论