DESeq找差异基因+火山图

一 DESeq

DESeq的原理是什么以后会慢慢补坑,这次先上代码.

DESeq必须用count数据!!!

整理出表达矩阵,第一列为基因名,后面为count值。

library(DESeq2)
##要求对象必须是矩阵
liver_gly<-as.matrix(liver_gly)
rownames(liver_gly)<-liver_gly[,1]
#表达值矩阵
exp=liver_gly[,2:ncol(liver_gly)]
##将基因名和样本名做成一个列表
dimnames=list(rownames(exp),colnames(liver_gly)[-1])
data=matrix(as.numeric(as.matrix(exp)),nrow = nrow(exp),dimnames = dimnames)
#相同的行取平均值
data=avereps(data)
#这个包要求表达值必须为整数
data=round(data,0)
##设计分组信息
design=as.factor(colnames(liver_gly)[-1])
##构建主程序
dds<-DESeqDataSetFromMatrix(data,DataFrame(design),design = ~design)
dds<-DESeq(dds,fitType = "local") ## or mean
res<-as.data.frame(results(dds))
res
接下来,把fold change >2 <0.5 同时 P<0.05的筛选出来,一般建议选择p adjust值,这样会降低假阳性。
library(dplyr)
res<-cbind(rownames(res),res)
res_liver<-res %>% dplyr::filter((log2FoldChange>1 | log2FoldChange < (-1)) & padj < 0.05)

二 火山图

library("labeling")
library(ggplot2)
#将符合要求的筛出来
threshold<-as.factor(
  (res$log2FoldChange>1|res$log2FoldChange<(-1) & 
     res$pvalue<0.05 ))
pdf("/Users/baiyunfan/desktop/liver.pdf")
ggplot(res,aes(x= log2FoldChange,
          y= -1*log10(res$pval),colour=threshold))+xlab("log2 fold-change")+ylab("-log10 p-value")+geom_point() 
dev.off()

推荐阅读更多精彩内容