library(limma)#加载差异分析包limma
#将分组文件加载到环境中,分组信息第一列为样本名,第二列为分组信息如“high”“low”
targets<-read.csv("group.csv")
#将表达矩阵加载到环境中,行为基因,列为样本,这里应该注意去除重复项。
eset<-read.csv("expreset-basal1.csv",row.names = "symbol")
targets$Target=gsub("_",".",targets$Target)##若数据中存在特殊符号,将"_"替换成“.”,也可以不替换
##该数据集中实际存在不符合R的命名原则,所以在没个分类前加一个“F”,具体自己定
targets$Target=c(paste0("F",c(targets$Target),collapse = NULL,sep=""))
colnames(targets)=c("FileName","Target")#更改列名,为了和limma包中的一致
lev<-unique(targets$Target)##使用unique()函数进行去重
f <- factor(targets$Target, levels=lev)
design <- model.matrix(~0+f)
colnames(design) <- lev
cont.wt <- makeContrasts("high-low",
+ levels=design)
fit <- lmFit(eset, design)#前面矩阵的row.name=“symbol”
fit2 <- contrasts.fit(fit, cont.wt)
fit2 <- eBayes(fit2)
tT=topTable(fit2, adjust="BH",sort.by="logFC",n=Inf)
tT = subset(tT, select=c("adj.P.Val","P.Value","logFC"))
colnames(tT)=c("FDR","P.Value","logFC")
write.csv(tT,"DEGbasal.csv")
#最后的tT就是得到的差异基因,其中包含基因,P.Value和logFC
用limma包,这里注意,limma包是对基因芯片表达矩阵的分析,不能对逆转录RNAseq表达矩阵进行分析(因为数据特征不同),RNAseq需要用另一种方法
解读此表
但是上面的用法做不到随心所欲的指定任意两组进行比较,所有还有下一种方法
处理好了分组信息,再自定义比较元素
自定义函数进行比较
热土和火山图都是傻瓜式的,只要的前面得出的deg数据(也就是基因差异表达数据)是正确的
这里使用的是Y叔的R包clustProfilter,里面有个函数bitr()
但是使用这种方法总是会有一些基因比对不上,就会有类似的warning
如果有更好的方法,欢迎大家一起探讨!