近日,在做蛋白数据分析的时候看到一篇文章,里面进行了表达趋势的分析。感觉很有用,举个例子,尤其是与时间发育或者疾病进程相关的表达谱,通过趋势分析可以找到一些规律,看出不同表达模式的基因是如何变化的,也方便自己对数据解读,寻找有意义的结果!
其实,之前有公司转录组数据的基本分析中会自带这项分析,但是后来不知怎么就基本不包含了。
不过无所谓,Mfuzz包就是专门做这个的。Mfuzz的原理可以简单的理解为聚类,相似表达趋势的基因聚到一起。接下来我们看看具体如何操作。
数据来源:自己创造的,无具体生物学意义,仅演示使用!
数据用的是表达矩阵,行名为基因,列名为样本
image.png
在做之前,输入的数据格式是每个基因在每个组的平均表达量,很显然,我们每组有四个重复。要么用Excel手动计算,那样太费劲,还是直接读入R中计算吧。不过需要受累手动添加一行label,转置一下:
image.png
然后入读数据,转置一下,并计算平均表达量
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)
计算完数据如下:
image.png
设置新行名
row.names(sample1)<-sample1[,1]
sample1<-data.frame(t(sample1[,-1]))
最终数据结构如下:
image.png
接着,开始进行具体分析,第一次使用,需要安装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)
image.png
如果想要到处每个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"))
}
结果还可以,如果需要的可以使用,分析看看!