前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >差异分析及功能注释(下)

差异分析及功能注释(下)

作者头像
生信技能树jimmy
发布2020-03-30 14:55:01
1.6K0
发布2020-03-30 14:55:01
举报
文章被收录于专栏:单细胞天地单细胞天地
回顾

差异分析及功能注释(上)

3 差异基因功能注释

差异基因得到的方法有很多,例如DESeq2、EdgeR、Wilcox、SCDE等等,真正有意义的差异基因,即使使用不同的方法,最后结果也不会相差太多

有了差异基因,然后就是去注释

3.1 先对monocle的结果进行注释
代码语言:javascript
复制
rm(list=ls())
options(stringsAsFactors = F)
library(clusterProfiler)

load(file = 'step3.1-DEG-monocle_summary.Rdata')
得到差异基因名
代码语言:javascript
复制
de_genes <- subset(de_clusters, qval<0.05)
> length(de_genes$genes)
[1] 4435
然后基因ID转换
代码语言:javascript
复制
entrez_genes <- bitr(de_genes$genes, fromType="SYMBOL", 
                     toType="ENTREZID", 
                     OrgDb="org.Mm.eg.db")
作者剔除掉一个基因名
代码语言:javascript
复制
entrez_genes <- entrez_genes[!entrez_genes$ENTREZID %in% "101055843",]
> length(entrez_genes$SYMBOL)
[1] 4281

因为有一些de_genes的SYMBOL没有对应的ENTREZID,因此看到少了100多个基因。

然后,把存在ENTREZID的那些基因的基因名和cluster信息提取出来
代码语言:javascript
复制
de_gene_clusters <- de_genes[de_genes$genes %in% entrez_genes$SYMBOL,
                             c("genes", "cluster")]
# 保持de_gene_clusters$genes的顺序不变,将他的symbol变成entrez ID
de_gene_clusters <- data.frame(
  ENTREZID=entrez_genes$ENTREZID[entrez_genes$SYMBOL %in% de_gene_clusters$genes],
  cluster=de_gene_clusters$cluster
)
将差异基因对应到每个cluster

也就是拆分成4个cluster组成的列表

代码语言:javascript
复制
list_de_gene_clusters <- split(de_gene_clusters$ENTREZID, 
                               de_gene_clusters$cluster)
然后可以将4个cluster同时进行GO注释,并且放在一起(耗时!)
代码语言:javascript
复制
formula_res <- compareCluster(
  ENTREZID~cluster, 
  data=de_gene_clusters, 
  fun="enrichGO", 
  OrgDb="org.Mm.eg.db",
  ont           = "BP",
  pAdjustMethod = "BH",
  pvalueCutoff  = 0.01,
  qvalueCutoff  = 0.05
)
# org.Mm.eg.db更新于2019年4月

# 可视化
pdf('DEG_GO_each_cluster.pdf',width = 11,height = 6)
dotplot(formula_res, showCategory=5)
dev.off()
简化GO注释结果

The simplified version of enriched result is more clear and give us a more comprehensive view of the whole story https://guangchuangyu.github.io/2015/10/use-simplify-to-remove-redundancy-of-enriched-go-terms/

代码语言:javascript
复制
start_time <- Sys.time()
lineage1_ego <- simplify(
  formula_res, 
  cutoff=0.5, 
  by="p.adjust", 
  select_fun=min
)
end_time <- Sys.time()
(end_time - start_time)
# Time difference of 1.588762 mins

pdf('DEG_GO_each_cluster_simplified.pdf',width = 11,height = 6)
dotplot(lineage1_ego, showCategory=5)
dev.off()
保存结果
代码语言:javascript
复制
write.csv(formula_res@compareClusterResult, 
          file="DEG_GO_each_cluster.csv")
# 简化版本
write.csv(lineage1_ego@compareClusterResult, 
          file="DEG_GO_each_cluster_simplified.csv")
这几个数字需要好好了解一下

看第一行:背景基因是20000多个,其中属于这个GO通路的有256个基因;然后C1这个cluster这里总共得到的差异基因是1236个,其中属于这个GO通路的是66

4 以第一个GO:0140014为例,进行探索

首先获得GO:0140014中的基因 =》 256个
代码语言:javascript
复制
library(org.Mm.eg.db)
# 结果有3百多万个
go2gene <- toTable(org.Mm.egGO2ALLEGS)

其实看到里面的基因ID存在重复,一个go_id会对应多个同样的gene_id,那么就要去重复,获取unique gene id

代码语言:javascript
复制
uni_gene <- unique(go2gene$gene_id[go2gene$go_id == 'GO:0140014'])
> length(uni_gene)
[1] 256

结果和?的BgRatio中记录的一致

然后拿到第一群的差异基因 =》 1284个
代码语言:javascript
复制
c1_genes <- list_de_gene_clusters[['C1']]
> length(c1_genes)
[1] 1284

这里的1284比之前的1236多个几十个,说明存在几十个基因没有GO注释

找Cluster1在GO:0140014中的基因 =》 66个

其实就是找c1_genesgo2gene的交叉

代码语言:javascript
复制
overlap_genes <- intersect(c1_genes,uni_gene)
> length(overlap_genes)
[1] 66

也就是对应上面GO通路的66个基因


5 差异分析结果画热图

Monocle的结果会用到上一篇的 1.6 用包装好的pheatmap画热图 的代码

ROST的结果进行差异分析
导入数据
代码语言:javascript
复制
rm(list = ls()) 
options(warn=-1) 
options(stringsAsFactors = F)
source("../analysis_functions.R")

# 加载RPKM表达矩阵
load('../female_rpkm.Rdata')
# 加载ROTS 的差异分析结果
load('DEG-ROTS_summary.Rdata')
head(summary_pop1)
head(summary_pop2)
head(summary_pop3)
head(summary_pop4)

# 6个发育时期获取
head(colnames(females))
female_stages <- sapply(strsplit(colnames(females), "_"), `[`, 1)
names(females) <- colnames(females)
table(female_stages)
# 4个cluster获取
cluster <- read.csv('female_clustering.csv')
female_clustering=cluster[,2];names(female_clustering)=cluster[,1]
table(female_clustering)

RPKM.full=females
每个群挑选各自的top18的差异基因绘制热图
代码语言:javascript
复制
population_subset<-c(rownames(summary_pop1[summary_pop1$ROTS.statistic<0,])[1:18],
                     rownames(summary_pop2[summary_pop2$ROTS.statistic<0,])[1:18],
                     rownames(summary_pop3[summary_pop3$ROTS.statistic<0,])[1:18],
                     rownames(summary_pop4[summary_pop4$ROTS.statistic<0,])[1:18])

总共得到了72个基因,然后取出

代码语言:javascript
复制
RPKM_heatmap<-RPKM.full[population_subset,]

将小表达矩阵的列名重新按照4个cluster排序,并且log转换

代码语言:javascript
复制
RPKM_heatmap<-RPKM_heatmap[,order(female_clustering)]
RPKM_heatmap<-log2(RPKM_heatmap+1)

每个群赋予不同颜色

代码语言:javascript
复制
popul.col<-sort(female_clustering);table(popul.col)
popul.col<-replace(popul.col, popul.col=='C1',"#1C86EE" )
popul.col<-replace(popul.col, popul.col=='C2',"#00EE00" )
popul.col<-replace(popul.col, popul.col=='C3',"#FF9912" )
popul.col<-replace(popul.col, popul.col=='C4',"#FF3E96" )

画图

代码语言:javascript
复制
library(gplots)
png("ROST-DEG-heatmap.png")
heatmap.2(as.matrix(RPKM_heatmap),
          ColSideColors = as.character(popul.col), tracecol = NA, 
          dendrogram = "none",col=bluered, labCol = FALSE, 
          scale="none", key = TRUE, symkey = F, symm=F,  key.xlab = "", 
          key.ylab = "", density.info = "density", 
          key.title = "log2(RPKM+1)", keysize = 1.2, denscol="black", Colv=FALSE)
dev.off()

6 两种差异分析方法结果比较

首先还是加载它们的结果
代码语言:javascript
复制
rm(list=ls())
options(stringsAsFactors = F)

load(file = 'DEG-monocle_summary.Rdata')
load(file = 'DEG-ROTS_summary.Rdata')

# monocle差异基因
mnc_DEG <- subset(de_clusters, qval<0.05)
# ROTS差异基因
head(summary_pop1)
head(summary_pop2)
head(summary_pop3)
head(summary_pop4)
对第一群比较
代码语言:javascript
复制
g1=rownames(summary_pop1[summary_pop1$FDR>0.05,])
g2=rownames(mnc_DEG[mnc_DEG$cluster=='C1',])
> length(intersect(g1,g2));length(g1);length(g2)
[1] 194
[1] 7006
[1] 1319

看到ROTS得到了7006个差异基因,monocle得到1319个,它们共有194个。就数字来讲,ROTS挑选的有些”粗糙“,一般差异基因都不会挑选太多

代码语言:javascript
复制
## 对第二群比较
g1=rownames(summary_pop2[summary_pop2$FDR>0.05,])
g2=rownames(mnc_DEG[mnc_DEG$cluster=='C2',])
> length(intersect(g1,g2));length(g1);length(g2)
[1] 620
[1] 7015
[1] 1100
# 第二群,二者的重叠度较高

## 对第三群比较
g1=rownames(summary_pop3[summary_pop3$FDR>0.05,])
g2=rownames(mnc_DEG[mnc_DEG$cluster=='C3',])
> length(intersect(g1,g2));length(g1);length(g2)
[1] 205
[1] 7909
[1] 1129

## 对第四群比较
g1=rownames(summary_pop2[summary_pop2$FDR>0.05,])
g2=rownames(mnc_DEG[mnc_DEG$cluster=='C2',])
> length(intersect(g1,g2));length(g1);length(g2)
[1] 620
[1] 7015
[1] 1100
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 差异分析及功能注释(上)
  • 3 差异基因功能注释
    • 3.1 先对monocle的结果进行注释
      • 得到差异基因名
      • 然后基因ID转换
      • 作者剔除掉一个基因名
      • 然后,把存在ENTREZID的那些基因的基因名和cluster信息提取出来
      • 将差异基因对应到每个cluster
      • 然后可以将4个cluster同时进行GO注释,并且放在一起(耗时!)
      • 简化GO注释结果
      • 保存结果
      • 这几个数字需要好好了解一下
      • 首先获得GO:0140014中的基因 =》 256个
      • 然后拿到第一群的差异基因 =》 1284个
      • 找Cluster1在GO:0140014中的基因 =》 66个
  • 4 以第一个GO:0140014为例,进行探索
  • 5 差异分析结果画热图
    • ROST的结果进行差异分析
      • 导入数据
      • 每个群挑选各自的top18的差异基因绘制热图
      • 首先还是加载它们的结果
      • 对第一群比较
  • 6 两种差异分析方法结果比较
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档