聚类分析有两种主要计算方法,分别是层次聚类和K均值聚类

一、层次聚类

层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近归为一类,较远则属于不同类。

可用于定义“距离”的统计量包括

1.欧氏距离(euclidean)

2.马氏距离(manhattan)

3.两项距离(binary)

4.明氏距离(minkowski)

还包括相关系数和夹角余弦

层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。

在计算类间距离时则有六种不同的方法,分别是 

1.最长距离法:complete 默认

2.最短距离法:single

3.中间距离法:median

4.类平均法:average

6.重心法:centroid

7.离差平方和法:ward

在这里我们先做出实例数据:

x=runif(20)

y=runif(20)

S=cbind(x,y)

rownames(S)=paste("Name",1:20,"")   #赋予名称

out.dist=dist(S,method="euclidean")    #数值变距离

这个代码运行得到的S是一个矩阵:

R语言进行聚类分析_Java

R语言进行聚类分析_Java_02

可以看出里面共有20个点,它们的X,Y坐标已知.

根据上面提到的6种求距离类型可知,我们有6种方法可以求矩阵。

我们用默认的算法求距离:

out.hclust=hclust(out.dist,method="complete")     #根据最长距离聚类

接下来把聚类结果图画出来

plot(out.hclust)                                                       #对结果画图

R语言进行聚类分析_Java_03

rect.hclust(out.hclust,k=3)                   #用矩形画出分为3类的区域

R语言进行聚类分析_Java_04

out.id=cutree(out.hclust,k=3)                 #得到分为3类的数值


R语言进行聚类分析_Java_05


二、K均值聚类 

K均值聚类又称为动态聚类,它的计算方法较为简单,也不需要输入距离矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计算各样本与类中心的距离并进行归类,所有样本划分完成后重新计算类中心,重复这个过程直到类中心不再变化。

R中使用 kmeans 函数进行K均值聚类,centers参数用来设置分类数,nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多次数可以改善聚类效果。model2$cluster可以用来提取每个样本所属类别。

下面用 iris 数据集进行聚类分析

 data=iris[,-5]

model2=kmeans(data,centers=3,nstart=10)

R语言进行聚类分析_Java_06




往期「精彩内容」,点击回顾

DNA测序历史 | CircRNA数据库 | Epigenie表观综合 | 癌症定位

BWA介绍  |  源码安装R包 | CancerLocator  | lme4 | 450K分析

乳腺癌异质性 |  BS-Seq  | 隐马模型 Circos安装 |  Circos画图

KEGG标记基因 |  GDSC  |  Meta分析  |   R线性回归和相关矩阵

精彩会议及课程,点击回顾

计算表观遗传学大数据前沿学术论坛会议记实

哈尔滨医科大学2017年全国生物信息学暑期学校 

2017龙星课程系列(一)

2017龙星课程系列(二)
2017龙星课程系列(三)

2017龙星课程系列(四)

2017龙星课程系列(五)