层次聚类(hierarchical clustering)基于簇间的相似度在不同层次上分析数据,从而形成树形的聚类结构,层次聚类一般有两种划分策略:自底向上的聚合(agglomerative)策略和自顶向下的分拆(divisive)策略,本文对层次聚类算法原理进行了详细总结。
1. 层次聚类算法原理
层次聚类根据划分策略包括聚合层次聚类和拆分层次聚类,由于前者较后者有更广泛的应用且算法思想一致,因此本节重点介绍聚合层次聚类算法。
聚合层次聚类算法假设每个样本点都是单独的簇类,然后在算法运行的每一次迭代中找出相似度较高的簇类进行合并,该过程不断重复,直到达到预设的簇类个数K或只有一个簇类。
聚合层次聚类的基本思想:
1)计算数据集的相似矩阵;
2)假设每个样本点为一个簇类;
3)循环:合并相似度最高的两个簇类,然后更新相似矩阵;
4)当簇类个数为1时,循环终止;
为了更好的理解,我们对算法进行图示说明,假设我们有6个样本点{A,B,C,D,E,F}。
第一步:我们假设每个样本点都为一个簇类(如下图),计算每个簇类间的相似度,得到相似矩阵;
第二步:若B和C的相似度最高,合并簇类B和C为一个簇类。现在我们还有五个簇类,分别为A,BC,D,E,F。
第三步:更新簇类间的相似矩阵,相似矩阵的大小为5行5列;若簇类BC和D的相似度最高,合并簇类BC和D为一个簇类。现在我们还有四个簇类,分别为A,BCD,E,F。
第四步:更新簇类间的相似矩阵,相似矩阵的大小为4行4列;若簇类E和F的相似度最高,合并簇类E和F为一个簇类。现在我们还有3个簇类,分别为A,BCD,EF。
第五步:重复第四步,簇类BCD和簇类EF的相似度最高,合并该两个簇类;现在我们还有2个簇类,分别为A,BCDEF。
第六步:最后合并簇类A和BCDEF为一个簇类,层次聚类算法结束。
树状图是类似树(tree-like)的图表,记录了簇类聚合和拆分的顺序。我们根据上面的步骤,使用树状图对聚合层次聚类算法进行可视化:
也可用下面的图记录簇类聚合和拆分的顺序:
拆分层次聚类算法假设所有数据集归为一类,然后在算法运行的每一次迭代中拆分相似度最低的样本,该过程不断重复,最终每个样本对应一个簇类。简单点说,拆分层次聚类是聚合层次聚类的反向算法,读者可通过树状图去加强理解,一个是自底向上的划分,一个是自顶向下的划分。
更多详细内容可参考文章:https://mp./s?src=11×tamp=1579049806&ver=2097&signature=dMqw*uVyGvimGlwnnjefqC6TTqTZk8VVlxTwXJi**muek6SSbNuGOlKWxXM4DEYtcDwuUVSur4XA7x6R4xTF51JZLeygx0gmgKuFs8-VTkRaba4v7d1jCtmY4h219Ztf&new=1
2.函数介绍
hclust()函数
在R语言中,用于实现层次聚类的函数是hclust(),其基本书写格式为:
hclust(d, method = "complete", members = NULL)
参数:
D:指定用于系统聚类的数据集样本间的距离矩阵,可以利用函数dist()计算得到;
method:指定用于聚类的算法,"ward.D"和"ward.D2"均表示采用ward离差平方和法, "single"表示最短距离法, "complete"表示最长距离法, "average" (= UPGMA)表示类平均法, "median" (= WPGMC) 表示中间距离,"centroid" (= UPGMC)表示重心法,默认值为complete。
members:取值为NULL或长度为d的向量,用于指定每个待聚类的小类别是由几个样本点组成的。
此外,我们还需要介绍几个相关函数:dist(),cutree()和rech.hclust()。
dist()是计算函数
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
参数介绍:
x:指定用于计算距离的数据对象,可以是矩阵、数据框或dist对象。
method:"euclidean"表示欧氏距离, "maximum"表示最大距离, "manhattan"表示绝对值距离, "canberra"表示兰氏距离, "binary"或 "minkowski"表示闵可夫斯基距离,默认值为"euclidean"。
diag:逻辑值,指定是否将距离矩阵的对角元素输出;
upper:逻辑值,指定是否将距离矩阵的上对角元素输出;
p:指定闵可夫斯基距离的范围。
cutree()函数
该函数用于将hcluster()的输出结果进行剪枝,最终得到指定类别的聚类结果,书写格式为:
cutree(tree, k = NULL, h = NULL)
参数介绍:
tree:指定函数hcluster()的聚类结果;
k:一个整数或向量,用于指定聚类的数目;
h:数字标量或向量,用于指定需要剪枝的树的高度。
3.分析实战
下面采用R语言中内置的数据集UScitiesD 进行操作演练,该数据收集了没过10个城市的距离。
data(UScitiesD)
UScitiesD
> class(UScitiesD)
[1] "dist"
> mds2
> plot(mds2, type="p",col=2, axes=FALSE, ann=FALSE)
> text(mds2, labels=rownames(mds2), xpd = NA)
>hcity.A "average") # "wrong"
>plot(hcity.A,col="#487AA1",col.main="#45ADA8",col.lab="#7C8071",col.axis="#F38630",lwd=3,lty=1,sub="",axes=FALSE,hang=-1
>axis(side=2,at=seq(0,8000,2000),col="#F38630",lwd=2,labels=FALSE)
>mtext(seq(0,8000,2000),side=2,at=seq(0,8000,2000),line=1,col="#A38630",las=2)
上面的代码第一条命令选用平均法进行聚类分析,后续代码将结果进行可视化。
此外,还可以利用包RcolorBrewer中的函数heatmap函数直观地观察样本与变量的聚类情况。
> library(RColorBrewer)
>heatmap(as.matrix(UScitiesD),col=brewer.pal(9,"RdYlGn"),scale="column",margins=c(4,8))
还可以利用ape包对聚类系谱图进行一定的改进。
> library(ape)
> mypal"#556270","#4ECDC4","#1B676B","#FF6B6B")
> hcity.D2 "ward.D2")
> clus4
> par(bg="#E8DDCB",mar=rep(2.4,4),cex=1.3)
>plot(as.phylo(hcity.D2),type="fan",edge.width=2,edge.color="darkgrey",tip.color=mypal[clus4])
数据库
GEO数据库使用教程及在线数据分析工具
TCGA数据库使用教程
oncomine数据库使用教程
KEGG数据库使用及通路分析教程
RNAhybrid数据库使用教程
starBase数据库使用教程
miRBase数据库使用教程
miRNA靶基因预测数据库TargetScan使用教程
转录因子预测数据库JASPAR使用教程
lncRNA研究相关数据库
R入门
R语言编程基础第一篇:语法基础
R绘图
R语言基础绘图教程——第1章:R语言常用的绘图系统
R语言基础绘图教程——第2章:散点图
R语言基础绘图教程——第3章:折线图和带状图
R语言基础绘图教程——第4章:面积图和饼图
R语言基础绘图教程——第5章:直方图和柱状图
R语言基础绘图教程——第6章:箱形图和韦恩图
R语言基础绘图教程——第7章:小提琴图
R语言基础绘图教程——第8章:3维散点图
R语言基础绘图教程——第9章:火山图和QQ图
TCGA
TCGA数据挖掘(一):TCGAbiolinks包介绍
TCGA数据挖掘(二):数据下载与整理
TCGA数据挖掘(三):表达差异分析
TCGA数据挖掘(四):表达差异分析(2)
TCGA数据挖掘(四):表达差异分析(3)
TCGA数据挖掘(五):miRNA差异分析
TCGA数据挖掘(六):WGCNA(加权基因共表达网络分析)
数据分析
R语言数据分析与挖掘(第一章):数据预处理(1)——缺失值处理
R语言数据分析与挖掘(第一章):数据预处理(2)——缺失值常用的处理方法
R语言数据分析与挖掘(第一章):数据预处理(3)——数据整理
R语言数据分析与挖掘(第二章):统计学基础(视频)
R语言数据分析与挖掘(第三章):R语言绘图基础
R语言数据分析与挖掘(第四章):回归分析(1)——一元回归分析
R语言数据分析与挖掘(第四章):回归分析(2)——多元线性回归
R语言数据分析与挖掘(第四章):回归分析(3)——变量的选择
R语言数据分析与挖掘(第四章):回归分析(4)——logistic回归
R语言数据分析与挖掘(第五章):方差分析(1)——单因素方差分析
R语言数据分析与挖掘(第五章):方差分析(2)——多因素方差分析
R语言数据分析与挖掘(第五章):方差分析(3)——协方差分析
R语言数据分析与挖掘(第六章):主成分分析(1)——主成分分析概论
R语言数据分析与挖掘(第六章):主成分分析(2)——案例讲解
R语言数据分析与挖掘(第七章):因子分析
R语言数据分析与挖掘(第八章):判别分析(1)——距离判别法
R语言数据分析与挖掘(第八章):判别分析(2)——贝叶斯(Bayes)判别分析
R语言数据分析与挖掘(第八章):判别分析(3)——费歇尔(Fisher)判别分析
医学知识
医学科研实验基础知识笔记(一):细胞增殖
医学科研实验基础知识笔记(二):细胞凋亡检测
医学科研实验基础知识笔记(三):细胞周期检测
医学科研实验基础知识笔记(四):细胞自噬研究策略
医学科研实验基础知识笔记(五):血管新生
医学科研实验基础知识笔记(六):细胞衰老
医学科研实验基础知识笔记(七):肿瘤耐药
医学科研实验基础知识笔记(八):磷酸化检测
医学科研实验基础知识笔记(九):泛素化研究方法
医学科研实验基础知识笔记(十):甲基化
医学科研实验基础知识笔记(十一):非编码RNA
文献阅读
第0期:零代码发了一篇5分纯生信的文章,值得借鉴学习
第1期:ER阳性乳腺癌患者中LLGL2通过促进亮氨酸摄取来缓解营养压力
第2期:肿瘤微环境
第3期(综述):PD-L1调节在癌症免疫治疗中的生化作用
第4期:挖掘TCGA数据库中对胶质母细胞瘤微环境预后有价值的基因
第5期:非小细胞肺癌靶向治疗应答的早期无创检测
第6期:CXCR3趋化因子系统在肿瘤内的活性是抗PD-1治 疗有效性的必要条件
第7期-与侵袭性甲状腺癌进展相关的基因组和转录组特征综合分析
第8期:RAS P21蛋白激活因子3通过抑制Th2细胞偏向性程序特异性促进致病性Th17细胞的生成
第9期:mTOR信号和细胞代谢是癌症的共同决定因素
第10期:一篇肿瘤领域入门必读综述——新一代癌症标志物
如果觉得《R循环有两个_R语言数据分析与挖掘(第九章):聚类分析(2)——层次聚类》对你有帮助,请点赞、收藏,并留下你的观点哦!