DESeq找差异基因+火山图
2018-08-18 本文已影响69人
PriscillaBai
一 DESeq
DESeq的原理是什么以后会慢慢补坑,这次先上代码.
此次用的是TCGA的肝癌数据
liver_gly
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的筛选出来
你也可以用padjust,是用过本杰明矫正,更加严厉,但是数据质量也会更好
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()