[英]R: How to identify and label cluster groups in a dendrogram (created by hclust)?
[英]specifying three cluster groups, but dendrogram clusters into four
我有一個令人沮喪的問題,我無法重現(我希望我能)。 我用三個生態數據集生成了樹狀圖,每個數據集使用相同的代碼但唯一的對象。 樹狀圖中的每一片葉子都是一個調查圖,物種存在/豐度推動了聚類。
我將樹狀圖分成 3 組,並為每組進行顏色編碼。 當使用歐幾里得距離進行聚類時,這適用於所有三個數據集,而當使用 Bray-Curtis 距離時,這適用於我的兩個數據集。 但是:第三個數據集在使用 Bray-Curtis 時會聚集兩片葉子,並強制顏色代碼循環使用,盡管指定了 k = 3,但仍創建了 k = 4 個組。
我的問題是:當我指定 k = 3 個組時,為什么將兩片葉子(圖)強制放入它們自己的“簇”中,並強制樹狀圖有 4 個簇?
我在下面粘貼了一個代碼示例,以及“正確”和“錯誤”樹狀圖的圖像。 好奇是否有人有任何故障排除建議,因為我無法提供重現此錯誤的代碼。 TIA。
我試過了:
示例代碼(與用於每個樹狀圖的唯一對象的格式相同)。 請從https://drive.google.com/file/d/12eXIXVuHTu4BLGxcGu18bqhT85ZOHkNW/view?usp=sharing訪問 csv。 有關麻煩的數據集,請參見文件 clusterdata.csv。 Colnames是物種; 行是情節 ID; 值是覆蓋類箱(0 = 不存在,1 = < 25%,2 = 25-50% 等)
#library(dendextend)
d <- read.csv("clusterdata.csv")
dend <- d %>%
vegdist(method = "bray") %>%
hclust(method = "ward.D") %>%
# cutree(h = 3) %>%
as.dendrogram()
mycol <- c("#009E73", "#0072B2", "#E69F00")
dend.plot <- as.dendrogram(dend) %>%
set("branches_lwd", 2) %>% # Branches line width
set("branches_k_color", mycol, k = 3) %>% # Color branches by groups
set("labels_cex", 0.5) # Change label size
plot(dend.plot, ylab = "Bray-Curtis Distance", main = "why would clusters be different?")
我在下面的帖子中找到了一個解決方案,該解決方案涉及一個圍繞高度分量的中間步驟,以解決高度差太小或為負的問題。
dend <- d %>%
vegdist(method = "bray") %>%
hclust(method = "ward.D")
dend$height <- round(dend$height, 6)
dend <- as.dendrogram(dend)
它在平均鏈接下工作得很好,但在 Ward 的情況下,一些距離非常小。 如果您運行以下命令,您會注意到四舍五入后的值更加合理:
dend <- d %>%
vegdist(method = "bray") %>%
hclust(method = "ward.D")
dend$height
diff(round(dend$height,6))
'tree' 的 'height' 組件未排序 cutree 中的錯誤
關於將 HC 與 Bray 距離相結合的問題的交叉驗證的有趣討論: HC 與 Bray 距離
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.