Categories: R

R 相似性分析 ANOSIM 教學與範例

介紹如何再 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")
MDS 圖形

觀察完資料的群聚狀態之後,使用 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)
ANOSIM 分析結果(箱型圖)

我們也可以用 ggvegan 套件來畫這張箱型圖:

# 以 ggvegan 繪製 ANOSIM 分析結果(箱型圖)
library(ggvegan)
autoplot(iris.anosim, notch = FALSE)
ANOSIM 分析結果(箱型圖)

參考資料:Pubsjkzorz簡書

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago