這篇筆記是MOOC《多元統(tǒng)計分析及R使用》課程的第7章第三節(jié)。
系統(tǒng)劇類法的基本思想
先將個樣品分成類,每個樣品自成一類,然后每次將具有最小距離的兩類合并,合并后重新計算類與類之間的距離,這個過程一直繼續(xù)到所有的樣品歸為一類為止,并把這個過程做成一張系統(tǒng)聚類圖。
類間距離計算方法
那么如何計算類間距離呢茸时?方法有很多種:
-
最短距離法(single):,通俗來講舅巷,就是把兩個類間離的最近的兩個樣本之間的距離當作兩個類之間的距離,能夠避免極大值的影響贪嫂;
-
最長距離法(complete):耐版,把兩個類間離的最遠的兩個樣本之間的距離當作兩個類之間的距離祠够,可能被極大值扭曲,需刪除這些值粪牲;
-
中間距離法(median):古瓤,顧名思義。就是取最長到最短之間的距離
-
類平均法(average):腺阳,就是所有樣本對間的平均距離
重心法(centroid): 落君,重心距離就是兩個重心之間的距離,重心通常用類中樣本的均值代替亭引。對異常值不敏感绎速,結果更穩(wěn)定。
離差平方和法(Ward):
以上公式可用同一個公式統(tǒng)一焙蚓,需要做的就是把系數(shù)變一變:
系統(tǒng)聚類法過程
(1)計算n個樣品兩兩間的距離纹冤;
(2)構造n個類,每類包含1個樣品购公;
(3)合并距離最近兩類為新類萌京;
(4)計算新類與各類距離,若類個數(shù)為1宏浩,轉(zhuǎn)到第5步知残,否則回到第3步;
(5)繪制系統(tǒng)聚類圖比庄;
(6)確定類的個數(shù)和樣品名稱
系統(tǒng)聚類函數(shù)用法
在R語言中求妹,可使用函數(shù)hclust()
:
hclust(D,method="complete",...)
D 相似矩陣,通常為距離矩陣印蔗;
method 包括“single”扒最,“complete”,“average”华嘹,“mcquitty”吧趣,“median” or “centriod”,“ward”耙厚,默認為"complete"强挫。
畫分類框可使用rect.hclust()
函數(shù),確認分類結果可使用cutree()
函數(shù)薛躬。
舉例說明
研究全國31個省虫溜、市饲化、自治區(qū)2007年城鎮(zhèn)居民生活消費的分布規(guī)律,根據(jù)調(diào)查資料做區(qū)域消費類型劃分梦湘。
>library(openxlsx)
>msa.X<-function(df){
> X=df[,-1];
> rownames(X)=df[,1];
> X
>}
>d7.2 <- read.xlsx("mvstats5.xlsx","d3.1")
>X7.2 <- msa.X(d7.2)
>head(X7.2)
食品 衣著 設備 醫(yī)療 交通 教育 居住 雜項
北京 4934 1512.9 981.1 1294.1 2329 2384.0 1246.2 649.7
天津 4249 1024.2 760.6 1164.0 1310 1639.8 1417.5 463.6
河北 2790 975.9 546.8 833.5 1011 895.1 917.2 266.2
山西 2600 1064.6 477.7 640.2 1028 1054.0 991.8 245.1
內(nèi)蒙古 2825 1396.9 561.7 719.1 1124 1245.1 941.8 468.2
遼寧 3560 1017.6 439.3 879.1 1033 1052.9 1047.0 400.2
>D<- dist(X7.2)
>plot(hclust(D,'ward.D2'))##ward.D2法是ward法的改進版犬绒,效果挺好