Load data

#Thiết lập thư mục làm việc
setwd("D:/R/for_thien/")
#Load data
fish <- read.csv("fish.csv", row.names = 1)
fish2 <- read.csv("fish2.csv", row.names = 1)

Kiểm tra

head(fish,9)
##          S1 S2 S3 S4
## Ann_nor   0  2  7  0
## Sch_sp.   4 29  8  0
## Sch_sp1   0  0  0 42
## Sch_sp2   4  7 13  0
## Cha_gac  18  2  0  0
## Ung_sp.   0  0  0  5
## Neo_str   1  4 21  0
## Ony_kro   2  4  4  0
## Por_lao  12 39 43  0
head(fish2,4)
##    Ann_nor Sch_sp. Sch_sp1 Sch_sp2 Cha_gac Ung_sp. Neo_str Ony_kro Por_lao
## S1       0       4       0       4      18       0       1       2      12
## S2       2      29       0       7       2       0       4       4      39
## S3       7       8       0      13       0       0      21       4      43
## S4       0       0      42       0       0       5       0       0       0
##    TDS    FTU Temp  pH Conductivity  DO
## S1   4  21.68 18.6 7.4         0.00 8.0
## S2  38  15.07 22.0 9.0         0.04 8.0
## S3  10 136.00 20.9 7.7         0.01 8.3
## S4   4   8.33 18.0 8.5         0.00 7.9

Canonical correspondence analysi (CCA)

#lấy các cột loài
species <- fish2[,c(1:9)]
# Lấy các cột thông số môi trường
env_var <- fish2[,c(10:15)]
#Sử dụng hàm cca trong thư viện 'vegan'
library(vegan)
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.4-2
fish_CCA <-vegan::cca(species, env_var)
#vẽ đồ thị
plot(fish_CCA)

Ta có thể trang trí cho đồ thị dễ nhìn hơn như sau (Với các loài nằm chồng lên nhau thì cần chỉnh thủ công với illustrator):

plot(fish_CCA, type ="n")
points(fish_CCA, display = "sites", pch = 5, cex = 1, col="red")
points(fish_CCA, display = "species", pch = 19, cex = 1, col="blue")
text(fish_CCA, display = "sites", pos=2, col="red")
text(fish_CCA, display = "species", pos=4)
text(fish_CCA, display = "bp", col="orange", cex=1) 

Tuy nhiên ở đây ta thấy chỉ có 3 biến môi trường được vẽ đó là Temp, TDS, và FTU. Lý do là có sự tương quan cao giữa 3 biến này với 3 biến còn lại, nên thuật toán tự động xóa 3 biến kia.

Xác định lại nhận định:

library(corrplot)
corrplot(cor(env_var), method="number", type = "upper")

Ta thấy có sự tương quan cao giữa các cặp biến TDS vs TEMPS; TDS vs Conductivity; FTU vs DO; vv…

Do đó nên sử dụng phương pháp phân tích khác đối với dữ liệu này. Xem phần tiếp theo:

Kết hợp Correspondence Analysis và Principal Component Analysis

Bước 1: CA - Correspondence Analysis

library("ade4")
## 
## Attaching package: 'ade4'
## The following object is masked from 'package:vegan':
## 
##     cca
library("factoextra")
## Loading required package: ggplot2
res.ca <- dudi.coa(fish, scannf = FALSE, nf = 5)
fviz_ca_biplot(res.ca, title="",  arrows = c(F, T), xlim=c(-2.5,1)) +
    theme_minimal()

Ở đây ta có thể thấy được sự khác biệt về thành phần loài ở 4 sites

Bước 2: PCA - Principal Component Analysis

res.pca <- dudi.pca(env_var, scannf = FALSE, nf = 5)
fviz_pca_biplot(res.pca, geom =c("point","text"), col.var="blue", title="") +
    theme_minimal()

Với kết quả này ta có thể thấy được sự khác nhau về đặc điểm môi trường ở 4 sites nghiên cứu

Kết luận

Đối với dữ liệu thực tế này ta chọn hướng phân tích theo cách 2 sẽ dễ truyền đạt hơn