數(shù)量生態(tài)學(xué):R語(yǔ)言的應(yīng)用—第四章聚類(lèi)分析
之前我們了解了關(guān)聯(lián)測(cè)度與矩陣,主要是Q模式與R模式获列。
從今天開(kāi)始給大家?guī)?lái)《數(shù)量生態(tài)學(xué):R語(yǔ)言的應(yīng)用》—第四章聚類(lèi)分析粱胜。
1.R模式思維導(dǎo)圖
首先對(duì)昨天的R模式進(jìn)行梳理一下烛占,做一個(gè)思維導(dǎo)圖
2. 聚類(lèi)概述
在生態(tài)學(xué)研究當(dāng)中徒蟆,聚類(lèi)的目的是識(shí)別環(huán)境中不連續(xù)對(duì)象的子集胁出。實(shí)際上,聚類(lèi)分析是所研究對(duì)象(或R模式下的變量)集合的分組段审。聚類(lèi)分析不是典型的統(tǒng)計(jì)方法全蝶,因?yàn)闆](méi)有檢驗(yàn)任何統(tǒng)計(jì)假設(shè),但是聚類(lèi)后分組的穩(wěn)健性是可以檢驗(yàn)的戚哎。聚類(lèi)分析有助于探索隱藏在數(shù)據(jù)背后的屬性特征裸诽。
注意:大部分聚類(lèi)方法都是基于關(guān)聯(lián)矩陣進(jìn)行計(jì)算嫂用,也就說(shuō)明選擇恰當(dāng)關(guān)聯(lián)系數(shù)非常重要
2.1 不同類(lèi)型的聚類(lèi)方法:
- 層次聚類(lèi)的結(jié)果一般用聚類(lèi)樹(shù)或類(lèi)樹(shù)狀圖表示型凳。非層次法的結(jié)果只給出所分對(duì)象(或變量)的分類(lèi)組。
- 分類(lèi)組可以進(jìn)一步分析或代表最終結(jié)果嘱函,或當(dāng)研究對(duì)象具有空間屬性時(shí)甘畅,可以在研究區(qū)地圖上標(biāo)注不同的分類(lèi)組
2.2 加載所需的包和數(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")
#從聚類(lèi)結(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")
#剔除無(wú)物種數(shù)據(jù)的樣方8
spe <- spe[-8,]
env <- env[-8,]
spa <- spa[-8,]
latlong <- latlong[-8,] #經(jīng)緯度
3. 基于連接的層次聚類(lèi)
3.1 單連接聚合聚類(lèi)
單連接聚合聚類(lèi)也被稱(chēng)為最近鄰體分類(lèi),該方法聚合對(duì)象的依據(jù)是最短的成對(duì)距離(或最大的相似性):每個(gè)對(duì)象或聚類(lèi)簇首次連接的列表稱(chēng)為主連接鏈往弓,也稱(chēng)最小拓展樹(shù)疏唾。
最經(jīng)常的層次聚類(lèi)分析可以通過(guò)states程序包內(nèi)hclust()函數(shù)實(shí)現(xiàn)
#先計(jì)算樣方之間的弦距離矩陣
spe.norm <- decostand(spe,"normalize")
spe.ch <- vegdist(spe.norm,"euc")
#將站點(diǎn)名稱(chēng)附加到類(lèi)’dist‘的對(duì)象
attr(spe.ch,"labels") <- rownames(spe)
#進(jìn)行單連接聚合聚類(lèi)
spe.ch.single <- hclust(spe.ch,method = "single")
#使用默認(rèn)參數(shù)選項(xiàng)繪制聚類(lèi)樹(shù)
plot(spe.ch.single,
labels=row.names(spe),
main="弦距離-單連接",
xlab="單連接聚合聚類(lèi)",
ylab="高度")
基于單連接聚類(lèi)的結(jié)果,我們?nèi)绾蚊枋鲞@個(gè)數(shù)據(jù)集函似?是簡(jiǎn)單的單一梯度還是區(qū)分明顯的樣方組槐脏?能否辨認(rèn)樣方的連接鏈?樣方1撇寞、5和9為什么最后連接顿天?
3.2 完全連接聚合聚類(lèi)
與單連接聚合聚類(lèi)相反,完全連接聚合聚類(lèi)(也稱(chēng)作"最遠(yuǎn)鄰體分類(lèi)")允許一個(gè)對(duì)象(或一個(gè)組)與另一個(gè)組聚合的依據(jù)是最遠(yuǎn)距離對(duì)蔑担。所以?xún)蓚€(gè)組所以成員之間的距離都必須全部計(jì)算牌废,然后再比較。
#計(jì)算完全連接聚合聚類(lèi)
spe.ch.complete <- hclust(spe.ch,method = "complete")
plot(spe.ch.complete,
labels=row.names(spe),
main="弦距離-完全連接",
xlab="完全連接聚合聚類(lèi)",
ylab="高度")
當(dāng)前所給的樣方是沿著河流分布(樣方的編號(hào)按照流向編排)啤握,這個(gè)聚類(lèi)分析結(jié)果是否將位置相近的樣方排在同一個(gè)組呢鸟缕??jī)煞N完全有效的聚類(lèi)分析方法分析同一數(shù)據(jù),為什么產(chǎn)生如此不同的聚類(lèi)結(jié)果呢排抬?
從上面兩種聚類(lèi)樹(shù)懂从,我們可以清楚的看到兩種方法聚類(lèi)原理及結(jié)果的差異:
單連接聚類(lèi)產(chǎn)生的分類(lèi)組雖然不清晰,但容易識(shí)別數(shù)據(jù)的梯度蹲蒲。相反番甩,完全連接聚類(lèi)產(chǎn)生的分組間的差異比較明顯,更適合去尋找和識(shí)別數(shù)據(jù)的間斷分布悠鞍。
4. 平均聚合聚類(lèi)
平均聚合聚類(lèi)是一類(lèi)基于對(duì)象間平均相異或聚類(lèi)簇形心的聚類(lèi)方法对室。有四種方法模燥,不同的方法區(qū)別在于組的位置計(jì)算方式(算數(shù)平均或形心)和當(dāng)計(jì)算融合距離時(shí)是否用每組包含的對(duì)象數(shù)量作為權(quán)重。
下圖是4種平均聚合聚類(lèi)方法掩宜。引號(hào)內(nèi)名稱(chēng)來(lái)自hclust()函數(shù)內(nèi)與方法對(duì)應(yīng)的參數(shù):
最有名的當(dāng)屬UPGMA方法蔫骂,一個(gè)對(duì)象加入一個(gè)組的依據(jù)是這個(gè)對(duì)象與該組每個(gè)成員之間的平均距離。
#計(jì)算平均(UPGMA)聚合聚類(lèi)
spe.ch.UPGMA <- hclust(spe.ch,method = "average")
plot(spe.ch.UPGMA,
labels=row.names(spe),
main="弦距離-UPGMA",
xlab="UPGMA聚合聚類(lèi)",
ylab="高度")
#計(jì)算形心聚類(lèi)
spe.ch.centroid <- hclust(spe.ch,method = "centroid")
plot(spe.ch.centroid,
labels=row.names(spe),
main="弦距離-形心",
xlab="形心聚類(lèi)",
ylab="高度")
注意:UPGMC和WPGMC有時(shí)會(huì)導(dǎo)致聚類(lèi)樹(shù)翻轉(zhuǎn)的現(xiàn)象牺汤,使得聚類(lèi)樹(shù)不再形成連續(xù)的嵌套分區(qū)辽旋,分類(lèi)結(jié)果難以區(qū)分。
5. Ward 最小方差聚類(lèi)
這是一種基于最小二乘法線性模型準(zhǔn)則的聚類(lèi)方法檐迟,分組依據(jù)是使組內(nèi)平方和(即方差分析的方差)最小化补胚。聚類(lèi)簇內(nèi)方差和等于聚類(lèi)簇內(nèi)成員間距離的平方和除以對(duì)象的數(shù)量。
# 計(jì)算Ward最小方差聚類(lèi)
spe.ch.ward <- hclust(spe.ch, method="ward.D2")
#注意:在R 3.0.3 版本后追迟,ward聚類(lèi)方法的名稱(chēng)改為“ward.D2”溶其,但直接寫(xiě)ward也可以
plot(spe.ch.ward,
labels=row.names(spe),
main="聚類(lèi)樹(shù)",
ylab="高度",
xlab="Ward聚類(lèi)")
#使用距離平方造成此聚類(lèi)樹(shù)上半部分過(guò)于膨脹。為了使聚類(lèi)樹(shù)比例看起來(lái)
#更協(xié)調(diào)而不影響結(jié)構(gòu)敦间,可以使用當(dāng)前融合水平的平方根重新繪圖
spe.ch.ward$height <- sqrt(spe.ch.ward$height)
plot(spe.ch.ward,
labels=row.names(spe),
main="聚類(lèi)樹(shù)",
ylab="高度",
xlab="Ward聚類(lèi)")
6 靈活聚類(lèi)
cluster程序包內(nèi)的agnes()函數(shù)通過(guò)參數(shù)method和par.method的設(shè)置也可以實(shí)現(xiàn)靈活聚類(lèi)瓶逃。在agnes()函數(shù)中,靈活的聚類(lèi)由參數(shù)method="flexible"和參數(shù)par.method設(shè)置為向量值1廓块、3或4來(lái)實(shí)現(xiàn)厢绝。其中最簡(jiǎn)單的應(yīng)用是將參數(shù)設(shè)為β,因此得名“beta-靈活聚類(lèi)”带猴。
為了獲得β=-0.25昔汉,給出的值是par.method=0.625,因?yàn)棣?(1-β)/2=(1-(-0.25))/2=0.625拴清。見(jiàn)agnes()的幫助文檔文件以獲取更多詳細(xì)信息靶病。
par(mfrow = c(2, 2))
# 使用cluster程序包內(nèi)的agnes()計(jì)算beta靈活聚類(lèi)
# beta = -0.1
spe.ch.beta1 <- agnes(spe.ch, method = "flexible",
par.method = 0.55)
# beta = -0.25
spe.ch.beta2 <- agnes(spe.ch, method = "flexible",
par.method = 0.625)
# beta = -0.5
spe.ch.beta3 <- agnes(spe.ch, method = "flexible",
par.method = 0.75)
# 改變agens獲得對(duì)象屬性
class(spe.ch.beta1)
spe.ch.beta1 <- as.hclust(spe.ch.beta1)
class(spe.ch.beta1)
spe.ch.beta2 <- as.hclust(spe.ch.beta2)
spe.ch.beta3 <- as.hclust(spe.ch.beta3)
plot(spe.ch.beta1,
labels = rownames(spe),
main = "弦距離-Beta-靈活聚類(lèi) (beta=-0.1)")
plot(spe.ch.beta2,
labels = rownames(spe),
main = "弦距離-Beta-靈活聚類(lèi) (beta=-0.25)")
plot(spe.ch.beta3,
labels = rownames(spe),
main = "弦距離-Beta-靈活聚類(lèi) (beta=-0.5)")
今天先簡(jiǎn)單介紹一下聚類(lèi)分析以及聚類(lèi)的方法,下一節(jié)將解讀和比較層次聚類(lèi)結(jié)果贷掖。
如有不足或錯(cuò)誤之處嫡秕,請(qǐng)批評(píng)指正。
有什么不明白的也歡迎留言討論苹威。
歡迎關(guān)注微信公眾號(hào):fafu 生信 小蘑菇
往期內(nèi)容:
《數(shù)量生態(tài)學(xué):R語(yǔ)言的應(yīng)用》第三章-R模式
《數(shù)量生態(tài)學(xué):R語(yǔ)言的應(yīng)用》第二版第三章-關(guān)聯(lián)測(cè)度與矩陣------Q模式
《數(shù)量生態(tài)學(xué):R語(yǔ)言的應(yīng)用》第二版筆記2
《數(shù)量生態(tài)學(xué)——R語(yǔ)言的應(yīng)用》第二版閱讀筆記--緒論和第二章(一部分)
R語(yǔ)言 pheatmap 包繪制熱圖(基礎(chǔ)部分)
Rmarkdown的xaringan包來(lái)制作PPT
感謝你的閱讀!Q栏Α掷酗!你的點(diǎn)贊關(guān)注轉(zhuǎn)發(fā)是對(duì)我最大的鼓勵(lì)。