指定三个聚类组,但树状图聚类为四个

specifying three cluster groups, but dendrogram clusters into four

我遇到了一个无法重现的令人沮丧的问题(我希望我可以)。我用三个生态数据集生成了树状图,使用相同的代码但每个代码都是唯一的 object。树状图中的每片叶子都是一个调查图,物种 presence/abundance 驱动聚类。

我将树状图分成 3 组,并对每组进行颜色编码。当使用欧氏距离进行聚类时,这对所有三个数据集都适用,而当使用 Bray-Curtis 距离时,这对我的两个数据集都适用。然而:第三个数据集在使用 Bray-Curtis 时将两片叶子聚类,并强制颜色代码循环,尽管指定 k = 3.

但仍创建 k = 4 组

我的问题是:当我指定 k = 3 组时,为什么两片叶子(地块)会被强制分成 'cluster,' 并强制树状图有 4 个簇?

我在下面粘贴了代码示例以及“正确”和“错误”树状图的图像。 想知道是否有人有任何故障排除建议,因为我无法提供重现此错误的代码。 TIA.

我试过:

示例代码(相同的格式,每个树状图都使用唯一的 objects)。请从 https://drive.google.com/file/d/12eXIXVuHTu4BLGxcGu18bqhT85ZOHkNW/view?usp=sharing 访问 csv。有关麻烦的数据集,请参阅文件 clusterdata.csv。 Colnames 是物种;行是地块 ID;值覆盖 class 个 bin(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?")

我在下面的 post 中找到了一个解决方案,该解决方案涉及对高度分量进行四舍五入的中间步骤,以解决高度差太小或为负值的问题。

dend <- d %>% 
vegdist(method = "bray") %>% 
hclust(method = "ward.D")
dend$height <- round(dend$height, 6)
dend <- as.dendrogram(dend)

它在平均连接下运行良好,但在 Ward 上一些距离非常小。如果你 运行 this:

你会发现四舍五入后的值更合理
dend <- d %>% 
vegdist(method = "bray") %>% 
hclust(method = "ward.D")

dend$height
diff(round(dend$height,6))

关于 HC 与 Bray 距离相结合的问题的交叉验证也很有趣:HC With Bray Distance