【问题标题】:Zooming in cluster/heatmap in R在 R 中放大集群/热图
【发布时间】:2013-11-12 08:41:50
【问题描述】:

我有一个问题,关于放大我的数据集中找到的集群。我想创建与返回时给定数量的集群一样多的新矩阵。具体来说,我不确定如何返回数据并剔除感兴趣的子群体。我知道我能做到:

mycl <- cutree(hr, 2);

然后呢?

这是我目前所拥有的[完整代码]:

假设您有一个矩阵“m”,您可以通过相关矩阵中的距离按行“hr”和列“hc”进行聚类

m = matrix(0, 10, 5, dimnames = list(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), c(1, 2, 3, 4, 5)))
m[1,] = c(0,0,0,0,1)
m[2,] = c(0,0,0,1,1)
m[3,] = c(0,0,1,1,1)
m[4,] = c(0,0,1,1,0)
m[5,] = c(1,0,0,0,0)
m[6,] = c(1,1,1,0,0)
m[7,] = c(0,1,1,0,0)
m[8,] = c(0,1,1,0,0)
m[9,] = c(0,1,1,1,0)
m[10,] = c(1,1,1,0,1)
# Generates row and column dendrograms.
hr <- hclust(as.dist(1-cor(t(m), method="pearson")), method="ward"); 
hc <- hclust(as.dist(1-cor(m, method="spearman")), method="ward")

现在,我可以对我的数据进行热图:

library(gplots)
mycl <- cutree(hr, 2); 
mycolhc <- rainbow(length(unique(mycl)), start=0.1, end=0.9); 
mycolhc <- mycolhc[as.vector(mycl)]
myheatcol <- redgreen(75)

# Creates heatmap for entire data set
heatmap.2(
           m, 
           Rowv=as.dendrogram(hr), 
           Colv=as.dendrogram(hc), 
           col=myheatcol, 
           scale="row", 
           density.info="none", 
           trace="none", 
           RowSideColors=mycolhc, 
           cexCol=0.6, 
           labRow=NA
           )

【问题讨论】:

  • Error: object 'hr' not found 你能让你的问题重现吗?
  • 变量名称有错误,我已修复,请检查代码是否符合预期(我还更改了颜色,因为您没有包含自定义颜色的定义)
  • 完成!,现在我想知道的是,看看左边有 2 个簇,我想说黄色的一个作为矩阵 m_1,粉红色的一个作为矩阵 m_2。
  • 我的代码现在应该可以工作了。谢谢@nico

标签: r heatmap hierarchical-clustering


【解决方案1】:

想到两件事:

解决方案 1:

# Convert to a dendrogram object
hor.dendro <- as.dendrogram(hr)
# Get values for the first branch
m.1 <- m[unlist(hor.dendro[[1]]),]

解决方案 2:

# Cut the tree in 2
tree.cut <- cutree(hr, 2)
# Get the ids for cluster #1
clust.1 <- which(tree.cut==1)
# Get the values from m
m.1 <- m[clust.1,]

以更通用的方式,您可能希望使用*apply 函数之一。

例如:

clusters <- lapply(unique(tree.cut), function(grp)
       {
       m[which(tree.cut==grp),]
       })

这会返回(使用 2 个组调用 cutree)

[[1]]
  1 2 3 4 5
A 0 0 0 0 1
B 0 0 0 1 1
C 0 0 1 1 1
D 0 0 1 1 0
I 0 1 1 1 0

[[2]]
  1 2 3 4 5
E 1 0 0 0 0
F 1 1 1 0 0
G 0 1 1 0 0
H 0 1 1 0 0
J 1 1 1 0 1

您可以使用[[ ]] 运算符访问结果,例如:clusters[[2]] 以获得第二个集群。

【讨论】:

  • 有哪些统计数据可以进行比较以查看特征 uniqunes.. 我在考虑 chisqr 比较,但不确定是什么以及如何实现。
  • 真的要看具体问题。您要确切比较什么?这些值总是 0/1 还是可以有其他值?我认为某种距离测量会做,但我不是专家。另外,请注意,不能保证您拥有相同大小的集群,所以这可能是一个问题......您可能想在CrossValidated 上提出一个单独的问题,肯定有人在这方面比我更好!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多