我已经看到了一些关于时间序列聚类的查询,特别是关于聚类的查询,但我认为它们没有回答我的问题。
背景:我想在酵母的时间过程实验中对基因进行聚类。有四个时间点说:t1 t2 t3 和 t4和基因总数G。我有一个矩阵M中的数据,其中的列代表治疗(或时间点) t1 t2 t3 和 t4 ,行代表基因。因此,M是一个 Gx4 矩阵。
问题:我想对在所有时间点t1 t2 t3 和 t4 以及在特定时间点ti内表现相同的基因进行聚类,其中 i 在 {1, 2, 3, 4} 中(如果我们不能两个聚类在一起,一个时间点内的聚类比跨时间点的聚类更重要)。除此之外,我还想画一张热图。
我的解决方案:
我使用下面的 R 代码获取热图以及使用hclustR 中的函数的集群(使用欧几里得距离执行层次聚类)
row.scaled.expr <- (expr.diff - rowMeans(expr.diff)) / rowSds(expr.diff)
breaks.expr <- c(quantile(row.scaled.expr[row.scaled.expr < 0],
seq(0,1,length=10)[-9]), 0,
quantile(row.scaled.expr[row.scaled.expr > 0],
seq(0,1,length=10))[-1] )
blue.red.expr <- maPalette(low = "blue", high = "red", mid = "white",
k=length(breaks.expr) - 1)
pdf("images/clust.pdf",
height=30,width=20,pointsize=20)
ht1 <- heatmap.2(row.scaled.expr, col = blue.red.expr, Colv = FALSE, key = FALSE,
dendrogram = "row", scale = "none", trace = "none",
cex=1.5, cexRow=1, cexCol=2,
density.info = "none", breaks = breaks.expr,
labCol = colnames(row.scaled.expr),
labRow="",
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
main=expression("Heat Map"),
ylab="Genes in the Microarray",
xlab="Treatments"
)
dev.off()
我最近hopach在Bioconductor中发现了可以用来估计集群数量的包。以前,我随机分配热图的 bin 数量并在适当的高度切割树以获得预先指定的集群数量。
我的解决方案中可能存在的问题:
- 我可能不会在特定治疗中对基因进行聚类,而仅在治疗中对基因进行聚类,反之亦然。
- 可能有更好的方法来获得我想要看到的模式的热图(治疗中和治疗之间的相似基因)。
- 可能有更好的可视化方法,我不知道。
笔记:
csgillespie(版主)在他的网站上有一个更通用的文档,他在其中讨论了时间过程分析的所有方面(包括热图和聚类)。如果您能给我指出一篇详细描述热图和聚类的文章,我将不胜感激。
我试过这个
pvclust包,但它抱怨M是单数然后它崩溃了。