DESeq2+clusterProfiler使用流程(以玉米B73_v3数据为例)

DESeq2+clusterProfiler使用

读取featureCounts的reads统计结果,存储与countData矩阵中

library(ggplot2)
library(DESeq2)
library(RColorBrewer)
library(pheatmap)
require(AnnotationHub)
require(clusterProfiler)
data<-read.table("./read_counts.out",  #读取featurecounts的计算结果
                   quote = "\t",skip = 1,header = TRUE)#如果第一行或者前几行不要的话,可以用skip参数
countData<-as.matrix(data[7:12]) # data的第7-12列为6个样品的reads 数信息,将其读入一个新的矩阵
sampleNames<-c("mut_1","mut_2","mut_3","WT_1","WT_2","WT_3")  #将不同样品的名称读入一个数组,与featurecount结果一一对应
colnames(countData)=sampleNames   #设置表达量矩阵的列名
rownames(countData)<-data$Geneid #设置表达量矩阵的行名

设置样品信息列表

#设置样品信息ColData
#样本信息colData,每一行对应一个样本,行名与countData的样本顺序一一对应,列为各种分组信息
#       name condition
#mut_1 mut_1       mut
#mut_2 mut_2       mut
#mut_3 mut_3       mut
#WT_1   WT_1        WT
#WT_2   WT_2        WT
#WT_3   WT_3        WT
database<-data.frame(name=sampleNames, condition=factor(c("mut","mut","mut","WT","WT","WT")))
rownames(database)<-sampleNames
#创建一个DESeq2Dataset对象
dds<-DESeqDataSetFromMatrix(countData,colData = database,design = ~condition)
#差异表达分析
dds<-DESeq(dds)
#该步骤可以分步进行
# dds<- estimateSizeFactors(dds) 
# dds <- estimateDispersions(dds) 
# dds <- nbinomWaldTest(dds) 

计算不同样品间的重复一致性

ddCor<-cor(countData, method="pearson")
pheatmap(ddCor)
ddCor_g<-pheatmap(ddCor,display_numbers = TRUE)
ggsave("Pearson_correlation_coefficient.png", ddCor_g,width = 16, height = 9, units = "in", dpi = 600)

计算不同样品间的距离

rld <- rlog(object=dds,blind=F)
sampleDist <- dist(t(assay(rld)))
sampleDistMatrix <- as.matrix(sampleDist)  #样品间距离的矩阵
rownames(sampleDistMatrix) <- paste0(rld$condition,"-", c(1,2,3))
colnames(sampleDistMatrix) <- rownames(sampleDistMatrix)
head(sampleDistMatrix)  #样品间距离的数据
colors <- colorRampPalette(rev(brewer.pal(9,"Spectral")))(255)
Distance_among_samples<-pheatmap(sampleDistMatrix,
clustering_distance_rows=sampleDist,
clustering_distance_cols=sampleDist,
color = colors)
ggsave("Distance_among_samples.png",Distance_among_samples, width = 16, height = 9, units = "in", dpi = 600) 

进行PCA分析

vsd <- vst(object=dds,blind=T)
mdsdata <- data.frame(cmdscale(sampleDistMatrix))
#cmdscale(classical multidimensional scaling)
mdsdata  #返回MDS的坐标
mds <- cbind(mdsdata,as.data.frame(colData(vsd)))
mds  #按列合并
g_PCA=ggplot(data=mds,aes(X1,X2,color=condition)) +geom_point(size=3)+xlab("PC1") +ylab("PC2")
ggsave("PCA.png",g_PCA, width = 16, height = 9, units = "in", dpi = 600) 

获得差异表达分析结果

result<-results(dds,contrast = c("condition","mut","WT")) #比较两组,后面的是对照
summary(result)# 结果分析

DESeq 差异表达基因分析及绘图

DEG<-na.omit(result) #去除表达量中的NA值
data_DEG<-as.data.frame(DEG) #将表达量矩阵转化为数据框
data_DEG$change = as.factor(ifelse(data_DEG$padj < 0.01 & abs(data_DEG$log2FoldChange) > 1,ifelse(data_DEG$log2FoldChange > 1 ,'UP','DOWN'),'STABLE'))

this_tile <- paste0('Cutoff for log2FC is ',"1",
                    '\nThe number of up gene is ',nrow(data_DEG[data_DEG$change =='UP',]) ,
                    '\nThe number of down gene is ',nrow(DEG[data_DEG$change =='DOWN',]))  

g <- ggplot(data=data_DEG, aes(x=log2FoldChange, y=-log10(padj),color=change))+
  geom_point(shape = 16, size=2)+
  theme_set(theme_set(theme_bw(base_size=20))) +
  xlab("log2 fold change") + 
  ylab("-log10 p-value") +theme(plot.title = element_text(size=15,hjust = 0.5)) +
  theme_classic()+
  scale_colour_manual(values = c('green','grey','red'))+ggtitle(this_tile)+geom_vline(xintercept = c(-1, 1), lty = 3, color = 'black') + #添加阈值线
  
  geom_hline(yintercept = 2, lty = 3, color = 'black') 
  #xlim(-12, 12) #+ ylim(0, 35) #定义刻度边界
#保存火山图为pdf文件
ggsave("Volcano_Plots.pdf",g,
useDingbats = FALSE, width = 16, height = 9, units = "in", dpi = 600) 
ggsave("Volcano_Plots.png",g,width = 16, height = 9, units = "in", dpi = 600) 

#也可用其他函数
#pdf(“Volcano_Plots.pdf", bg = "white")
#g
#dev.off()
#保存火山图为png格式图片
#png(“Volcano_Plots.png", bg = "white")
#g
#dev.off()

输出上调及下调表达基因

#设置差异表达的阈值为,padj<0.01,上调或下调2倍以上
up_diff_gene_deseq2 <-subset(data_DEG, padj < 0.01 & log2FoldChange > 1) 
write.csv(up_diff_gene_deseq2,file= "up_DESeq2_diffExpression.csv")
down_diff_gene_deseq2 <-subset(data_DEG, padj < 0.01 & log2FoldChange < -1) 
write.csv(down_diff_gene_deseq2,file= "down_DESeq2_diffExpression.csv")
gene_deseq2 <-subset(data_DEG, padj < 0.01 & abs(log2FoldChange) > 1)
write.csv(gene_deseq2,file= "All_DESeq2_diffExpression.csv")

GO及KEGG分析

hub<-AnnotationHub::AnnotationHub()
query(hub, "zea")
maize<-hub[["AH93894"]]
# 将基因编号转化为ENTREZID,v3版本,其余版本需要自己进行blast2GO,构建数据库信息
data_gene_for_GO<-bitr(rownames(gene_deseq2),fromType = "ALIAS",toType = "ENTREZID",OrgDb = maize)
#进行Go enrichment 分析
#生物过程(Biological Process)
erich.go.BP <- enrichGO(gene=data_gene_for_GO$ENTREZID,OrgDb = maize,pvalueCutoff = 0.01,qvalueCutoff = 0.01,readable = T,ont = "BP")
g_BP<-barplot(erich.go.BP,showCategory = 15)
ggsave("GO_BP.png",g_BP, width = 16, height = 9, units = "in", dpi = 600)
# 分子功能(Molecular Function)
erich.go.mf <- enrichGO(gene=data_gene_for_GO$ENTREZID,OrgDb = maize,pvalueCutoff = 0.01,qvalueCutoff = 0.01,readable = T,ont = "MF")
g_MF<-barplot(erich.go.mf,showCategory = 15)
ggsave("GO_MF.png",g_MF, width = 16, height = 9, units = "in", dpi = 600)
# 细胞组成(Cellular Component)
erich.go.cc <- enrichGO(gene=data_gene_for_GO$ENTREZID,OrgDb = maize,pvalueCutoff = 0.01,qvalueCutoff = 0.01,readable = T,ont = "CC")
g_CC<-barplot(erich.go.cc,showCategory = 15)
ggsave("GO_CC.png",g_CC, width = 16, height = 9, units = "in", dpi = 600)
# 进行KEGG分析
ekk<-enrichKEGG(gene = data_gene_for_GO$ENTREZID, organism = "zma", pAdjustMethod = "BH", pvalueCutoff = 0.01)
g_ekk<-dotplot(ekk)
ggsave("KEGG.png", g_ekk,width = 16, height = 9, units = "in", dpi = 600)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容