350 likes | 886 Vues
A Toolbox for Bicluster Analysis in R. —— Sebastian Kaiser and Friedrich Leisch. 前言. 在过去的十年中,双向聚类方法在双向数据分析( two- way data analysis )的不同领域内越来越受欢迎。期刊上也发表了种类繁多的双向聚类算法和分析方法。 在本文中 , 我们介绍了 R 语言中 biclust 程序包 , 其中包括了双向聚类算法集、双向数据( two way data )预处理方法,以及验证和可视化双向聚类结果的技术。
E N D
A Toolbox for Bicluster Analysis in R ——Sebastian Kaiser and Friedrich Leisch
前言 在过去的十年中,双向聚类方法在双向数据分析(two- way data analysis)的不同领域内越来越受欢迎。期刊上也发表了种类繁多的双向聚类算法和分析方法。 在本文中,我们介绍了R语言中 biclust程序包,其中包括了双向聚类算法集、双向数据(two way data)预处理方法,以及验证和可视化双向聚类结果的技术。 第一次,像R语言这样的一个平台提供了biclust程序包,在这个平台上,数据分析家们可以很容易地添加新的双向聚类算法并调整算法以适应他们特殊的需求。
前言—双向聚类简介 初始数据:
前言—双向聚类简介 目标: 发现行和列的子集合(subgroups),使集合内尽可能的相似,集合间尽可能的不同
前言—双向聚类简介 算法: 大多数双向聚类算法都是迭代的。在已发现n-1个双聚类的情况下,我们可以 忽略已发现的n-1个双聚类 删除已发现的双聚类的行和列 用随机值代替(mask)已发现的双聚类
biclust 程序包 该程序包主要的函数为 biclust(data,method=BCxxx(),number,...) data: 经过预处理的数据矩阵 method: 使用的算法函数(如CC算法的BCCC()函数) number: 发现双聚类的最大数 ... : 算法的附加参数 结果返回双聚类集中的一个对象
biclust 程序包—算法集 Bimax: 二元矩阵中1的集合 CC: 共同值( Constant values ) Plaid : 共同行值或共同列值 Spectral : 共同连贯值(Coherent values ) Xmotifs : 连贯相关(Coherent correlation )
biclust 程序包—算法集:BCBimax() Bimax算法由Prelic等人在2006年提出,找到二元矩阵中1的集合。 这个算法是迭代的: (1)重排行和列以将1集中在矩阵的右上角 (2)将矩阵分为两个子矩阵 若一个子矩阵中总是只有1,则返回该子矩阵。为了得到令人满意的结果,这种方法需要从不同的起点重复开始几次。 尽管这种算法是为双聚类验证而设计的,但它本身也可作为一种双聚类算法。
biclust 程序包—算法集:BCCC() 其中,aiJ是i行的平均值,aIj 是j列的平均值, aIJ 是整体的平均值。 如果子集合所得分数低于α水平高于整体数据δ分数( δ-fraction of the whole data ),该子集合就称为一个双聚类。 CC算法采取了Cheng and Church (2000)的算法.适用于有共同值的矩阵,开始于经标准化或简单的标准化处理的校正矩阵( adjusted matrix ) 设计者定义了一个分数
biclust 程序包—算法集:BCCC() 该算法有三个主要的步骤: (1)去掉分数高于矩阵分数α倍的行和列 (2)去掉分数最高的行和列 (3)添加行和列直到分数达到α水平 重复以上步骤直到得到双聚类的最大数或找不到双聚类。结果为固定的双聚类,类内所有的aij 几乎在同一水平。 适当的预处理方法对得到好的聚类结果很重要
biclust 程序包—算法集:BCPlaid() 其中, μ,α,β分别代表均值,行和列的影响, ρ 和 κ 确认某行或某列是否在该层(类)内。 该算法适用于拥有共同行值或共同列值的矩阵。 本文提到的算法是Lazzeroni and Owen(2002) Plaid模型的改进。原始的算法使用普通最小二乘法(OLS)找到与Plaid模型相称的k 层(一层相当于一个双聚类)。
biclust 程序包—算法集:BCPlaid() 计算所得数据的残差后,再按照以下步骤进行计算: (1)一个接一个地更新所有参数S 次; (2)生成的参数计算层平方和( the sum of squares of the layer, LSS ) (3)比较双聚类结果与随机置换,如果LSS过高,则返回双聚类。 当没有新的层(双聚类)产生时,结束计算。 Turner (2005)等人设计的较快的新算法中, 二进制的最小二乘法代替了普通最小二乘法。本文使用Turner 等人的原始代码。
biclust 程序包—算法集:BCSpectral() Kluger(2003)等人描述的双向聚类算法包括一些预处理步骤,像标准化,独立缩放,双随机( bistochastization )和记录交互( log interactions )。
biclust 程序包—算法集:BCSpectral() 其目标是发现数据矩阵的棋盘结构,并执行以下步骤予以确定。 (1)重排矩阵,选择一种适当的标准化方法。 (2)计算奇异值,奇异值分解以得到特征值和特征向量 (3)取决于选择的标准化方法,构建的双聚类开始于最大或第二大的特征值。 双聚类的数量取决于特征值的数量和大小。 发现的双聚类比周围行和列的值或高或低,排列在棋盘结构中。
biclust 程序包—算法集:BCXmotifs() Murali and Kasif (2003)的Xmotifs算法旨在发现在几列中有着共同值的行。 对于基因表达数据,他们称双聚类为“保守的基因表达基序”,短“Xmotifs”( short “Xmotifs”.)。不例外地,好的数据预处理方法是很重要的,因为此算法的主要方面就是定义基因(行)的保守状态,即基因在所有的样本(列)中状态相同。 简单的离散化数据(例如使用discretize()函数)为处理基因状态的一个方法。
biclust 程序包—算法集:BCXmotifs() 一旦数据矩阵体现出这种状态,算法会选择随机数量的列n次,并执行以下步骤: (1)选择这些列的一个子集,收集子集中具有同等状态的所有行 (2)收集这些行中具有相同状态的所有列 (3)如果双聚类含有所有发现的行中的大多数,并大于数据的α分数,则返回该双聚类。 为了得到一个以上的双聚类,该算法可以去除已找到的行和列重新计算,或只返回找到的较小的组合。 该算法可发现所有行在列上具有相同数值结构的子矩阵。因此,它可能找到在行方向上具有较大方差的集合。
biclust程序包—附加的方法 预处理函数: discretize(), binarize(), ... 可视化函数: parallelCoordinates(), drawHeatmap(), Bubbleplot() 验证函数: jaccardind(), clusterVariance(), ...
biclust程序包-附加的方法 其中,BICP 为BiclustI结果中一个类内的点的结合 验证函数: Jaccard ——双聚类的Jaccard指数:比较两个双聚类(Biclust1,Biclust2)的结果。 相同双聚类结构中的数据点集百分比 在至少一个结果中包含所有比较的数据点集
例1:BicatYeast 微阵列数据: 419 个基因, 80个实验
例1: BicatYeast(Jaccard) 上表显示五种双聚类算法的成对Jaccard 指数。 Jaccard 指数是两个双聚类结果相似性的评估,0代表完全不一致,1代表完全一致。我们可以看到五种算法找到的是非常不同的双聚类集,必要的预处理步骤不同可以部分解释这一现象,因为这些预处理步骤是为了使数据符合各算法的设想而进行的。另一个重要的方面,我们选择第一种算法以获得一个彼此间尽可能不同的算法集。这样,实践者就很容易尝试各种R语言双聚类的方法,然后选择一个效果最好的对给定数据集聚类。
例2: Tourism Data 澳大利亚旅游业调查 ————伍伦贡大学( University of Wollongong )商学院的调查:假期活动的问题 1003人,56个问题区块(blocks),每个区块15个问题 使用两个区块样本(30个问题)
展望 用基准问题测试更加困难的情况下的算法 比较不同应用领域的算法 完善选择双聚类算法的准则 开发基于双聚类算法的模型 双聚类结果的统计学检验