N******n 发帖数: 3003 | 1 标 题: 怎么找到一个similarity matrix里面的不同的submatrix with hi
发信站: BBS 未名空间站 (Fri Apr 4 16:31:50 2014, 美东)
A is a symmetric matrix measuring the pair similarity between each node:
the higher value, the more similar the pair is.
我们的matrix里面每个值都是相互之间的相似性,比如50个国家直接的相似性。
如果对他的横坐标和纵坐标做hierarchical clustering, 就把相似的值都聚在一起,
如果用hotmap plot, 就会有很多hot spot.
比如:
matrix A:
【
0 30 25 1 2 3
30 0 22 2 2 1
22 20 0 2 2 2
1 2 1 0 2 2
1 2 2 3 0 9
1 1 1 2 10 0
】
很显然上面的matrix里面有两个submatrix 代表不同的区域:1 2 3高度相似,5 6高度
相似。上面我把对角设成了0.
就是想找个简单的算法把两个submatrix矩阵找出来,也可以设置不同的参数,
submatrix的size 必须大于2,那么上面那个小的submatrix(include 5 6)就去掉了了。
谢谢 | G**Y 发帖数: 33224 | 2 你都hclust了,直接cut那些dendrogram不就完了。
【在 N******n 的大作中提到】 : 标 题: 怎么找到一个similarity matrix里面的不同的submatrix with hi : 发信站: BBS 未名空间站 (Fri Apr 4 16:31:50 2014, 美东) : A is a symmetric matrix measuring the pair similarity between each node: : the higher value, the more similar the pair is. : 我们的matrix里面每个值都是相互之间的相似性,比如50个国家直接的相似性。 : 如果对他的横坐标和纵坐标做hierarchical clustering, 就把相似的值都聚在一起, : 如果用hotmap plot, 就会有很多hot spot. : 比如: : matrix A: : 【
| i**i 发帖数: 1500 | | N******n 发帖数: 3003 | 4 谢谢,不过cutree没有考虑到heat, 可能我觉得例子不全。
比如matrix每个格子代表pair similarity. 做hierarchical clustering rearrange
the index, and use heatmap to visualize the similarity intensity. 显然heat
degree 高的代表想要的,低的不想要,如果cutree,看不到高的和低的的区别 因为相
似度低的也在一个cluster里面。
【在 i**i 的大作中提到】 : 这不是明显在找subtree吗? : 你都分析到这了,找braches只是举手之劳吧. : 随便给搜了一个. : http://stat.ethz.ch/R-manual/R-patched/library/stats/html/cutre
| N******n 发帖数: 3003 | 5 我们只需要hot的部分,你如果cut就可能把所有的cluster都找到了,比如图上绿色的
部分也在一个cluster里面,但是不够hot
【在 G**Y 的大作中提到】 : 你都hclust了,直接cut那些dendrogram不就完了。
| i**i 发帖数: 1500 | 6 There are three kinds of lies: lies, damned lies, and statistics.
看你怎么理解cluster和heatmap. 你把这两个混起来了。
首先cluster(不管是几维),讲的是根据vector之间的距离、差异程度分组。然后你把
他plot出来,标上颜色,就是heatmap。 在这里,你展示了一个角。这个角的形成,可
能是其他没有显示的部分造成的。
然后你说,要把一小块红的挖出来。挖就是了。直接读图,挖。
挖很容易。 举一个例子。
先造一个例子:
> d <- matrix(1:9,3,3)
> d
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
根据行列,挖:
> d[2:3,1:2]
[,1] [,2]
[1,] 2 5
[2,] 3 6
假设cutoff是4,找包含大于4元素的行列
> col <- apply(d,2,function(x){any(x>4)})
> col
[1] FALSE TRUE TRUE
> row <- apply(d,1,function(x){any(x>4)})
> row
[1] TRUE TRUE TRUE
再挖:
> d[row,col]
[,1] [,2]
[1,] 4 7
[2,] 5 8
[3,] 6 9
>
这个结果代表什么意思,哈哈,鬼才知道。 | i**i 发帖数: 1500 | 7 另外,试了一下cutree. 挺好用的。
用hclust里的例子,hc.
分4组,高度限制5000:
> g <- cutree(hc,4,5000)
> g
Alabama Alaska Arizona Arkansas California
1 1 1 2 1
Colorado Connecticut Delaware Florida Georgia
2 3 1 4 2
...
> table(g)
g
1 2 3 4
14 14 20 2
第四组两个元素。
> g[g==4]
Florida North Carolina
4 4
>
这不挺好的吗?
BTW,怀念用R的时代。 |
|