聚類分析4—環(huán)境數(shù)據(jù)來解釋 (數(shù)量生態(tài)學:R語言的應(yīng)用-第四章)

聚類分析4—環(huán)境數(shù)據(jù)來解釋 (數(shù)量生態(tài)學:R語言的應(yīng)用-第四章)

在這之前我們學習了聚類分析的基本概念呜魄、幾種計算層次聚類的方法师倔、進一步解讀和比較層次聚類結(jié)果以及非層次聚類构韵,這些聚類方法都是基于物種多度數(shù)據(jù)對樣方進行分組,當然這些聚類方法也可以用于其他類型數(shù)據(jù)趋艘,特別是環(huán)境數(shù)據(jù)疲恢,所以本次就是介紹用環(huán)境數(shù)據(jù)來進行聚類分析

本次的內(nèi)容不多瓷胧,主要分為兩個部分:

  1. 用外部數(shù)據(jù)進行類型比較(方差分析途徑)
  2. 雙類型比較(列聯(lián)表分析)

1.1 加載所需的包和數(shù)據(jù)

#加載包和數(shù)據(jù)
library(ade4)
library(adespatial)
library(vegan)
library(gclus)
library(cluster)
library(pvclust)
library(RColorBrewer)
library(labdsv)
library(rioja)
library(indicspecies)
library(mvpart)
library(MVPARTwrap)
library(dendextend)
library(vegclust)
library(colorspace)
library(agricolae)
library(picante)

#加載函數(shù)
source("drawmap.R")
source("drawmap3.R")
source("hcoplot.R")
source("test.a.R")
source("coldiss.R")
source("bartlett.perm.R")
source("boxplerk.R")
source("boxplert.R")

#從聚類結(jié)果獲得二元差異矩陣的函數(shù)
grpdist <- function(X)
{
  require(cluster)
  gr <- as.data.frame(as.factor(X))
  distgr <- daisy(gr,"gower")
  distgr
}

#導(dǎo)入Doubs數(shù)據(jù)
load("Doubs.RData")
#剔除無物種數(shù)據(jù)的樣方8
spe <- spe[-8,]
env <- env[-8,]
spa <- spa[-8,]
latlong <- latlong[-8,] #經(jīng)緯度

1.2數(shù)據(jù)預(yù)處理

#先計算樣方之間的弦距離矩陣
spe.norm <- decostand(spe,"normalize")
spe.ch <- vegdist(spe.norm,"euc")

# 計算Ward最小方差聚類
spe.ch.ward <- hclust(spe.ch, method="ward.D2")

#Ward聚類同表型相關(guān)
spe.ch.ward.coph <- cophenetic(spe.ch.ward)
cor(spe.ch, spe.ch.ward.coph)

# 設(shè)定聚類組的數(shù)量
k <- 4  
# 根據(jù)上面4個融合水平值圖显拳,可以觀察到分4組水平在所有圖里有小的跳躍
# 裁剪聚類樹

spech.ward.g <- cutree(spe.ch.ward, k=k)
# 計算Ward聚類獲得4組中各個物種的平均多度矩陣
groups <- as.factor(spech.ward.g)
spe.means <- matrix(0, ncol(spe), length(levels(groups)))
row.names(spe.means) <- colnames(spe)
for (i in 1:ncol(spe)) {
  spe.means[i, ] <- tapply(spe.norm[, i], spech.ward.g, mean)
}
# 平均物種多度矩陣作為初始點
startpoints <- t(spe.means)
# 基于初始點的k-均值劃分
spe.kmeans2 <- kmeans(spe.norm, centers = startpoints)

# 最終分組的輪廓寬度值圖
spech.ward.gk <- spe.kmeans2$cluster
dev.new(
  title = "輪廓-優(yōu)化分區(qū)",
  noRStudioGD = TRUE
)
par(mfrow = c(1, 1))
k <- 4
sil <- silhouette(spech.ward.gk, spe.ch)
rownames(sil) <- row.names(spe)
plot(sil,
     main = "輪廓寬度值 - Ward & k均值",
     cex.names = 0.8,
     col = 2:(k + 1))


說明:這里數(shù)據(jù)處理方法,都是在聚類分析這一章學過的搓萧,不明白的同學杂数,可以在回頭去看看

這里用到的數(shù)據(jù)是非層次距離中得到的spech.ward.gk

2 用外部數(shù)據(jù)進行類型比較(方差分析途徑)

我們之前學習的主要是內(nèi)部的準則(例如輪廓法或其他聚類質(zhì)量指數(shù))都是僅僅依賴物種數(shù)據(jù),還不足以選擇最佳樣方聚類結(jié)果矛绘。選擇最終的聚類結(jié)果有時也需要基于生態(tài)學解釋耍休。生態(tài)學解釋可視為樣方聚類的外部驗證刃永。

  1. 利用外部獨立的解釋變量驗證聚類結(jié)果(作為響應(yīng)數(shù)據(jù))可以用線性判別式分析(這個在后面我們會學習到)货矮。
  2. 可以將樣方分組當作因子對解釋變量(當作響應(yīng)變量值)進行方差分析,了解解釋變量在各組間是否有顯著差異斯够。

下面的我們將學習用樣方聚類簇為因子去對解釋變量進行方差分析囚玫。

步驟:

  1. 檢驗?zāi)骋画h(huán)境變量是否符合方差分析假設(shè)(殘差正態(tài)性和方差齊性)
  2. 用傳統(tǒng)的(參數(shù)估計)單因素方差分析或非參數(shù)的Kruskal-Wallis檢驗解釋變量在組間是否有顯著差異

盡管在方差分析中,是將物種組成數(shù)據(jù)獲得的聚類的分組結(jié)果作為解釋變量读规,但是從生態(tài)學角度去分析抓督,實際上是尋找環(huán)境因子對樣方的分組的解釋 。

基于最優(yōu)化的Ward聚類(分4組)的環(huán)境變量(為提高正態(tài)性進行某些簡單的轉(zhuǎn)化)箱線圖

#繪制基于最優(yōu)化的Ward聚類(分四組)的環(huán)境變量線箱線圖
with(env, {
  dev.new(
    title = "定量環(huán)境變量箱線圖",
    noRStudioGD = TRUE
  )
  par(mfrow = c(2, 2))
  boxplot(
    sqrt(ele) ~ spech.ward.gk,
    main = "海拔",
    las = 1,
    ylab = "sqrt(alt)",
    col = (1:k) + 1,
    varwidth = TRUE
  )
  boxplot(
    log(slo) ~ spech.ward.gk,
    main = "坡度",
    las = 1,
    ylab = "log(slo)",
    col = (1:k) + 1,
    varwidth = TRUE
  )
  boxplot(
    oxy ~ spech.ward.gk,
    main = "含氧量",
    las = 1,
    ylab = "oxy",
    col = (1:k) + 1,
    varwidth = TRUE
  )
  boxplot(
    sqrt(amm) ~ spech.ward.gk,
    main = "銨濃度",
    las = 1,
    ylab = "sqrt(amm)",
    col = (1:k) + 1,
    varwidth = TRUE
  )
})
最優(yōu)化的Ward聚類(分四組)的環(huán)境變量線箱線圖
# 方差分析假設(shè)檢驗
with(env, {
  # 殘差的正態(tài)性
  shapiro.test(resid(aov(sqrt(ele) ~ as.factor(spech.ward.gk))))
  shapiro.test(resid(aov(log(slo) ~ as.factor(spech.ward.gk))))
  shapiro.test(resid(aov(oxy ~ as.factor(spech.ward.gk))))
  shapiro.test(resid(aov(sqrt(amm) ~ as.factor(spech.ward.gk))))
  
  #檢驗結(jié)果表明sqrt(alt)束亏、log(pen)铃在、oxy和sqrt(amm)的殘差是正態(tài)分布。嘗試為其他的環(huán)境變量尋找好的標準化
  
  # 方差齊性
  bartlett.test(sqrt(ele), as.factor(spech.ward.gk))
  bartlett.test(log(slo), as.factor(spech.ward.gk))
  bartlett.test(oxy, as.factor(spech.ward.gk))
  bartlett.test(sqrt(amm), as.factor(spech.ward.gk))
  #變量sqrt(alt)的方差不齊碍遍,所以參數(shù)檢驗的方差分析不適用
  
  # 可檢驗變量的方差分析A
  summary(aov(log(slo) ~ as.factor(spech.ward.gk)))
  summary(aov(oxy ~ as.factor(spech.ward.gk)))
  summary(aov(sqrt(amm) ~ as.factor(spech.ward.gk)))
  
  # 海拔Kruskal-Wallis 檢驗
  kruskal.test(ele ~ as.factor(spech.ward.gk))
  
})

注意:

  1. 在一系列分析的開頭使用with()來避免在每次分析中重復(fù)輸入對象env的名稱定铜。這比使用attach()和detach()方便,因為當你的R控制臺中有幾個數(shù)據(jù)集怕敬,有些數(shù)據(jù)集碰巧有名字相同的變量時揣炕,attach()可能會導(dǎo)致混淆。
  2. Shapiro檢驗的零假設(shè)是變量正態(tài)分布东跪;Bartlett檢驗的零假設(shè)是組間方差相等畸陡。因此鹰溜,對于這兩個檢驗,只有當p值大于顯著性水平丁恭,即p>0.05時接受零假設(shè)曹动,才能滿足方差分析的假設(shè)
  3. 參數(shù)Bartlett檢驗對偏離正態(tài)分布很敏感牲览。對于非正態(tài)分布數(shù)據(jù)仁期,可以使用bartlett.perm.R的函數(shù)來計算參數(shù)、置換和自助法(即替換的置換)Bartlett檢驗竭恬。

以下可以使用作者編寫的通用函數(shù)跛蛋,執(zhí)行方差分析的多重比較和顯示帶有字母的環(huán)境變量分組后箱線圖多重比較結(jié)果。不同字母表示組間有顯著差異(按中位線遞減順序組)痊硕。

  • 使用boxplert()函數(shù)來執(zhí)行方差分析和LSD多重比較檢驗
  • 使用boxplerk()函數(shù)執(zhí)行Kruskal-Wallis 檢驗及其相應(yīng)的多重比較(兩者都使用“Holm”的p值校正)
dev.new(
  title = "ANOVA and Kruskal-Wallis 檢驗",
  noRStudioGD = TRUE
)
par(mfrow = c(2, 2))
#使用boxplert()或boxplerk()繪制事后檢測的結(jié)果
#使用boxplert()函數(shù)畫矯正后的多重比較結(jié)果
with(env, {
  boxplerk(
    ele,
    spech.ward.gk,
    xlab = "",
    ylab = "ele",
    main = "海拔",
    bcol = (1:k) + 1,
    p.adj = "holm"
  )
  boxplert(
    log(slo),
    spech.ward.gk,
    xlab = "",
    ylab = "log(slo)",
    main = "坡度",
    bcol = (1:k) + 1,
    p.adj = "holm"
  )
  boxplert(
    oxy,
    spech.ward.gk,
    xlab = "",
    ylab = "oxy",
    main = "含氧量",
    bcol = (1:k) + 1,
    p.adj = "holm"
  )
  boxplert(
    sqrt(amm),
    spech.ward.gk,
    xlab = "",
    ylab = "sqrt(amm)",
    main = "銨濃度",
    bcol = (1:k) + 1,
    p.adj = "holm"
  )
})

image-20210509200652145

基于上面這些分析和圖示赊级,能確定這組魚類群落的生態(tài)習性。

當然岔绸,我們也可以基于環(huán)境變量對樣方進行聚類(類似獲得生境類型的分組)理逊,然后通過指示種分析(以后會講)檢驗不同生境內(nèi)物種分布是否有差異。指示種分析過程中基于不同的生境類型物種需要逐個分析盒揉。因此晋被,需要考慮多個物種指示種分析時會產(chǎn)生多重檢驗的統(tǒng)計學問題。

另外刚盈,作為替代方案羡洛,之后第6章會提出基于排序的多元方法,也可以直接描述和檢驗物種-生境關(guān)系藕漱。請期待欲侮。

3 雙類型比較(列聯(lián)表分析)

要是想直接比較分別基于物種數(shù)據(jù)和環(huán)境數(shù)據(jù)的樣方聚類結(jié)果該怎么辦呢?

  1. 直接生成一個含兩種結(jié)果的列聯(lián)表
  2. 用列聯(lián)表Fishr精準檢驗比較兩種樣方聚類結(jié)果是否有顯著差異
# 基于環(huán)境變量的樣方聚類
env2 <- env[, -1]
env.de <- vegdist(scale(env2), "euc")
env.kmeans <- kmeans(env.de, centers = 4, nstart = 100)
env.kmeans.g <- env.kmeans$cluster

# 比較從物種和環(huán)境數(shù)據(jù)獲得聚類4組的結(jié)果
table(spe.kmeans.g, env.kmeans.g)
#兩種聚類結(jié)果是否相同肋联?
比較從物種和環(huán)境數(shù)據(jù)獲得聚類4組的結(jié)果
# 列聯(lián)表 Fisher精確檢驗
fisher.test(table(spe.kmeans.g, env.kmeans.g))


# 用卡方檢驗分析兩種聚類之間的差異 
chisq.test(table(spe.kmeans.g, env.kmeans.g))

#改用置換的方法進行卡方檢驗分析 
chisq.test(table(spe.kmeans.g, env.kmeans.g), 
                          simulate.p.value = TRUE)
image-20210509204541710

可以上面的列聯(lián)表分析得出威蕉,物種和環(huán)境數(shù)據(jù)獲得聚類4組的結(jié)果具有顯著差異

同時列聯(lián)表分析同樣適用于比較分別基于物種數(shù)據(jù)和分類(定性)解釋變量數(shù)據(jù)的樣方聚類結(jié)果。

用環(huán)境數(shù)據(jù)進行比較的內(nèi)容就是這些橄仍,雖然不是很多韧涨,但是要聯(lián)系之前學習的才能更好的掌握它,所以還是有難度的侮繁,主要是用外部數(shù)據(jù)進行類型比較(方差分析途徑)和雙類型比較(列聯(lián)表分析兩部分內(nèi)容虑粥,好好學習掌握他。

這些案例的源代碼我都已經(jīng)上傳到getee鼎天,可以在我的公眾號回復(fù):數(shù)量生態(tài)學獲得倉庫鏈接

謝謝你的閱讀舀奶,請期待下一期數(shù)量生態(tài)學:R語言的應(yīng)用 第四章 聚類分析5—聚類物種集合

如有不足或錯誤之處,請批評指正斋射。
有什么不明白的也歡迎留言討論育勺。

歡迎關(guān)注微信公眾號:fafu 生信 小蘑菇

往期內(nèi)容:

《數(shù)量生態(tài)學:R語言的應(yīng)用》第三章-R模式

《數(shù)量生態(tài)學:R語言的應(yīng)用》第二版第三章-關(guān)聯(lián)測度與矩陣------Q模式

《數(shù)量生態(tài)學:R語言的應(yīng)用》第二版筆記2

《數(shù)量生態(tài)學——R語言的應(yīng)用》第二版閱讀筆記--緒論和第二章(一部分)

R語言 pheatmap 包繪制熱圖(基礎(chǔ)部分)

R語言pheatmap包繪制熱圖進階教程

使用PicGo和gitee搭建圖床

組間分析—T檢驗但荤、R語言繪圖

Rmarkdown的xaringan包來制作PPT

htlm文件部署到個人網(wǎng)站

感謝你的閱讀!=е痢腹躁!你的點贊關(guān)注轉(zhuǎn)發(fā)是對我最大的鼓勵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末南蓬,一起剝皮案震驚了整個濱河市纺非,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赘方,老刑警劉巖烧颖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窄陡,居然都是意外死亡炕淮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門跳夭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涂圆,“玉大人,你說我怎么就攤上這事币叹∪笄福” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵颈抚,是天一觀的道長踩衩。 經(jīng)常有香客問我,道長邪意,這世上最難降的妖魔是什么九妈? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任反砌,我火速辦了婚禮雾鬼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宴树。我一直安慰自己策菜,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布酒贬。 她就那樣靜靜地躺著又憨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锭吨。 梳的紋絲不亂的頭發(fā)上蠢莺,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音零如,去河邊找鬼躏将。 笑死锄弱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的祸憋。 我是一名探鬼主播会宪,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚯窥!你這毒婦竟也來了掸鹅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤拦赠,失蹤者是張志新(化名)和其女友劉穎巍沙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荷鼠,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡赎瞎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颊咬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片务甥。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喳篇,靈堂內(nèi)的尸體忽然破棺而出敞临,到底是詐尸還是另有隱情,我是刑警寧澤麸澜,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布挺尿,位于F島的核電站,受9級特大地震影響炊邦,放射性物質(zhì)發(fā)生泄漏编矾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一馁害、第九天 我趴在偏房一處隱蔽的房頂上張望窄俏。 院中可真熱鬧,春花似錦碘菜、人聲如沸凹蜈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仰坦。三九已至,卻和暖如春计雌,著一層夾襖步出監(jiān)牢的瞬間悄晃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工凿滤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妈橄,地道東北人鼠渺。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像眷细,于是被迫代替她去往敵國和親拦盹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容