在时间过程实验中聚类基因

机器算法验证 r 机器学习 聚类 微阵列
2022-04-06 15:41:46

我已经看到了一些关于时间序列聚类的查询,特别是关于聚类的查询,但我认为它们没有回答我的问题。

背景:我想在酵母的时间过程实验中对基因进行聚类。有四个时间点说:t1 t2 t3t4和基因总数G我有一个矩阵M中的数据,其中的列代表治疗(或时间点) t1 t2 t3t4 ,行代表基因。因此,M是一个 Gx4 矩阵。

问题:我想对在所有时间点t1 t2 t3t4 以及在特定时间点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()

我最近hopachBioconductor中发现了可以用来估计集群数量的包。以前,我随机分配热图的 bin 数量并在适当的高度切割树以获得预先指定的集群数量。

我的解决方案中可能存在的问题:

  1. 我可能不会在特定治疗中对基因进行聚类,而仅在治疗中对基因进行聚类,反之亦然。
  2. 可能有更好的方法来获得我想要看到的模式的热图(治疗中和治疗之间的相似基因)。
  3. 可能有更好的可视化方法,我不知道。

笔记:

  1. csgillespie(版主)在他的网站上有一个更通用的文档,他在其中讨论了时间过程分析的所有方面(包括热图和聚类)。如果您能给我指出一篇详细描述热图和聚类的文章,我将不胜感激。

  2. 我试过这个pvclust包,但它抱怨M是单数然后它崩溃了。

3个回答

作为对@mbq 的回应(Mfuzz看起来不错)的补充,我将仅提供一些关于时程基因表达数据聚类的参考资料(PDF):

  1. Futschik,ME 和 Charlisle,B(2005 年)。基因表达时程数据的噪声鲁棒聚类生物信息学和计算生物学杂志3(4),965-988。
  2. Luan, Y 和 Li, H (2003)。使用具有 B 样条的混合效应模型对时程基因表达数据进行聚类生物信息学19(4),474-482。
  3. Tai YC 和 Speed,TP(2006 年)。复制微阵列时程数据的多元经验贝叶斯统计统计年鉴34,2387–2412
  4. Schliep, A、Steinhoff, C 和 Schönhuth, A (2004)。使用 HMM 的混合物对基因表达时间过程中的组进行稳健推断生物信息学20(1),i283-i228。
  5. Costa, IG, de Carvalho, F 和 de Souto, MCP (2004)。基因表达时程数据聚类方法的比较分析遗传学和分子生物学27(4),623-631。
  6. Inoue, LYT, Neira, M, Nelson, C, Gleave, M 和 Etzioni, R (2006)。时程基因表达数据的基于集群的网络模型生物统计学8(3),507-525。
  7. Phang, TL, Neville, MC, Rudolph, M 和 Hunter, L (2003)。轨迹聚类:将基因表达时间课程分组并应用于乳腺发育的非参数方法太平洋生物计算研讨会8,351-362

你试过这个timecourse包吗(正如@csgillespie 在他的讲义中所建议的那样)?

看来您只是想做一个公平的标准分析,所以我不是回答您问题的最佳人选;但是我建议您更深入地研究 Bioconductor;它有很多有用的东西,但是找到你想要的东西很痛苦。例如Mfuzz包看起来很有前途。

只是为了添加其他答案(看起来它们应该可以解决您的问题),您是否尝试在构建树状图时为您的数据使用标准聚类算法?例如,

heatmap.2(dataset, <standard args>,
          hclustfun = function(c){hclust(c, method= 'average')}
          )

除了使用平均距离进行聚类,您还可以使用“ward”、“single”、“median”……查看?hclust完整列表。

要提取集群,hclust直接使用命令,然后使用cutree命令。例如,

hc = hclust(dataset)
cutree(hc)

更多细节可以在我的网页上找到。