近日,在做蛋白数据分析的时候看到一篇文章,里面进行了表达趋势的分析。感觉很有用,举个例子,尤其是与时间发育或者疾病进程相关的表达谱,通过趋势分析可以找到一些规律,看出不同表达模式的基因是如何变化的,也方便自己对数据解读,寻找有意义的结果! 其实,之前有公司转录组数据的基本分析中会自带这项分析,但是后来不知怎么就基本不包含了。 不过无所谓,Mfuzz包就是专门做这个的。Mfuzz的原理可以简单的理解为聚类,相似表达趋势的基因聚到一起。接下来我们看看具体如何操作。 数据来源:自己创造的,无具体生物学意义,仅演示使用! 数据用的是表达矩阵,行名为基因,列名为样本 在做之前,输入的数据格式是每个基因在每个组的平均表达量,很显然,我们每组有四个重复。要么用Excel手动计算,那样太费劲,还是直接读入R中计算吧。不过需要受累手动添加一行label,转置一下: 然后入读数据,转置一下,并计算平均表达量 setwd("C:/Users/Desktop") sample <- read.csv("sample.csv", row.names = 1) 求平均值用aggregate函数 dim(sample) #[1] 16 12399 sample1<-aggregate(sample[,2:12399],by=list(sample$label),mean,na.rm= TRUE) 计算完数据如下: 设置新行名 row.names(sample1)<-sample1[,1] sample1<-data.frame(t(sample1[,-1])) 最终数据结构如下: 接着,开始进行具体分析,第一次使用,需要安装Mfuzz包 BiocManager::install("Mfuzz") library("Mfuzz") library(Mfuzz) 构建对象 sample1<-as.matrix(sample1) sample1<- ExpressionSet(assayData = sample1) 处理缺失值和异常值 sample1 <- filter.NA(sample1, thres = 0.25)#排除超过25%的测量缺失的基因 sample1 <- fill.NA(sample1, mode = 'mean') sample1 <- filter.std(sample1, min.std = 0) 标准化处理 sample1 <- standardise(sample1) 设置随机种子,设置需要展示的cluster的数量,然后聚类 set.seed(123) cluster_num <- 10 sample1_cluster <- mfuzz(sample1, c = cluster_num, m = mestimate(sample1)) 画图,具体的参数调整,颜色,坐标轴等等详情访问?Mfuzz了解 mfuzz.plot2(sample1, cl = sample1_cluster, mfrow = c(2, 5), time.labels = colnames(sample1),centre=TRUE,x11=F) 效果如下: 如果想要到处每个cluster中具体的基因,使用下述代码批量导出 dir.create(path="mfuzz",recursive = TRUE) for(i in 1:10){ potname<-names(sample1_cluster$cluster[unname(sample1_cluster$cluster)==i]) write.csv(sample1_cluster[[4]][potname,i],paste0("mfuzz","/mfuzz_",i,".csv")) } 结果还可以,如果需要的可以使用,分析看看! |
|