如题所述
之前的笔记:
聚类介绍: 点这里
层次聚类分析案例(一)
层次聚类分析案例(二)
获取全基因组表达数据的能力是一项计算复杂度非常高的任务。由于人脑的局限性,是无法解决这个问题。但是,通过将基因分类进数量较少的类别后再进行分析,就能将基因数据加工到更易理解的水平。
聚类的目标是将一组基因进行划分,使相似的基因落入同一个簇,同时不相似的基因落入不同的簇。这里需要考虑的关键问题是如何定义相似性,以及处理已分类基因。这里我们使用两种基因类型的感光性来探索基因聚类问题。
准备工作
为了进行层次聚类,我们使用从实验鼠身上采集的数据集。
第1步:收集和描述数据
该任务使用名为GSE4051_data和GSE4051_design的数据集。该数据集以标准格式存储在名为GSE4051_data.csv和GSE4051_design.csv的CSV格式的文件中。数据获取路径: 在这里
GSE4051_data数据集包含29949行数据和39个变量。数值型变量如下:
GSE4051_design数据集包含39行数据和4个变量。数值型变量是:sidNum
非数值型变量是:sidChar;devStage;gType;
具体实施步骤以下为实现细节。
第2步:探索数据
RColorBrewer包是一个R包,可从 http://colorbrewer2.org 获取,它提供地图和其他图形的彩色模板。
pvclust包用来实现非确定性的层次聚类分析。在层次聚类中,每个簇通过多尺度有放回抽样计算p值。一个簇的p值在0~1之间。p值有两种类型:近似无偏(approximately unbiased,AU)和有放回概率(bootstrap probability,BP)值。AU p值通过多尺度有放回采样方法计算,经典的有放回采样方法用来计算BP p值。AU p值相比BP p值存在优效性偏见。
xtable包可以生成LaTeX格式的表格。使用xtable可以将特定的R对象转换成xtables。这些xtables能够以LaTeX或HTML的格式输出。
plyr包被用来进行分置合并(split-apply-combine,SAC)过程。它将一个大的问题切分成易处理的小块,在每个小块上进行操作,然后将所有小块合并起来。
载入以下包:
让我们探索并理解变量间的关系。从导入名为GSE4051_data.csv的CSV文件开始。我们将该文件数据存储到GSE4051_data数据框中:
接下来,输出GSE4051_data数据框的信息。str()函数返回GSE4051_data的结构信息。它简略显示了GSE4051_data数据框的内部结构。max.level指明了为了显示网状结构的最大等级。
结果如下:
下面,我们导入名为GSE4051_design.csv的CSV文件,将其数据保存到GSE4051_design数据框中:
输出GSE4051_design数据框的内部结构。
结果如下:
第3步:转换数据
为了便于后续的可视化阶段,需要对每一行数据进行拉伸操作。这是由于在目前的要求下,不同基因表达之间存在绝对值的差距,因此需要对每一行数据进行拉伸。
中心化变量和创建z值是两个常见的数据分析方法。scale函数中心化并拉伸数值型矩阵的列。
变换矩阵。传入GSE4051_data数据框用t()函数进行数据框变换。
接下来,我们输出GSE4051_data数据框的信息。通过设置give.attr=FALSE,次级结构的属性不会被显示。
结果如下:
round()函数用于舍入到最接近的整数。语法形式只有1种:Y = round(X),这里的X可以是数,向量,矩阵,输出对应。
head()函数返回一个向量、矩阵、表、数据框或函数的头部。GSE4051_data和trans_GSE4051_data数据框被当作对象传入。rowMeans()函数计算每列的平均值。data.frame()函数创建数据框耦合变量集合,并且共享许多指标的性质:
结果如下:
第4步:训练模型
接下来是训练模型。第一步是计算距离矩阵。dist()函数用来计算并返回距离矩阵,可以使用特定的距离度量方法来计算数据矩阵中各行间的距离。这里可使用的距离度量方法有欧式距离、最大距离、曼哈顿距离、堪培拉距离、二进制距离,或闵可夫斯基距离。这里使用欧式距离。欧式距离计算两个向量间的距离公式为sqrt(sum((x_i-y_i)^2))。转换后的trans_GSE4051_data数据框被用来计算距离。结果存储在pair_dist_GSE4051_data数据框中。
接下来,使用interaction()函数计算并返回gType、devStage变量间相互作用的无序因子。无序因子的结果连同GSE4051_design数据框一同被传入with()函数。该函数计算产生一个新的因子代表gType、devStage变量的相互作用:
summary()函数用来生成GSE4051_design$group数据框的结果总结:
结果如下:
下面,使用多种不同的联合类型计算层次聚类。
使用hclust()函数对n个不同对象进行聚类分析。第一个阶段,每个对象被指派给自己的簇。算法在每个阶段迭代聚合两个最相似的簇。持续该过程直到只剩一个单独的簇。hclust()函数要求我们以距离矩阵的形式提供数据。pair_dist_GSE4051_data数据框被传入。
在第一个例子中使用single聚类方法:
结果如下:
在第二个例子中使用complete聚集方法。
调用pr.hc.complete的结果是显示所使用的聚集方法、距离计算方法和对象数量:
结果如下:
在第三个例子中使用average聚类方法:
调用pr.hc.complete的结果是显示所使用的聚集方法、距离计算方法和对象数量:
结果如下:
在第四个例子中使用ward聚类方法:
pr.hc.ward的调用结果是显示所使用的聚集方法、距离计算方法和对象数量:
结果如下:
plot()函数是绘制R对象的通用函数。
第一次调用plot()函数,传递pr.hc.single数据框作为输入对象:
结果如下:
第二次调用plot()函数,传入pr.hc.complete数据框作为输入对象:
结果如下:
第三次调用plot()函数,传入pr.hc.average数据框作为输入对象:
结果如下:
第四次调用plot()函数,传入pr.hc.ward数据框作为输入对象:
结果如下:
第5步:绘制模型
plot()函数是绘制R对象的通用函数。这里,plot()函数用来绘制系统树图。
rect.hclust()函数强调不同的簇,并在系统树图的枝干上绘制长方形。系统树图首先在某个等级上被剪切,之后在选定的枝干上绘制长方形。
RColorBrewer使用从 http://colorbrewer2.org 获得的包来选择绘制R图像的颜色模板。
颜色分为三组:
最重要的一个RColorBrewer函数是brewer.pal()。通过向该函数传入颜色的数量和配色的名字,可以从display.brewer.all()函数中选择一个配色方案。
在第一个例子中,pr.hc.single作为一个对象传入plot()函数:
结果如下:
下面创建热度图,使用single聚集方法。heatmap()函数默认使用euclidean聚集方法:
结果如下:
在第二例子中,pr.hc.complete作为对象传入plot()函数:
结果如下:
下面使用complete聚集方法创建热度图:
结果如下:
在第三个例子中,pr.hc.average作为对象传入plot()函数:
结果如下:
下面创建average聚集方法的热度图:
结果如下:
在第四个例子中,pr.hc.ward作为对象传入plot()函数:
结果如下:
下面绘制ward聚集方法的热度图:
结果如下: