介紹如何再 R 中使用 vegan
套件的 anosim
函數進行相似性分析,檢定不同組別之間是否具有顯著差異。
這裡我們使用
iris
鳶尾花資料集來示範使用 anosim
函數進行相似性分析的流程,首先查看一下 iris
鳶尾花資料集的資料形態與內容:
library(vegan) library(ggplot2) library(tidyverse) # 查看 iris 資料結構 str(iris)
'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
在 iris
鳶尾花資料集中,Species
欄位記錄了花的屬種,接下來我們將以相似性分析來檢查不同屬種的花有沒有顯著的差異。
首先將 Species
欄位從資料集中移除,僅留下剩餘的數值資料,然後計算距離矩陣:
# 去除 Species 欄位,只取數值資料 iris.data <- subset(iris, select = -Species) # 計算距離矩陣 iris.dist <- vegdist(iris.data)
接著以多變量分析的降維方法(PCA、PCoA、MDS 等)將資料降至二維空間,觀察資料群聚狀況:
# MDS 分析 iris.mds <- monoMDS(iris.dist) # 合併 MDS 結果與 Species 欄位 mds.df <- as.data.frame(iris.mds$points) mds.df$Species <- iris$Species # 繪製 MDS 圖形 mds.poly <- mds.df %>% group_by(Species) %>% slice(chull(MDS1, MDS2)) ggplot(mds.df, aes(MDS1, MDS2, col = Species, shape = Species)) + geom_point() + aes(fill = Species) + geom_polygon(data = mds.poly, alpha = 0.3, linetype = "blank")
觀察完資料的群聚狀態之後,使用 anosim
以相似性分析來檢查不同屬種的花有沒有顯著的差異:
# ANOSIM 分析 iris.anosim <- anosim(iris.data, iris$Species)
查看相似性分析結果:
# ANOSIM 分析結果 summary(iris.anosim)
Call: anosim(x = iris.data, grouping = iris$Species) Dissimilarity: bray ANOSIM statistic R: 0.8576 Significance: 0.001 Permutation: free Number of permutations: 999 Upper quantiles of permutations (null model): 90% 95% 97.5% 99% 0.0155 0.0240 0.0325 0.0402 Dissimilarity ranks between and within classes: 0% 25% 50% 75% 100% N Between 24 5443.5 7425.0 9300.25 11175.0 7500 setosa 3 939.5 1971.0 3355.00 6085.0 1225 versicolor 9 1044.0 2219.5 3748.00 6066.5 1225 virginica 1 1028.5 2226.0 3661.00 6567.5 1225
這裡的 Significance
達到 0.001
,代表組間差異明顯與組內差異不同,所以這樣的分群是有意義的。
最後將組間差異與組內差異的值以箱型圖畫出來:
# ANOSIM 分析結果(箱型圖) plot(iris.anosim)
我們也可以用 ggvegan
套件來畫這張箱型圖:
# 以 ggvegan 繪製 ANOSIM 分析結果(箱型圖) library(ggvegan) autoplot(iris.anosim, notch = FALSE)