之前的筆記:
聚類介紹:點這里
層次聚類分析案例(一)
案例二:亞馬遜雨林燒毀情況
1999~2010年拐云,33000平方英里(85500平方公里),即2.8%的亞馬遜雨林被燒毀。這一結(jié)果是被NASA領(lǐng)導的研究項目發(fā)現(xiàn)的通惫。該研究的主要目的是衡量森林樹冠下暗火的蔓延程度。該研究發(fā)現(xiàn)火災(zāi)燒毀的森林比用于農(nóng)耕而砍伐的森林面積大很多混蔼。然而履腋,森林燒毀情況和火災(zāi)之間沒有建立起聯(lián)系。
如何建立火災(zāi)和森林燒毀情況之間的聯(lián)系惭嚣,需要基于NASA的Aqua衛(wèi)星上的大氣紅外探測儀(AIRS)設(shè)備的濕度數(shù)據(jù)遵湖。火災(zāi)頻率與夜間的低濕度相吻合晚吞,低濕度使得地表的低強度火災(zāi)能夠持續(xù)燃燒延旧。
準備工作
為了進行層次聚類,我們應(yīng)該使用采集于亞馬遜雨林(1999~2010年)的數(shù)據(jù)集槽地。
第1步:收集和描述數(shù)據(jù)
該任務(wù)使用名為NASAUnderstory的數(shù)據(jù)集迁沫。該數(shù)據(jù)以標準格式存儲在名為NASAUnderstory.csv的CSV格式的文件中。其中包含64行數(shù)據(jù)和32個變量闷盔。數(shù)據(jù)在這里
非數(shù)值型數(shù)據(jù)如下:Overstory Species 弯洗;Labels 。其余為數(shù)值型變量逢勾。
具體實施步驟
以下為實現(xiàn)細節(jié)牡整。
第2步:探索數(shù)據(jù)
讓我們探索數(shù)據(jù)并理解變量間的關(guān)系。我們從導入名為NASAUnderstory.csv的文件開始溺拱,將該數(shù)據(jù)存儲到NASA數(shù)據(jù)框中:
NASA = read.csv("Data/NASAUnderstory.csv",header = T)
下一步逃贝,我們應(yīng)該獲取每一個物種列標簽的長版本:
NASA.lab = NASA$Labels
之后,輸出NASA.lab數(shù)據(jù)框迫摔。這包含了每一個物種的完整名字沐扳。
結(jié)果如下:
接下來把整個數(shù)據(jù)內(nèi)容傳遞給NASA數(shù)據(jù)框:
NASA = NASA[,-32]
輸出NASA數(shù)據(jù)框可以把整體的數(shù)據(jù)內(nèi)容顯示出來。
NASA
結(jié)果如下:
第3步:轉(zhuǎn)換數(shù)據(jù)
接下來進行數(shù)據(jù)歸一化句占。scale()函數(shù)將中心化并拉伸所有先前提到的數(shù)值型變量列:
NASAscale <- scale(NASA[,3:31])
這會拉伸縮NASA數(shù)據(jù)框中第3~31列的所有數(shù)值型變量沪摄。
輸出NASAscale數(shù)據(jù)框可以顯示所有的拉伸和中心化后的數(shù)值。
NASAscale
結(jié)果如下:
為了將一個向量編碼為一個因子纱烘,需要使用factor函數(shù)杨拐。如果自變量排序是TRUE,因子等級將被排序擂啥。這里哄陶,我們將OverstorySpecies列作為一個值傳給factor函數(shù):
rownames(NASAscale) = as.factor(NASA$Overstory.Species)
as.factor()返回列名的數(shù)據(jù)框。
輸出數(shù)據(jù)框rownames(NASAscale)將顯示OverstorySpecies列的所有值:
rownames(NASAscale)
結(jié)果如下:
第4步:訓練和評估模型
下一步是訓練模型哺壶。首先計算距離矩陣屋吨。dist()函數(shù)用來計算并返回距離矩陣蜒谤,使用特定的距離度量來計算數(shù)據(jù)矩陣中各行間的距離。這里使用的距離度量可以是歐式距離至扰、最大距離鳍徽、曼哈頓距離、堪培拉距離渊胸、二進制距離旬盯,或閔可夫斯基距離。這里的距離度量使用歐式距離翎猛。歐式距離計算兩個向量間的距離為sqrt(sum((x_i-y_i)^2))胖翰。結(jié)果存儲在一個新的數(shù)據(jù)框dist1中。
dist1 <- dist(NASAscale, method = "euclidean")
下一步是使用Ward方法進行聚類切厘。hclust()函數(shù)對一組不同的n個對象進行聚類分析萨咳。第一階段,每個對象被指派給它自己的簇疫稿。之后每個階段培他,算法迭代聚合兩個最相似的簇。這個過程不斷持續(xù)直到只剩一個簇遗座。hclust()函數(shù)要求我們以距離矩陣的形式提供數(shù)據(jù)舀凛。dist1數(shù)據(jù)框被傳入。默認使用全鏈接進行聚類途蒋。此外還可以使用不同的聚集方法猛遍,包括ward.D、ward.D2号坡、single懊烤、complete和average。
clust1 <- hclust(dist1,method = "ward.D")
clust1
調(diào)用clust1宽堆,結(jié)果顯示了聚集方法腌紧、計算距離的方法,以及對象的數(shù)量畜隶。結(jié)果如下:
第5步:繪制模型
plot()函數(shù)是繪制R對象的通用函數(shù)壁肋。這里,plot()函數(shù)用來繪制系統(tǒng)樹圖:
plot(clust1,labels=NASA[,2], cex=0.5,
xlab="",ylab="Distance",main="Clustering for NASA Understory Data")
結(jié)果如下:
rect.hclust()函數(shù)會圍繞系統(tǒng)樹圖的某些枝干繪制矩形以強調(diào)對應(yīng)的簇籽慢。系統(tǒng)樹圖首先在某個等級上被剪切浸遗,之后在選定的枝干上繪制長方形。
clust1作為一個對象傳入函數(shù)嗡综,同時傳入的還有需要形成的簇的數(shù)量乙帮。
rect.hclust(clust1,k=2)
結(jié)果如下:
cuts()函數(shù)基于期望的簇數(shù)量或者切割高度切割這棵樹中的節(jié)點到不同的組杜漠。這里极景,clust1被當作一個對象傳入該函數(shù)察净,同時傳入期望的簇數(shù)量。
cuts = cutree(clust1,k=2)
cuts
結(jié)果如下:
第6步:改進模型
首先需要載入以下包:
library(vegan)
vegan包最初被社會學和植被生態(tài)學家廣泛使用盼樟。它包括排序方法氢卡、多樣性分析以及其他功能。其中一些流行的工具包括多樣性分析晨缴、物種豐富度模型译秦、物種豐富度分析、差異分析等击碗。
下一步是通過使用jaccard距離方法訓練模型來改進模型筑悴。第一步是使用vegdist()函數(shù)計算距離矩陣。該函數(shù)計算成對元素的距離稍途,并把結(jié)果存儲在一個新的數(shù)據(jù)框dist1中阁吝。jaccard系數(shù)衡量有限樣本集的相似性,該系數(shù)通過兩集合的交集大小除以兩集合的并集大小計算得來械拍。
dist1 <- vegdist(NASA[,3:31],method="jaccard", upper=T)
下一步是使用Ward方法進行聚類突勇。使用hclust()函數(shù):
clust1 <- hclust(dist1,method = "ward.D")
clust1
調(diào)用clust1顯示了使用的聚集方法、距離度量方法和對象的個數(shù)坷虑。結(jié)果如下:
plot()函數(shù)是繪制R語言對象的通用函數(shù):
plot(clust1,labels=NASA[,2],cex=0.5,
xlab=" ",ylab="Distance",main="Clustering for NASA Understory Data")
clust1數(shù)據(jù)框作為對象傳入該函數(shù)甲馋。cex給出了縮放數(shù)值,通過該值可以把文字和符號相對放大到默認值迄损。
結(jié)果如下:
clust1對象被作為一個對象傳入函數(shù)定躏,同時傳入的還有聚類的數(shù)量:
rect.hclust(clust1,k=2)
結(jié)果如下:
cuts()函數(shù)能夠基于期望的組數(shù)量或者切割的高度將樹切割到不同的組:
cuts = cutree(clust1,k=2)
cuts
結(jié)果如下:
使用判別函數(shù)繪制兩個類的解。
clusplot()函數(shù)能夠繪制二維的聚類圖海蔽。這里共屈,把NASA數(shù)據(jù)框作為對象傳入。
clusplot(pam(NASAscale,2))
結(jié)果如下:
使用判別函數(shù)繪制兩個類的解党窜。
為了區(qū)分給定的類別拗引,plotcluster()函數(shù)使用映射函數(shù)進行繪圖。不同的映射方法包括經(jīng)典判別坐標幌衣、展現(xiàn)平均值和協(xié)方差結(jié)構(gòu)區(qū)別的方法矾削、非對稱方法(從混合類中分離出同質(zhì)類)、本地基于近鄰的方法和基于魯棒協(xié)方差矩陣的方法豁护。
clusplot()函數(shù)可以畫出二維的聚類圖哼凯。這里把NASA的數(shù)據(jù)框作為對象傳入:
clusplot(NASA,cuts,color = TRUE,shade = TRUE, labels = 2,lines = 0,
main = "NASA Two Cluster Plot, Ward's Method, First two PC")
結(jié)果如下:
接下來,對NASAscale數(shù)據(jù)框用t()函數(shù)進行轉(zhuǎn)換:
library(fpc)
NASAtrans=t(NASAscale)
下一步是使用閔可夫斯基距離方法改進模型楚里。第一步是計算距離矩陣断部。這里使用dist()函數(shù)。
閔可夫斯基距離經(jīng)常在變量為比例尺度以及絕對零值的情況下使用班缎。
dist1 <- dist(NASAtrans, method="minkowski",p=3)
下一步是使用Ward方法進行聚類蝴光。使用hclust()方法她渴。
clust1 <- hclust(dist1,method="ward.D")
clust1
調(diào)用clust1函數(shù)顯示了使用的聚集方法、距離度量方法和對象的個數(shù)蔑祟,結(jié)果如下:
plot()函數(shù)是繪制R對象的通用函數(shù)趁耗。這里,plot()函數(shù)被用來繪制系統(tǒng)樹圖:
plot(clust1, labels=NASA.lab[1:29], cex=1,
xlab="",ylab="Distance",main="Clustering for NASA Understory Data")
結(jié)果如下:
rect.hclust()函數(shù)會圍繞系統(tǒng)樹圖的某些枝干繪制矩形以強調(diào)對應(yīng)的簇疆虚。系統(tǒng)樹圖首先在某個等級上被剪切苛败,之后在選定的枝干上繪制長方形。
clust1對象被當作一個對象傳入該函數(shù)径簿,同時被傳入的還有聚類的個數(shù):
rect.hclust(clust1,k=3)
結(jié)果如下:
cuts()函數(shù)能夠基于期望的簇數(shù)量或者切割的高度將樹切分到三個不同的組罢屈。這里傳入clust1對象和聚類的個數(shù)。
cuts = cutree(clust1,k=3)
cuts
結(jié)果如下: