[英]hclust() with cutree…how to plot the cutree() cluster in single hclust()
[英]Divergence between cutree and cluster branches
我有一個數據集,其中包含一些屬於 4 種不同基因型的小鼠的每日飲水量。 我正在嘗試編寫一個腳本,以便使用分層聚類分析根據它們的飲水模式對這些動物進行分類,然后創建一個縱向圖,繪制幾天內每個聚類的平均飲水量。
為此,我首先創建分層集群集群,如下所示:
library("dendextend")
library("ggplot2")
library("reshape2")
data=read.csv("data.csv", header=T, row.names=1)
trimmed=data[, -ncol(data)]
hc <- as.dendrogram(hclust(dist(trimmed)))
labels.drk=data[,ncol(data)]
groups.drk=labels.drk[order.dendrogram(hc)]
genotypes=as.character(unique(data[,ncol(data)]))
k=4
cluster_cols=rainbow(k)
hc <- hc %>%
color_branches(k = k, col=cluster_cols) %>%
set("branches_lwd", 1) %>%
set("leaves_pch", rep(c(21, 19), length(genotypes))[groups.drk]) %>%
set("leaves_col", palette()[groups.drk])
plot(hc, main="Total animals" ,horiz=T)
legend("topleft", legend=genotypes,
col=palette(), pch = rep(c(21,19), length(genotypes)),
title="Genotypes")
legend("bottomleft", legend=1:k,
col=cluster_cols, lty = 1, lwd = 2,
title="Drinking group")
然后我使用 cuttree 函數來評估哪些動物屬於哪個組,以便繪制每組的平均水攝入量。
groups<-cutree(hc, k=k, order_clusters_as_data = FALSE))
x<-cbind(data,groups)
intake_avg=aggregate(data[, -ncol(data)], list(x$groups), mean, header=T)
df <- melt(intake_avg, id.vars = "Group.1")
ggplot(df, aes(variable, value, group=factor(Group.1))) + geom_line(aes(color=factor(Group.1)))
問題是我從層次聚類中得到的數字與由 cuttree 函數分配的數字不一致。 當集群從 1 到 4 對分支進行自下而上的排序時,cutree 函數使用了一些我不熟悉的其他排序參數。 因此,聚類圖中和攝入量圖中的標簽不匹配。
我是編碼的初學者,所以可以肯定我使用了太多多余的行和循環,所以我的代碼可以縮短,但是如果你們能幫我解決這個特定的問題,我會很高興。
簇:
攝入量圖
要在樹狀圖中繪制相同的簇,您需要使用:
groups <- dendextend:::cutree(hc, k=k, order_clusters_as_data = FALSE)
idx <- match(rownames(data), names(groups))
x <- cbind(data,groups[idx])
intake_avg <- aggregate(data[, -ncol(data)], list(x$groups), mean, header=T)
df <- melt(intake_avg, id.vars = "Group.1")
ggplot(df, aes(variable, value, group=factor(Group.1))) +
geom_line(aes(color=factor(Group.1)), lwd=1)
這是攝入量圖:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.