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

看板R_Language作者 (JX)時間10年前 (2015/11/22 12:47), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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 參考看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.218.40 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1448167630.A.82D.html

11/22 12:52, , 1F
推又學到新東西 gap!
11/22 12:52, 1F

12/01 02:50, , 2F
謝謝指導~~獲益良多~
12/01 02:50, 2F
文章代碼(AID): #1MKKZEWj (R_Language)
文章代碼(AID): #1MKKZEWj (R_Language)