數(shù)量生態(tài)學(xué):R語言的應(yīng)用—第四章聚類分析
之前我們了解了關(guān)聯(lián)測(cè)度與矩陣逼泣,主要是Q模式與R模式趴泌。
從今天開始給大家?guī)怼稊?shù)量生態(tài)學(xué):R語言的應(yīng)用》—第四章聚類分析。
1.R模式思維導(dǎo)圖
首先對(duì)昨天的R模式進(jìn)行梳理一下拉庶,做一個(gè)思維導(dǎo)圖
2. 聚類概述
在生態(tài)學(xué)研究當(dāng)中嗜憔,聚類的目的是識(shí)別環(huán)境中不連續(xù)對(duì)象的子集。實(shí)際上砍的,聚類分析是所研究對(duì)象(或R模式下的變量)集合的分組痹筛。聚類分析不是典型的統(tǒng)計(jì)方法,因?yàn)闆]有檢驗(yàn)任何統(tǒng)計(jì)假設(shè)廓鞠,但是聚類后分組的穩(wěn)健性是可以檢驗(yàn)的帚稠。聚類分析有助于探索隱藏在數(shù)據(jù)背后的屬性特征。
注意:大部分聚類方法都是基于關(guān)聯(lián)矩陣進(jìn)行計(jì)算床佳,也就說明選擇恰當(dāng)關(guān)聯(lián)系數(shù)非常重要
2.1 不同類型的聚類方法:
- 層次聚類的結(jié)果一般用聚類樹或類樹狀圖表示滋早。非層次法的結(jié)果只給出所分對(duì)象(或變量)的分類組。
- 分類組可以進(jìn)一步分析或代表最終結(jié)果砌们,或當(dāng)研究對(duì)象具有空間屬性時(shí)杆麸,可以在研究區(qū)地圖上標(biāo)注不同的分類組
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")
#從聚類結(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)緯度
3. 基于連接的層次聚類
3.1 單連接聚合聚類
單連接聚合聚類也被稱為最近鄰體分類,該方法聚合對(duì)象的依據(jù)是最短的成對(duì)距離(或最大的相似性):每個(gè)對(duì)象或聚類簇首次連接的列表稱為主連接鏈浪感,也稱最小拓展樹昔头。
最經(jīng)常的層次聚類分析可以通過states程序包內(nèi)hclust()函數(shù)實(shí)現(xiàn)
#先計(jì)算樣方之間的弦距離矩陣
spe.norm <- decostand(spe,"normalize")
spe.ch <- vegdist(spe.norm,"euc")
#將站點(diǎn)名稱附加到類’dist‘的對(duì)象
attr(spe.ch,"labels") <- rownames(spe)
#進(jìn)行單連接聚合聚類
spe.ch.single <- hclust(spe.ch,method = "single")
#使用默認(rèn)參數(shù)選項(xiàng)繪制聚類樹
plot(spe.ch.single,
labels=row.names(spe),
main="弦距離-單連接",
xlab="單連接聚合聚類",
ylab="高度")
基于單連接聚類的結(jié)果,我們?nèi)绾蚊枋鲞@個(gè)數(shù)據(jù)集影兽?是簡(jiǎn)單的單一梯度還是區(qū)分明顯的樣方組揭斧?能否辨認(rèn)樣方的連接鏈?樣方1峻堰、5和9為什么最后連接讹开?
3.2 完全連接聚合聚類
與單連接聚合聚類相反盅视,完全連接聚合聚類(也稱作"最遠(yuǎn)鄰體分類")允許一個(gè)對(duì)象(或一個(gè)組)與另一個(gè)組聚合的依據(jù)是最遠(yuǎn)距離對(duì)。所以兩個(gè)組所以成員之間的距離都必須全部計(jì)算旦万,然后再比較闹击。
#計(jì)算完全連接聚合聚類
spe.ch.complete <- hclust(spe.ch,method = "complete")
plot(spe.ch.complete,
labels=row.names(spe),
main="弦距離-完全連接",
xlab="完全連接聚合聚類",
ylab="高度")
當(dāng)前所給的樣方是沿著河流分布(樣方的編號(hào)按照流向編排),這個(gè)聚類分析結(jié)果是否將位置相近的樣方排在同一個(gè)組呢成艘??jī)煞N完全有效的聚類分析方法分析同一數(shù)據(jù)赏半,為什么產(chǎn)生如此不同的聚類結(jié)果呢?
從上面兩種聚類樹狰腌,我們可以清楚的看到兩種方法聚類原理及結(jié)果的差異:
單連接聚類產(chǎn)生的分類組雖然不清晰除破,但容易識(shí)別數(shù)據(jù)的梯度。相反琼腔,完全連接聚類產(chǎn)生的分組間的差異比較明顯瑰枫,更適合去尋找和識(shí)別數(shù)據(jù)的間斷分布。
4. 平均聚合聚類
平均聚合聚類是一類基于對(duì)象間平均相異或聚類簇形心的聚類方法丹莲。有四種方法光坝,不同的方法區(qū)別在于組的位置計(jì)算方式(算數(shù)平均或形心)和當(dāng)計(jì)算融合距離時(shí)是否用每組包含的對(duì)象數(shù)量作為權(quán)重。
下圖是4種平均聚合聚類方法甥材。引號(hào)內(nèi)名稱來自hclust()函數(shù)內(nèi)與方法對(duì)應(yīng)的參數(shù):
最有名的當(dāng)屬UPGMA方法盯另,一個(gè)對(duì)象加入一個(gè)組的依據(jù)是這個(gè)對(duì)象與該組每個(gè)成員之間的平均距離。
#計(jì)算平均(UPGMA)聚合聚類
spe.ch.UPGMA <- hclust(spe.ch,method = "average")
plot(spe.ch.UPGMA,
labels=row.names(spe),
main="弦距離-UPGMA",
xlab="UPGMA聚合聚類",
ylab="高度")
#計(jì)算形心聚類
spe.ch.centroid <- hclust(spe.ch,method = "centroid")
plot(spe.ch.centroid,
labels=row.names(spe),
main="弦距離-形心",
xlab="形心聚類",
ylab="高度")
注意:UPGMC和WPGMC有時(shí)會(huì)導(dǎo)致聚類樹翻轉(zhuǎn)的現(xiàn)象洲赵,使得聚類樹不再形成連續(xù)的嵌套分區(qū)鸳惯,分類結(jié)果難以區(qū)分。
5. Ward 最小方差聚類
這是一種基于最小二乘法線性模型準(zhǔn)則的聚類方法叠萍,分組依據(jù)是使組內(nèi)平方和(即方差分析的方差)最小化芝发。聚類簇內(nèi)方差和等于聚類簇內(nèi)成員間距離的平方和除以對(duì)象的數(shù)量。
# 計(jì)算Ward最小方差聚類
spe.ch.ward <- hclust(spe.ch, method="ward.D2")
#注意:在R 3.0.3 版本后苛谷,ward聚類方法的名稱改為“ward.D2”辅鲸,但直接寫ward也可以
plot(spe.ch.ward,
labels=row.names(spe),
main="聚類樹",
ylab="高度",
xlab="Ward聚類")
#使用距離平方造成此聚類樹上半部分過于膨脹。為了使聚類樹比例看起來
#更協(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="聚類樹",
ylab="高度",
xlab="Ward聚類")
6 靈活聚類
cluster程序包內(nèi)的agnes()函數(shù)通過參數(shù)method和par.method的設(shè)置也可以實(shí)現(xiàn)靈活聚類独悴。在agnes()函數(shù)中,靈活的聚類由參數(shù)method="flexible"和參數(shù)par.method設(shè)置為向量值1锣尉、3或4來實(shí)現(xiàn)刻炒。其中最簡(jiǎn)單的應(yīng)用是將參數(shù)設(shè)為β,因此得名“beta-靈活聚類”自沧。
為了獲得β=-0.25落蝙,給出的值是par.method=0.625,因?yàn)棣?(1-β)/2=(1-(-0.25))/2=0.625。見agnes()的幫助文檔文件以獲取更多詳細(xì)信息筏勒。
par(mfrow = c(2, 2))
# 使用cluster程序包內(nèi)的agnes()計(jì)算beta靈活聚類
# 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-靈活聚類 (beta=-0.1)")
plot(spe.ch.beta2,
labels = rownames(spe),
main = "弦距離-Beta-靈活聚類 (beta=-0.25)")
plot(spe.ch.beta3,
labels = rownames(spe),
main = "弦距離-Beta-靈活聚類 (beta=-0.5)")
今天先簡(jiǎn)單介紹一下聚類分析以及聚類的方法,下一節(jié)將解讀和比較層次聚類結(jié)果旺嬉。
如有不足或錯(cuò)誤之處管行,請(qǐng)批評(píng)指正。
有什么不明白的也歡迎留言討論邪媳。
歡迎關(guān)注微信公眾號(hào):fafu 生信 小蘑菇
往期內(nèi)容:
《數(shù)量生態(tài)學(xué):R語言的應(yīng)用》第三章-R模式
《數(shù)量生態(tài)學(xué):R語言的應(yīng)用》第二版第三章-關(guān)聯(lián)測(cè)度與矩陣------Q模式
《數(shù)量生態(tài)學(xué):R語言的應(yīng)用》第二版筆記2
《數(shù)量生態(tài)學(xué)——R語言的應(yīng)用》第二版閱讀筆記--緒論和第二章(一部分)
感謝你的閱讀!S晷А迅涮!你的點(diǎn)贊關(guān)注轉(zhuǎn)發(fā)是對(duì)我最大的鼓勵(lì)。