首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树形枝与丛生枝间的差异

树形枝与丛生枝间的差异
EN

Stack Overflow用户
提问于 2017-12-29 19:00:53
回答 1查看 297关注 0票数 3

我有一个数据集,由4种不同基因型的小鼠每日取水情况组成。我正试图编写一个脚本,以便根据这些动物的取水模式,使用层次聚类分析法对它们进行分类,然后创建一个纵向图,绘制出每一群动物的日平均取水量。

为此,我首先创建分层集群,如下所示:

代码语言:javascript
复制
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")

然后,我用树函数来评估哪一种动物属于哪一组,以便绘制每组的平均取水量。

代码语言:javascript
复制
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)))

问题是,我从分层聚类中得到的数字与由cutree函数分配的数字不一致。当集群将分支从1向上向上排序时,cutree函数使用了一些我不熟悉的其他排序参数。正因为如此,集群图中的标签和摄入量图中的标签不匹配。

我在编码方面非常初级,所以我确实使用了太多的冗余行和循环,所以我的代码可以被缩短,但是如果你们能帮我解决这个具体问题,我会很高兴的。

数据集

专题组:

进气图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-30 11:56:52

要在树状图中获得相同的集群,您需要使用:

代码语言:javascript
复制
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)

以下是摄取量图:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48027184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档