繁体   English   中英

如何从R的hclust / heatmap.2获得集群成员

[英]How to get member of clusters from R's hclust/heatmap.2

我有以下代码执行层次聚类并在热图中绘制它们。

library(gplots)
set.seed(538)
# generate data
y <- matrix(rnorm(50), 10, 5, dimnames=list(paste("g", 1:10, sep=""), paste("t", 1:5, sep="")))
# the actual data is much larger that the above

# perform hiearchical clustering and plot heatmap
test <- heatmap.2(y)

哪个情节如下: 在此输入图像描述

我想要做的是从图中的每个层次结构中获取集群成员:

Clust 1: g3-g2-g4
Clust 2: g2-g4
Clust 3: g4-g7
etc
Cluster last: g1-g2-g3-g4-g5-g6-g7-g8-g9-g10

有办法吗?

毕竟我确实得到了答案! @zkurtz确定了问题...我使用的数据与您使用的数据不同。 我在您的代码中添加了一个set.seed(538)语句来稳定数据。

使用此代码使用以下代码为行的树形图创建集群成员资格矩阵:

cutree(as.hclust(test$rowDendrogram), 1:dim(y)[1])

这会给你:

    1 2 3 4 5 6 7 8 9 10
g1  1 1 1 1 1 1 1 1 1  1
g2  1 2 2 2 2 2 2 2 2  2
g3  1 2 2 3 3 3 3 3 3  3
g4  1 2 2 2 2 2 2 2 2  4
g5  1 1 1 1 1 1 1 4 4  5
g6  1 2 3 4 4 4 4 5 5  6
g7  1 2 2 2 2 5 5 6 6  7
g8  1 2 3 4 5 6 6 7 7  8
g9  1 2 3 4 4 4 7 8 8  9
g10 1 2 3 4 5 6 6 7 9 10

此解决方案需要使用不同的包标记计算群集结构:

# Generate data
y = matrix(rnorm(50), 10, 5, dimnames=list(paste("g", 1:10, sep=""), paste("t", 1:5, sep="")))
# The new packags:
library(nnclust)
# Create the links between all pairs of points with 
#   squared euclidean distance less than threshold
links = nncluster(y, threshold = 2, fill = 1, give.up =1) 
# Assign a cluster number to each point
clusters=clusterMember(links, outlier = FALSE)
# Display the points that are "alone" in their own cluster:
nas = which(is.na(clusters))
print(rownames(y)[nas])
clusters = clusters[-nas]
# For each cluster (with at least two points), display the included points
for(i in 1:max(clusters, na.rm = TRUE)) print(rownames(y)[clusters == i])

显然,你会想要将其修改为某种功能,以便更加用户友好。 特别是,这使得聚类仅在树状图的一个水平上。 要在其他级别获取群集,您必须使用threshold参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM