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 = '')