R 数据挖掘算法/聚类/Biclust
在过去的十年中,双聚类方法在双向数据分析的不同领域变得越来越流行,并且已经发表了各种算法和分析方法。
双聚类是双向数据分析中一项重要的新技术。在 Cheng 和 Church (2000) 遵循 Hartigan (1972) 的初始双聚类思想并开始计算微阵列数据的双聚类之后,发表了大量的文章,涉及不同类型的算法和方法来预处理和分析此类方法的结果。例如,在 Madeira 和 Oliveira (2004) 或 Prelic 等人 (2006) 中可以找到对几种双聚类算法的比较。
- 对 2 个维度的同时聚类;
- 大型数据集,其中聚类会导致分散的结果;
- 只有部分数据互相影响;
查找行和列的子组,这些子组彼此尽可能相似,并且与其余部分尽可能不同。
- Sebastian Kaiser 和 Friedrich Leisch 开始在 R (R Development Core Team, 2007) 中实现一个全面的双聚类工具箱。
它提供了一个不断增长的双聚类方法列表,以及预处理和可视化技术,使用 S4 类和方法 (Chambers, 1998)。该软件是开源的,可以从 R-Forge 免费获得,网址为 http://R-Forge.R-project.org。
- 该软件包的主要设计原则之一是将结果提供为 Biclust-Class 的实体,一个 S4 类,其中包含结果后处理所需的所有信息。
它包含四个插槽 Parameters、RowxNumber、NumberxCol 和 Number。插槽 Parameters 包含使用的参数和算法,Number 包含找到的双聚类的数量。RowxNumber 和 NumberxCol 插槽表示已找到的双聚类。它们都是维度为 (数据行 × 找到的双聚类数量) 的逻辑矩阵,如果行 i 位于双聚类 j 中,则 RowxNumber[i,j] 中具有 TRUE 值。NumberxCol 对列来说是一样的,但出于计算原因,这里矩阵的行表示双聚类的数量,而列表示数据的列。因此,只需调用 data [ Biclust@RowxNumber[,a] * Biclust@NumberxCol[a,] ] 即可提取双聚类 a 的值。
- Biclust-class 类的对象是通过对所有双聚类方法使用统一的接口创建的,调用形式为 biclust(x,method=BiclustMethod,...)。
此泛型函数将预处理的数据矩阵 x、表示为 Biclustmethod-Class 的双聚类算法以及其他参数作为输入。在下面,我们简要描述了软件包中已实现的五种算法,小节标题对应于相应的 Biclustmethod-Class 的名称。命名方案为 BCxxx,其中 xxx 是算法名称的缩写。选择了一些方法,因为可以从原始作者那里获得开源代码,而其他方法则新近实现,以使整个工具箱尽可能全面。当然,总有改进的空间,将来会向该软件包添加更多方法。有关双聚类计算主要方向的讨论,还可以参考 van Mechelen 和 Schepers (2006)。算法按字母顺序描述,如果没有另行说明,则函数在解释型 S 代码中实现。
为了在 R 中使用 Biclust 算法,必须安装 Biclust 软件包和库
install.packages("biclust")
library("biclust")
# S4 method for signature 'matrix,BCBimax':
biclust(x, method=BCBimax(), minr=2, minc=2, number=100)
# S4 method for signature 'matrix,BCrepBimax':
biclust(x, method=BCrepBimax(), minr=2, minc=2, number=100, maxc=12)
其中参数为
- x - 代表数据的逻辑矩阵。
- method - 此处为 BCBimax,用于执行 Bimax 算法。
- minr - 结果双聚类的最小行大小。
- minc - 结果双聚类的最小列大小。
- number - 要找到的双聚类数量。
- maxc - 结果双聚类的最大列大小。
如果一切顺利,将返回一个 Biclust 对象。
- 正如我们在下面所看到的,返回了一个 Biclust 对象,我们可以绘制它或者只是获取最终对象。
> test <- matrix(rbinom(400, 50, 0.4), 20, 20) > res1 <- biclust(test, method=BCCC(), delta=1.5, alpha=1, number=10) > res1 An object of class Biclust call: biclust(x = test, method = BCCC(), delta = 1.5, alpha = 1, number = 10) Number of Clusters found: 10 First 5 Cluster sizes: BC 1 BC 2 BC 3 BC 4 BC 5 Number of Rows: "7" "4" "6" "6" "5" Number of Columns: "5" "8" "4" "5" "6"
- 我们在“案例研究”部分提供了一些绘图示例。
- 作为标准示例,我们在 Barkow 等人 (2006) 的 BicatYeast 数据上运行了所有算法。为此,需要预处理数据并将其提交到 biclust 函数
以及所选算法 (此处为 Xmotifs) 和参数。
BicatYeast
- 酿酒酵母菌(酵母)的子样本。
- 用于演示 Barkow 等人 (2006) 的双聚类算法。
- 微阵列数据:419 个基因,80 个实验。
data(BicatYeast)
x <- discretize(BicatYeast)
res <- biclust(x, method=BCXmotifs(), alpha=0.05, number=50)
- 要可视化结果,您只需在结果上调用任何可视化函数,例如
> parallelCoordinates( x=BicatYeast, bicResult=res, number=4)
- 平行坐标图示例:结果中第 4 个双聚类中条件跨其基因的表达水平
Xmotifs 算法。
- 双聚类结果相似性度量,采用 Jaccard 指数的改编。
- 表 1 显示了所有双聚类算法的成对 Jaccard 指数。Jaccard 指数是衡量两个
聚类结果的相似性,零表示没有一致性,一表示结果相同。可以看出,所有算法都找到了非常不同的双聚类集。这可以部分解释为不同的预处理步骤,这些步骤是必要的,以便数据符合算法的各自假设。
- 另一个重要方面是,我们选择了第一个要实现的算法,以获得一系列彼此尽可能不同的算法。
现在,从业人员可以很容易地在 R 中尝试各种双聚类方法,并选择最适合给定数据集的方法。
- http://r-forge.r-project.org/projects/biclust/ 获取最新的发展情况。
- http://www.statistik.lmu.de/~kaiser/bicluster.html 获取论文和链接。
- BARKOW, S., BLEULER, S., PRELIC, A., ZIMMERMANN, P. 和 ZITZLER, E. (2006):Bicat:一个双聚类分析工具箱。生物信息学,22,1282–1283。
- CHAMBERS, J. M. (1998):用数据编程:S 语言指南。Chapman & Hall,伦敦。
- CHENG, Y. 和 CHURCH, G. M. (2000):表达数据的双聚类。在:第八届智能系统分子生物学国际会议论文集,1,93–103。
- GOVEART, G. 和 NADIF, M. (2003):使用块混合模型进行聚类。模式识别,36,463–473。
- VAN MECHELEN, I. 和 SCHEPERS, J. (2006):双聚类的统一模型。在:Compstat 2006 - 计算统计学论文集,81–88。
- MURALI, T. 和 KASIF, S. (2003):从基因表达中提取保守的基因表达基序。在:太平洋生物计算研讨会,8,77–88。
- PRELIC, A., BLEULER, S., ZIMMERMANN, P., WIL, A., BUHLMANN, P., GRUISSEM, W., HENNING, L., THIELE, L. 和 ZITZLER, E. (2006):一个
系统地比较和评估用于基因表达数据的双聚类方法。生物信息学,22(9),1122–1129。
- SANTAMARIA, R., THERON, R. 和 QUINTALES, L. (2007):一个分析微阵列实验中双聚类结果的框架。在:第八届智能数据工程与自动化学习国际会议 (IDEAL’07),施普林格,柏林,770–779。
- TURNER, H., BAILEY, T. 和 KRZANOWSKI, W. (2005):通过系统性能测试证明改进的微阵列数据双聚类。计算统计和数据分析,48,235–254。