[英]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個點,即D
與B,C
簇
再次,我們更新距離矩陣
因此,我應該進行以下合並
但是,這是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"))
注:在變革method
的hclust
調用method = single
。 默認method
是method = 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.