Re: [問題] 群集分析圖判斷各群並分別存檔

作者: JX660 (JX)   2015-11-22 12:47:07
※ 引述《sinclairJ (KEEP MOVING FORWARD)》之銘言:
: [問題類型]:
:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 新手(沒寫過程式,R 是我的第一次)
: [問題敘述]:
: 在群集分析完成後 會得到一個圖 像下面這樣
: https://www.dropbox.com/s/3pylrxdjsdwouw3/hc1.png?dl=0
: 但看物件裡的資訊似乎只能查到order (圖中由左至右的資料順序)
: 再來是如果資料太多 分群圖也會雜在一起 要用order判斷停損的分群位置也不好判斷
: 試過幾個其他分群的套件 似乎也都有這個問題
: 之前這部分都是用人工肉眼判斷= ="但現在因為要加速分析的流程
: 希望在得到分群圖後 就能順便把同群的樣本存成一個檔案輸出
: (我分群數的切法就是切最長的那條線 如下圖 我就會把樣本分成三群)
: https://www.dropbox.com/s/wqjiiwja7b3nv2g/hc2.png?dl=0
: [程式範例]:
: hc=hclust(dist(iris[,-5]))
: plot(hc)
: hc$order #names(hc)
: [1] 108 131 103 126 130 119 106 123 118 132 110 136 141 145 125 121 144 101
: 137 149 116 111 148 113 140 142 146 109 104 117...
: 感謝各位先進前輩提點
下面我用一樣的資料來做
Data<- iris[,-5]
hc<- hclust(dist(Data))
決定集群數量方法有點麻煩
我自己從hclust指令本身提供的資訊
是找不出最長的那條線會落在那個集群數 (不看圖的情況下)
可能要問其他板友
plot( as.dendrogram(hc), leaflab = "none" )
rect.hclust(hc,3)
上述兩行是畫圖決定集群數
第一個指令是畫去掉label的圖
數量一多標碼根本看不出來 直接去掉
第二個指令是標出集群位置 個人覺得蠻方便的
如果不用最長那條線去決定
我自己用過的方法是 Gap Statistic
library(clusterGenomics)
Gaps<- gap( as.matrix(Data) ,Kmax=5)
在clusterGenomics這個package裡面可以找到現成的指令
取Gap的建議值 決定集群數
N<- Gaps$hatK
Data$Cluster<- factor( cutree(hc,N) )
List<- split( Data, Data$Cluster )
在這裡 Gap的建議值是3 與看圖是相同的
接著用cutree這個指令去列出各觀察質屬於哪個集群
並將結果存成其中一個factor變數
再用split指令 處理成一個包含不同集群資料集的list
最後用迴圈存成多個資料集
for ( i in 1 : N ){
write.csv(
List[[i]] ,
file =
paste("Dataset_",names(List)[i],".csv",sep="") )
}
結果如下
dir()
[1] "Dataset_1.csv" "Dataset_2.csv" "Dataset_3.csv"
原po 參考看看
作者: allen1985 (我要低調 拯救形象)   2015-11-22 12:52:00
推又學到新東西 gap!
作者: sinclairJ (KEEP MOVING FORWARD)   2015-12-01 02:50:00
謝謝指導~~獲益良多~

Links booklink

Contact Us: admin [ a t ] ucptt.com