指定三个聚类组,但树状图聚类为四个
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.
我试过:
- 删除自定义颜色值(没有效果,当 k = 3 时仍然得到 4 个簇)。
- 向 'dend' object 添加一个 cutree 参数,但这会产生错误 'Error in stats::cutree(tree, k = k, h = h, ...) :
'tree' 的 'height' 组件未排序(递增)'
示例代码(相同的格式,每个树状图都使用唯一的 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
我遇到了一个无法重现的令人沮丧的问题(我希望我可以)。我用三个生态数据集生成了树状图,使用相同的代码但每个代码都是唯一的 object。树状图中的每片叶子都是一个调查图,物种 presence/abundance 驱动聚类。
我将树状图分成 3 组,并对每组进行颜色编码。当使用欧氏距离进行聚类时,这对所有三个数据集都适用,而当使用 Bray-Curtis 距离时,这对我的两个数据集都适用。然而:第三个数据集在使用 Bray-Curtis 时将两片叶子聚类,并强制颜色代码循环,尽管指定 k = 3.
但仍创建 k = 4 组我的问题是:当我指定 k = 3 组时,为什么两片叶子(地块)会被强制分成 'cluster,' 并强制树状图有 4 个簇?
我在下面粘贴了代码示例以及“正确”和“错误”树状图的图像。 想知道是否有人有任何故障排除建议,因为我无法提供重现此错误的代码。 TIA.
我试过:
- 删除自定义颜色值(没有效果,当 k = 3 时仍然得到 4 个簇)。
- 向 'dend' object 添加一个 cutree 参数,但这会产生错误 'Error in stats::cutree(tree, k = k, h = h, ...) : 'tree' 的 'height' 组件未排序(递增)'
示例代码(相同的格式,每个树状图都使用唯一的 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