http://blog.sciencenet.cn/blog-3406804-1169075.html
http://blog.sciencenet.cn/home.php?mod=space&uid=651374&do=blog&quickforward=1&id=1007083
http://blog.sciencenet.cn/blog-651374-1009079.html
https://www.cnblogs.com/xudongliang/p/8056509.html
置换多元(因素)方差分析(Permutational multivariate analysis of variance,PERMANOVA),又称非参数多因素方差分析(nonparametric multivariate analysis of variance)、或者ADONIS分析,其本质是基于F统计的方差分析,依据距离矩阵对总方差进行分解的非参数多元方差分析方法。使用PERMANOVA可分析不同分组因素对样品差异的解释度,并使用置换检验进行显著性统计。在生态统计中,可以使用PERMANOVA(往往同时配合排序分析来使用,对于PERMANOVA,更常与PCoA排序分析放一起说明问题),查看不同环境的群落组成结构差异是否显著。
根据距离矩阵
文件“bray.txt”为提前计算得到的样本距离矩阵文件(此处展示的是样本间Bray-curtis距离),其内容展示如下。
每一列为一个样本,每一行为一个样本,交叉区域为样本间的Bray-curtis距离(取值范围0-1,越接近于1表明样本间细菌群落组成差异越大)。
R代码
##读入文件 #现有的距离矩阵 dis <- read.delim('bray.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE) dis <- as.dist(dis) #将导入的样本间距离转化为 dist 类型
#样本分组文件 group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE)
library(vegan) ##PERMANOVA 分析(所有分组间比较,即整体差异) #若是已经提供好了距离矩阵,则直接使用现有的距离矩阵进行分析即可 adonis_result_dis <- adonis(dis~site, group, permutations = 999) #根据 group$site 这一列样本分组信息进行 PERMANOVA 分析,随机置换检验 999 次
#查看结果 adonis_result_dis #或者 summary(adonis_result_dis)
#可选输出 otuput <- data.frame(adonis_result_dis$aov.tab, check.names = FALSE, stringsAsFactors = FALSE) otuput <- cbind(rownames(otuput), otuput) names(otuput) <- c('', 'Df', 'Sums of squares', 'Mean squares', 'F.Model', 'Variation (R2)', 'Pr (>F)') write.table(otuput, file = 'PERMANOVA.result_all.txt', row.names = FALSE, sep = '\t', quote = FALSE, na = '')
根据OTU表
备注:当读入数据为距离矩阵时,需要将读取的数据框转化为dist类型,便于后续的函数识别;当读入本示例的OTU表格时,则首先要进行转置操作,即要求所得数据框格式:每一行为一个样本,每一列为物种信息。
R代码
otu <- read.delim('otu_table.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE) otu <- data.frame(t(otu)) #样本分组文件 group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE)
#使用 OTU 丰度表,则需要在计算时指定所依据的距离类型,这里依然使用 Bray-Curtis 距离 adonis_result_otu <- adonis(otu~site, group, permutations = 999, distance = 'bray') #这条命令的详情和上述命令所表示的信息一致 #或者首先根据丰度表计算样本距离,在将所的距离数据作为输入 dis1 <- vegdist(otu, method = 'bray') adonis_result_dis1 <- adonis(dis1~site, group, permutations = 999)
#查看结果 adonis_result_dis #或者 summary(adonis_result_dis)
#可选输出 otuput <- data.frame(adonis_result_dis$aov.tab, check.names = FALSE, stringsAsFactors = FALSE) otuput <- cbind(rownames(otuput), otuput) names(otuput) <- c('', 'Df', 'Sums of squares', 'Mean squares', 'F.Model', 'Variation (R2)', 'Pr (>F)') write.table(otuput, file = 'PERMANOVA.result_all.txt', row.names = FALSE, sep = '\t', quote = FALSE, na = '')