簡體   English   中英

如何繪制層次聚類?

[英]How to draw hierarchical clustering?

我有以下數據集:

data<-data.frame(X=c(1,2,3,4),Y=c(1,3,2,1))
for(i in 1:nrow(data)){ data[i,i]<-NA}
colnames(data) <- c("A","B","C","D")
rownames(data) <- c("A","B","C","D")
plot(hclust(dist(data)))

然后結果是下圖:

在此處輸入圖片說明

但是, 我想知道如何繪制此圖。 在這里,我正在嘗試逐步獲取樹狀圖。 我們知道,開始時的距離矩陣如下:

在此處輸入圖片說明

每次我們找到距離最小的兩個點,然后將它們合並為一個群集

在此處輸入圖片說明

因此,第一個合並是B和C。我們更新距離矩陣

在此處輸入圖片說明

再次,我們找到距離最小的2個點,即DB,C

在此處輸入圖片說明

再次,我們更新距離矩陣

在此處輸入圖片說明

因此,我應該進行以下合並

  1. B和C
  2. B,C和D
  3. B,C,D和A

但是,這是R圖產生的悖論。 那么,您如何證明這一點呢?

更新的響應-使用single鏈接而不是默認的complete鏈接。

我將盡力解釋我如何看待這一工作。 我相信這和hclust.使用的method參數一樣簡單hclust. 默認方法hclust不遵循算法,奠定了你,但我們可以通過調整method它確實是這樣。

但是首先,我在您嘗試繪制的情節上遇到錯誤:

> data<-data.frame(X=c(1,2,3,4),Y=c(1,3,2,1))
> for(i in 1:nrow(data)){ data[i,i]<-NA}
> colnames(data) <- c("A","B","C","D")
> rownames(data) <- c("A","B","C","D")
> plot(hclust(dist(data)))
Error in hclust(dist(data)) : 
  NA/NaN/Inf in foreign function call (arg 11)

您對for(i in 1:nrow(data)){ data[i,i]<-NA}行中的意圖是什么? 在這一行之后,您的data對象如下所示:

   X  Y V3 V4
1 NA  1 NA NA
2  2 NA NA NA
3  3  2 NA NA
4  4  1 NA NA

但是,如果我們可以從以下代碼開始,則可以生成所需的樹,如下所示:

dt<-data.frame(X = c(1, 2, 3, 4), Y = c(1, 3, 2, 1))
rownames(dt) <- c("A", "B", "C", "D")
dt<-dist(dt)
plot(hclust(dt, method = "single"))

在此處輸入圖片說明

注:在變革methodhclust調用method = single 默認methodmethod = complete complete鏈接方法不是根據最短的距離而是根據最長的群集間距離將群集連接到節點。 R中出色的《應用統計學習簡介》中摘錄一些材料,其中介紹了可用的各種鏈接方法:

在此處輸入圖片說明

James,Witten,Hastie和Tibshirani撰寫的本文可從上面的鏈接免費下載。 有關分層群集的部分從第390頁開始。請讓我知道這是否有助於清除問題。

原始回應

我認為您以錯誤的方式調用了dist函數,也許調用了太多次。 嘗試這個:

dt<-data.frame(X=c(1,2,3,4),Y=c(1,3,2,1))
rownames(dt) <- c("A","B","C","D")
dt<-dist(dt)
plot(hclust((dt)))

在此處輸入圖片說明

實際上,您是在已經是dist類的對象上調用dist ,然后將其轉換為矩陣,然后在對plot的調用內再次調用dist

我們可以僅檢查距離對象,如下所示:

> dt
         A        B        C
B 2.236068                  
C 2.236068 1.414214         
D 3.000000 2.828427 1.414214

在將該對象傳遞給hclust函數之前,無需再次在該對象上調用dist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM