专栏名称: 生信百科
依托高校科研平台,面向生物信息科研工作者。生物信息学习资料;常见数据分析技巧、流程;公共数据库分享;科研思路分享;
目录
相关文章推荐
丁香园  ·  一夜之间,医院 10 ... ·  2 天前  
Clinic門诊新视野  ·  五战告捷 ... ·  3 天前  
丁香园  ·  拔一根鱼刺,这群中国医生竟然发了 SCI ·  4 天前  
51好读  ›  专栏  ›  生信百科

聚类利器--Mfuzz

生信百科  · 公众号  · 医学  · 2017-06-18 12:20

正文

Mfuzz是较有知名度的聚类R包,它采用的模糊均值算法是普通K-means算法的改进。普通K-means算法对于数据的划分是硬性的,让它聚成20个类,结果就会出现20个类。Mfuzz则是一种柔性的模糊划分,让它聚成20个类,结果可能是16个类,也可能是25个类。K-means的硬聚类把每个待辨识的对象严格地划分到某类中,具有非此即彼的性质。Mfuzz的模糊聚类建立了样本对类别的不确定性描述,会根据数据本身的特性来调节聚类结果,从而更有优势。脚本如下:

 

## 安装 ##

source("https://bioconductor.org/biocLite.R")

biocLite("Mfuzz")

 

## 输入数据 ##

library("Mfuzz")

rawdata读入csv文件

colnames(rawdata)=c("geneID","IR1","IR2","IR4","IR5","IR6")# 文件有6列,添加列名

gennames第一列是基因名字

rn

rownames(rawdata)=rn # 行名

rawdata

rawdata

eset

 

## 过滤数据 ##

mydata.r

mydata.f

tmp

mydata.s

# 根据我的经验,这一步可能产生新的NA,导致下面的步骤报错,解决方法之一就是重新# 运行上面的过滤步骤,把筛选参数变得更严格,尽量去掉噪音基因。

 

## 筛选聚类参数 ##

m

tmp

# 计算c值,即该数据应该聚多少类

# 如下图,X与红线分离的x轴,就是c值,(因为输入文件没有规律,下图未出现分离)




## 软聚类 ##

cl

mfuzz.plot2(mydata.s, cl = cl, mfrow =c(4,3), time.labels = c("IR1", "IR2", "IR4", "IR5", "IR6"), xlab="Period", ylab="Exp",colo="fancy", ax.col="red", col.sub = "blue", x11 = FALSE, col = "blue")

#聚类的结果太多,可能报错:画板太大,无法展示图片。

 

## 聚类细节 ##

cl[[4]][ ,1] # cluster 1的所有基因列表及其与该类的关系值

cl[[2]] # 每个cluster的基因数量

plot(cl[[1]][8,],type="l",ylab="Expression")# cluster 8的聚类中心及走势

 

# 下面的步骤是单独画某一cluster,(single=1:cluster 1)

mat

l

mfuzz.plot2(mydata.s,cl=cl,mfrow=NA,colo="fancy",ax.col=1,col="blue",cex.main=2,single=1,x11=FALSE,time.labels=c("IR1","IR2","IR4","IR5","IR6"))

mfuzzColorBar(col="fancy",main="Membership",cex.main=1)

#


Mfuzz需要两个参数:聚类数目c和参数m。一般来讲C要远远小于聚类样本的总个数,同时要保证C>1。对于m,它是一个控制算法的柔性的参数,如果m过大,则聚类效果会很次,而如果m过小则算法会接近硬聚类算法。参数m又称为平滑因子,控制着模式在模糊类间的分享程度,因此要实现模糊聚类就必须选定一个合适的 m值。