一手把握聚类分析,轻松实现数据挖掘的可视化
Posted 医学方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一手把握聚类分析,轻松实现数据挖掘的可视化相关的知识,希望对你有一定的参考价值。
俗话说:“人以类聚,物以群分”,在论文中我们常会接触到一类树状的图型,这一类是被称为聚类分析。聚类是一种数据提炼与归纳的技术,有助于发掘数据集的组成,潜在分类与内部的关系。当我们对样本分类与深化分析的需求时就可以寻求聚类的帮助。聚类分析可用的领域非常广泛。在医学、生物学、市场、心理学等等领域均出现其身影。医学研究者会用聚类分析流行病的病例,寻找疾病的分类与亚种,以找到更有针对性的治疗方法,市场研究者会用聚类分析用户的特征,从而掌握客户特点与开发潜在的市场策略,而生物学家则会用聚类方法分析基因芯片的数据,从而寻找物种与基因表达差异与模式……
总而言之,需要分类、挖掘数据关系以及研究内部组成等均可以使用聚类分析。掌握好聚类分析对助于提升我们对数据内在关系的分析与挖掘。
聚类能实现的软件不少,从商业软件的SPSS、PCord,到开放式平台的R与python均可实现,但最方便的还是R语言的平台上。以下是聚类分析的一些名词与介绍。
一般可分为层次聚类(Hierarchical clustering)与非层次聚类(partitioning clustering )。层次聚类就是把单个样品作为一个一个簇,利用不同算法不断合并簇直到变成一个大组或者某个终结条件被满足后停止计算。划分聚类则需要预先指定分组,组之间不存在层次关系。两种方法各有优缺点,本文先从层次聚类讲起。
层次聚类进行的流程简单如下:(1)提出假设,收集实验数据(可以是高维度的矩阵,接受数值型数据或定性、等级数据);(2)对数据进行预处理,去除缺失与无效数据,并进行标准化与均一化(如不同量纲、数据分布的需要进行转换);(3)选择距离矩阵计算的方法;(4)选择聚类的算法;(5)聚类可视化以及修剪;(6)评估聚类的效能。聚类本质上也是机器学习的无监督学习的一大类,看起来流程非常多,其实在R实现起来十分简单。以上提到的每一个步骤都十分重要,有可能影响聚类的效果。今天,我们通过这个专题的学习为你揭开聚类分析的奥秘。
我们以网络乳腺癌诊断的数据集为例进行说明,详细说明见下文。
3.1数据的生成与处理
至此,我们已经获得可用于聚类的数据,聚类数据要求行是样品名称,列是指标的矩阵。
3.2聚类树的可视化
首先,scale命令数据标准化是将不同量纲的数据归一,然后再将数据转换,目的是减少数据分布与差别对分析的影响,然后dist采用欧氏距离计算数据的相关性矩阵,为聚类打下基础。其它距离矩阵方法可参考?dist的命令。其次,hclust实现聚类的计算,method选择是层次聚类的核心。目前常用的方法有: "ward.D", "ward.D2", "single", "complete", "average" (= UPGMA), "mcquitty" (= WPGMA), "median" (= WPGMC) or "centroid" (= UPGMC)等。这里简单分析一下,single是相邻法,该方法会将最相似的一系列样点依次聚合成树,complete是完全聚合法,是计算全部样点距离后按全部距离依次排列组合成树,而ward.D2法是采用最小二乘法计算树的组成,采用哪一种方法可以参考?hclust的帮助与论文。
经过生成的h.c数据可以用于画聚类树啦。以下是聚类树生成的简单命令。
plot(x, labels = NULL, hang = 0.1, main = "Cluster dendrogram", sub = NULL, xlab = NULL, ylab = "Height", ...)
x: hclust()生成的聚类树文件
labels: 聚类树末端的标签,假如 labels = FALSE, 不显示标签。
hang: 简单来说,调节标签与树高的关系,负值表示强制标签从0开始并对齐。 main, sub, xlab, ylab: 聚类标题的显示。
#生成聚类图
此外,h.c文件是一个list复合文件,里面可以修饰聚类树的很多参数,例如我们对聚类树的树高进行调整,并加入hang的命令,当hand的值小于0,聚类树强制标签对齐,获得更好的聚类树展示效果。
这里的plot是cluster包绘制聚类树的命令,可以接受颜色(col)、标签(labels),x、y轴显示(xlab,ylab)的调整。
3.3进一步修饰聚类图形
默认的plot修饰有限,要进一步调整聚类树还要进行以下转换。
(1)树形的变化,转化后可选的类型包括普通方形聚类树"rectangle"(方形就是原来plot默认的图)与 三角型聚类树"triangle"。
转变成dendgram格式的聚类树,还可以对聚类的颜色、线型进行进一步的修饰。
nodePar: 对聚类树的分支进行设置,接受list下的pch, cex, col, xpd, 与bg 等参数,可以参考points命令。
edgePar: 对聚类树的末端进行设置包括col, lty and lwd等参数,
参考?segments设置
leaflab: 末端文字的形状设置,默认是"perpendicular" 。
通过线形与颜色很容区分聚类的层次,为分析打下基础。根据聚类树至少分为两大类结果,I类是左边的良性肿瘤,II类是恶性肿瘤,但假如仔细看似乎每一类下面还有亚组,因此,我们加上一个简单的命令进行划分。
rect.hclust(h.c1,k=4,border=5:8)
#注意是在原图上进行再聚类,指定分类数量后,系统给聚类树划分
rect.hclust(h.c1,h=5,which=c(1,2),border=c("red","darkgreen"))
#我们也可以采用高度(h)与选择(which)进行再次分类
3.4聚类图形高级自定义颜色
假如我们想在标签也实现分组颜色可以吗?当然没问题,但是需要一点R对function的理解,假如不太明白,可以直接复制我们的代码。
在cluster包稍微复杂一点,请跟着我们的脚步。
聚类树让我们看到三个结果:1.恶性肿瘤组内包括至少3个亚组;2.良性肿瘤组似乎只含一个亚组,性状比较接近;3.有两个样品在错误的组内,是否代表存在不准确的指标或者比较容易混淆的症状是下一步可以深挖的方向。以上仅是通过聚类树简单的分析得到的结果,当然还需要医学专业背景知识的支撑,去进一步解释结果。
本文通过cluster、包对聚类树的基本算法、流程、绘制进行了学习,然后通过关键命令对聚类树进行修饰变形,我们可以简单、快捷的画出你自己的聚类树图形,聚类树的分支、标签、形状,大小都掌握在你的手中。那么文章中的聚类图你也能实现(下文有案例)。
聚类树的进一步分析是属于机器学习的范畴,在本文的数据,聚类至少揭示了数据的基本分组,以及每一个组内是否存在亚组的判定,然后通过聚类的分支我们可以寻找相近的样品与离群组,判定指标的选择是否合适,我们可以通过算法优化,提高聚类的精确度,通过指标的筛选传递给决策树等数值分类模型,为指标的重要度判定打下基础,聚类的结果与其他分类方法的互动也是分析的重点。此外,其实进化树与聚类树也是类似的生成方法,只是数据格式与聚类的算法有差别(基因的进化树一般采用最大似然法计算),因此也可以套用以上的方法尝试生成。进一步的分析与计算可以看以后的文章。
(1)Frequent Co-Expression of miRNA-5p and -3p Species and Cross-Targeting in Induced Pluripotent Stem Cells
http://www.medsci.org/v11p0824.htm
文章通过聚类对MSC与iPSC的基因进行分析,寻找内在联系。
Figure 1 Hierarchical clustering analysis of miRNA profiles of MSC and iPSC. Level of gene expression is shown in the colour code shown at the bottom, ranging from minimal expression levels in green, average or weak miRNA expression in black and maximal levels in red. The analysis was performed using miScript miRNA PCR Array Data Analysis Web Portal.
(2)Genome sequence of a diabetes-prone rodent reveals a mutation hotspot around the ParaHox gene cluster
http://www.pnas.org/content/114/29/7677
文章对沙鼠的基因型采用聚类标识相互关系,还采用了无根聚类对比变异基因之间的差别。
(3)Gene cluster conservation provides insight into cercosporin biosynthesis and extends production to the genus Colletotrichum
http://www.pnas.org/content/early/2018/05/25/1712798115
Phylogenetic roadmap of CTB cluster evolution. Phylogenetic roadmap detailing the proposed evolutionary trajectory of the CTB cluster involving horizontal gene transfer events from Capnodiales to Glomerellales (T1) and another from Glomerellales to Magnaporthales (T2), as well as multiple duplications (D1 to D4) and frequent gene loss (x). Cladogram of the phylogenetic relationship of Cercospora spp. and 45 other sequenced fungi. The unscaled tree was constructed using CVTree. Duplication nodes are marked with blue stars, losses are indicated by x’s, and transfers are highlighted by green arrows. Species without the CTB cluster are depicted in gray; those encompassing it are in black. An alternative and slightly less parsimonious scenario involving a single transfer from Capnodiales into the last common ancestor of Magnaporthales and Glomerellales is shown by the dashed arrow.
(4)Distinct clinical phenotypes of airways disease defined by cluster analysis
http://erj.ersjournals.com/content/erj/34/4/812.full.pdf
这篇没有用图展示聚类,也有详细的分析。
(5)Cluster Analysis Identifies 3 Phenotypes within Allergic Asthma
https://www.sciencedirect.com/science/article/pii/S2213219817307870
这篇过敏性哮喘疾病采用聚类模型发现亚型。
「医学方」现正式向粉丝们公开征稿!内容须原创首发,与科研相关,一经采用,会奉上丰厚稿酬(300-2000元),。
“医学方”始终致力于服务“医学人”,将最前沿、最有价值的临床、科研原创文章推送给各位临床医师、科研人员。
腾讯课堂:https://medfun.ke.qq.com
网易云课堂:http://study.163.com/u/ykt1467466791112
客服微信:yixuefang1234
温馨提示:医学方还设有专门的讨论群哦~各位明星导师都在群中,可以解答各位的遇到的问题,如有兴趣,可以加客服微信后加入群聊...
俗话说:“人以类聚,物以群分”,在论文中我们常会接触到一类树状的图型,这一类是被称为聚类分析。聚类是一种数据提炼与归纳的技术,有助于发掘数据集的组成,潜在分类与内部的关系。当我们对样本分类与深化分析的需求时就可以寻求聚类的帮助。聚类分析可用的领域非常广泛。在医学、生物学、市场、心理学等等领域均出现其身影。医学研究者会用聚类分析流行病的病例,寻找疾病的分类与亚种,以找到更有针对性的治疗方法,市场研究者会用聚类分析用户的特征,从而掌握客户特点与开发潜在的市场策略,而生物学家则会用聚类方法分析基因芯片的数据,从而寻找物种与基因表达差异与模式……
总而言之,需要分类、挖掘数据关系以及研究内部组成等均可以使用聚类分析。掌握好聚类分析对助于提升我们对数据内在关系的分析与挖掘。
聚类能实现的软件不少,从商业软件的SPSS、PCord,到开放式平台的R与python均可实现,但最方便的还是R语言的平台上。以下是聚类分析的一些名词与介绍。
一般可分为层次聚类(Hierarchical clustering)与非层次聚类(partitioning clustering )。层次聚类就是把单个样品作为一个一个簇,利用不同算法不断合并簇直到变成一个大组或者某个终结条件被满足后停止计算。划分聚类则需要预先指定分组,组之间不存在层次关系。两种方法各有优缺点,本文先从层次聚类讲起。
层次聚类进行的流程简单如下:(1)提出假设,收集实验数据(可以是高维度的矩阵,接受数值型数据或定性、等级数据);(2)对数据进行预处理,去除缺失与无效数据,并进行标准化与均一化(如不同量纲、数据分布的需要进行转换);(3)选择距离矩阵计算的方法;(4)选择聚类的算法;(5)聚类可视化以及修剪;(6)评估聚类的效能。聚类本质上也是机器学习的无监督学习的一大类,看起来流程非常多,其实在R实现起来十分简单。以上提到的每一个步骤都十分重要,有可能影响聚类的效果。今天,我们通过这个专题的学习为你揭开聚类分析的奥秘。
我们以网络乳腺癌诊断的数据集为例进行说明,详细说明见下文。
3.1数据的生成与处理
代码1
至此,我们已经获得可用于聚类的数据,聚类数据要求行是样品名称,列是指标的矩阵。
3.2聚类树的可视化
h.c<-hclust(dist(scale(w2),"euc"),method="ward.D2")
首先,scale命令数据标准化是将不同量纲的数据归一,然后再将数据转换,目的是减少数据分布与差别对分析的影响,然后dist采用欧氏距离计算数据的相关性矩阵,为聚类打下基础。其它距离矩阵方法可参考?dist的命令。其次,hclust实现聚类的计算,method选择是层次聚类的核心。目前常用的方法有: "ward.D", "ward.D2", "single", "complete", "average" (= UPGMA), "mcquitty" (= WPGMA), "median" (= WPGMC) or "centroid" (= UPGMC)等。这里简单分析一下,single是相邻法,该方法会将最相似的一系列样点依次聚合成树,complete是完全聚合法,是计算全部样点距离后按全部距离依次排列组合成树,而ward.D2法是采用最小二乘法计算树的组成,采用哪一种方法可以参考?hclust的帮助与论文。
经过生成的h.c数据可以用于画聚类树啦。以下是聚类树生成的简单命令。
plot(x, labels = NULL, hang = 0.1, main = "Cluster dendrogram", sub = NULL, xlab = NULL, ylab = "Height", ...)
x: hclust()生成的聚类树文件
labels: 聚类树末端的标签,假如 labels = FALSE, 不显示标签。
hang: 简单来说,调节标签与树高的关系,负值表示强制标签从0开始并对齐。 main, sub, xlab, ylab: 聚类标题的显示。
plot(h.c,xlab="",ylab="height", main="my cluster analysis")
#生成聚类图
此外,h.c文件是一个list复合文件,里面可以修饰聚类树的很多参数,例如我们对聚类树的树高进行调整,并加入hang的命令,当hand的值小于0,聚类树强制标签对齐,获得更好的聚类树展示效果。
h.c1<-h.c
#生成一个新的文件
h.c1$height<-sqrt(h.c1$height)
plot(h.c1,hang=-1,xlab="",ylab="height",main="my cluster analysis")
这里的plot是cluster包绘制聚类树的命令,可以接受颜色(col)、标签(labels),x、y轴显示(xlab,ylab)的调整。
plot(h.c1,hang=-1,cex=0.7,col="red",lwd=2,lty=4)
#命令还可以接受cex字体,lwd线宽与lty线型的设定
3.3进一步修饰聚类图形
默认的plot修饰有限,要进一步调整聚类树还要进行以下转换。
h.c2<-as.dendgram(h.c1)
#转化为cluster包的另一种格式的聚类树。
(1)树形的变化,转化后可选的类型包括普通方形聚类树"rectangle"(方形就是原来plot默认的图)与 三角型聚类树"triangle"。
plot(h.c2,type="triangle",cex=0.7)
#变换聚类树的类型
plot(h.c2, type = "triangle", horiz = T)
# 聚类树的翻转
plot(h.c2, xlim = c(1, 20), ylim = c(0,3))
#放大聚类树局部
转变成dendgram格式的聚类树,还可以对聚类的颜色、线型进行进一步的修饰。
nodePar: 对聚类树的分支进行设置,接受list下的pch, cex, col, xpd, 与bg 等参数,可以参考points命令。
edgePar: 对聚类树的末端进行设置包括col, lty and lwd等参数,
参考?segments设置
leaflab: 末端文字的形状设置,默认是"perpendicular" 。
nodePar <- list(lab.cex = 0.6, pch = c(NA, 19), cex = 0.5, col = "blue")
#对端点进行修饰
edgePar = list(col = 3:1, lwd = 3:1)
#对分支进行修饰
plot(h.c2, ylab = "Height", nodePar = nodePar, leaflab = "none")
#对端点进行修饰
plot(h.c2, ylab = "Height",xlab="sample", nodePar = nodePar,edgePar = edgePar)
#完成聚类树的自定义绘制,对分支进行分别上色。
通过线形与颜色很容区分聚类的层次,为分析打下基础。根据聚类树至少分为两大类结果,I类是左边的良性肿瘤,II类是恶性肿瘤,但假如仔细看似乎每一类下面还有亚组,因此,我们加上一个简单的命令进行划分。
rect.hclust(h.c1,k=4,border=5:8)
#注意是在原图上进行再聚类,指定分类数量后,系统给聚类树划分
rect.hclust(h.c1,h=5,which=c(1,2),border=c("red","darkgreen"))
#我们也可以采用高度(h)与选择(which)进行再次分类
3.4聚类图形高级自定义颜色
假如我们想在标签也实现分组颜色可以吗?当然没问题,但是需要一点R对function的理解,假如不太明白,可以直接复制我们的代码。
在cluster包稍微复杂一点,请跟着我们的脚步。
labelColors <- c("red", "blue", "darkgreen", "purple")
#颜色命名
clu<-cutree(h.c1,k=4)
#对聚类进行分组
colLab <- function(n) {
if(is.leaf(n)) {
a <- attributes(n)
# clus – 我们刚做的分组
# labelColors –赋予的颜色
labCol <- labelColors[clus[which(names(clus) == a$label)]]
attr(n, "nodePar") <- c(a$nodePar, lab.col = labCol)
}
n
}
#颜色的分组的函数编写
cl<-dendrapply(h.c1,colLab)
#主角出场,采用dendrapply函数定义颜色。
聚类树让我们看到三个结果:1.恶性肿瘤组内包括至少3个亚组;2.良性肿瘤组似乎只含一个亚组,性状比较接近;3.有两个样品在错误的组内,是否代表存在不准确的指标或者比较容易混淆的症状是下一步可以深挖的方向。以上仅是通过聚类树简单的分析得到的结果,当然还需要医学专业背景知识的支撑,去进一步解释结果。
本文通过cluster、包对聚类树的基本算法、流程、绘制进行了学习,然后通过关键命令对聚类树进行修饰变形,我们可以简单、快捷的画出你自己的聚类树图形,聚类树的分支、标签、形状,大小都掌握在你的手中。那么文章中的聚类图你也能实现(下文有案例)。
聚类树的进一步分析是属于机器学习的范畴,在本文的数据,聚类至少揭示了数据的基本分组,以及每一个组内是否存在亚组的判定,然后通过聚类的分支我们可以寻找相近的样品与离群组,判定指标的选择是否合适,我们可以通过算法优化,提高聚类的精确度,通过指标的筛选传递给决策树等数值分类模型,为指标的重要度判定打下基础,聚类的结果与其他分类方法的互动也是分析的重点。此外,其实进化树与聚类树也是类似的生成方法,只是数据格式与聚类的算法有差别(基因的进化树一般采用最大似然法计算),因此也可以套用以上的方法尝试生成。进一步的分析与计算可以看以后的文章。
Frequent Co-Expression of miRNA-5p and -3p Species and Cross-Targeting in Induced Pluripotent Stem Cells
http://www.medsci.org/v11p0824.htm
文章通过聚类对MSC与iPSC的基因进行分析,寻找内在联系。
Figure 1 Hierarchical clustering analysis of miRNA profiles of MSC and iPSC. Level of gene expression is shown in the colour code shown at the bottom, ranging from minimal expression levels in green, average or weak miRNA expression in black and maximal levels in red. The analysis was performed using miScript miRNA PCR Array Data Analysis Web Portal.
Genome sequence of a diabetes-prone rodent reveals a mutation hotspot around the ParaHox gene cluster
http://www.pnas.org/content/114/29/7677
文章对沙鼠的基因型采用聚类标识相互关系,还采用了无根聚类对比变异基因之间的差别。
Gene cluster conservation provides insight into cercosporin biosynthesis and extends production to the genus Colletotrichum
http://www.pnas.org/content/early/2018/05/25/1712798115
Phylogenetic roadmap of CTB cluster evolution. Phylogenetic roadmap detailing the proposed evolutionary trajectory of the CTB cluster involving horizontal gene transfer events from Capnodiales to Glomerellales (T1) and another from Glomerellales to Magnaporthales (T2), as well as multiple duplications (D1 to D4) and frequent gene loss (x). Cladogram of the phylogenetic relationship of Cercospora spp. and 45 other sequenced fungi. The unscaled tree was constructed using CVTree. Duplication nodes are marked with blue stars, losses are indicated by x’s, and transfers are highlighted by green arrows. Species without the CTB cluster are depicted in gray; those encompassing it are in black. An alternative and slightly less parsimonious scenario involving a single transfer from Capnodiales into the last common ancestor of Magnaporthales and Glomerellales is shown by the dashed arrow.
Distinct clinical phenotypes of airways disease defined by cluster analysis
http://erj.ersjournals.com/content/erj/34/4/812.full.pdf
这篇没有用图展示聚类,也有详细的分析。
Cluster Analysis Identifies 3 Phenotypes within Allergic Asthma
https://www.sciencedirect.com/science/article/pii/S2213219817307870
这篇过敏性哮喘疾病采用聚类模型发现亚型。
「医学方」现正式向粉丝们公开征稿!内容须原创首发,与科研相关,一经采用,会奉上丰厚稿酬(300-2000元),详情请戳。
“医学方”始终致力于服务“医学人”,将最前沿、最有价值的临床、科研原创文章推送给各位临床医师、科研人员。
腾讯课堂:https://medfun.ke.qq.com
网易云课堂:http://study.163.com/u/ykt1467466791112
客服微信:yixuefang1234
温馨提示:医学方还设有专门的讨论群哦~各位明星导师都在群中,可以解答各位的遇到的问题,如有兴趣,可以加客服微信后加入群聊...
以上是关于一手把握聚类分析,轻松实现数据挖掘的可视化的主要内容,如果未能解决你的问题,请参考以下文章