R语言通路富集

library(ggplot2)
library(magrittr)
library(dplyr)
library(stringr)

options(stringsAsFactors = F)
options(as.is = T)


setwd('~/Desktop/kk_result20201101/')
导入数据
#df1 = read.table("GSE116174kk_down.txt",sep = '\t',header = T)
#df2 = read.table("GSE116174kk_up.txt",sep = '\t',header = T)
df3 = read.table("GSE14520kk_down.txt",sep = '\t',header = T)
df4 = read.table("GSE14520kk_up.txt",sep = '\t',header = T)
df5 = read.table("ICGCkk_down.txt",sep = '\t',header = T)
df6 = read.table("ICGCkk_up.txt",sep = '\t',header = T)
df7 = read.table("TCGAkk_down.txt",sep = '\t',header = T)
df8 = read.table("TCGAkk_up.txt",sep = '\t',header = T)

#df1$dataset = '6174dn'
#df2$dataset = '6174up'
df3$dataset = '14520dn'
df4$dataset = '14520up'

df5$dataset = 'icgcdn'
df6$dataset = 'icgcup'
df7$dataset = 'tcgadn'
df8$dataset = 'tcgaup'
分别提取上下调基因
合并数据,如果只有一套数据的话不要执行这个步骤
dfdn = NULL
#dfdn = rbind(dfdn,df1)
dfdn = rbind(dfdn,df3)
dfdn = rbind(dfdn,df5)
dfdn = rbind(dfdn,df7)
dfup = NULL
#dfup = rbind(dfup,df2)
dfup = rbind(dfup,df4)
dfup = rbind(dfup,df6)
dfup = rbind(dfup,df8)
筛选 FDR
fdr=0.05
dfdn = dfdn[which(dfdn$FDR<fdr),]
dfdn = dfdn[which(dfdn$Term %in% names(which(table(dfdn$Term) > 1))),]
dfdn$y = str_split(dfdn$Term,':',simplify = T)[,2]
dfdn$x = log10(dfdn$FDR)

dfup = dfup[which(dfup$FDR<fdr),]
dfup = dfup[which(dfup$Term %in% names(which(table(dfup$Term) > 1))),]
dfup$y = str_split(dfup$Term,':',simplify = T)[,2]
dfup$x = -log10(dfup$FDR)

dfdn$dir = 'dn'
dfup$dir = 'up'
将上下调数据合并
df = rbind(dfdn, dfup) %>% as.data.frame()

df$dataset1 = str_split(df$dataset,'up|dn',simplify = T)[,1]

label1 = df[order(df$dataset1,df$x),]
label1 = label1$y
label1 = label1[!duplicated(label1)]
ggplot(data=df,aes(x,y,fill =dir ))+
  scale_y_discrete(limits=label1)+
  geom_bar(stat="identity", color="black", position = 'dodge')+
  scale_fill_manual(values=c("#00AFBB", "#FC4E07"))+theme_bw()+
  facet_wrap(~dataset1)

image-20201109110636790


转载内容


差异分析的结果**

这个结果实际上已经通过counts函数获得了,我们不在担心,处理组和对照组完全相反这种情况,因为他内置了参数设定比较组。比如,我们有5个处理组,我们不需要做5次Deseq,我们在results中指定即可。

用summary这个函数,可以看到差异分析的结果,高表达和低表达的比例。低丰度基因所占的比例。

summary(dd2, alpha = 0.05)

img

再把差异分析的结果转化成data.frame的格式

library(dplyr)
library(tibble)
res <- dd2 %>% 
  data.frame() %>% 
  rownames_to_column("gene_id")

img

基因ID转换

以前我们从gtf文件转换的, 但是我们需要gtf文件来提取mRNA以及lncRNA,就顺手做了ID转换,而且,mRNA和lncRNA是分别做的Deseq2,这从原理上来讲,是有问题的,Deseq2矫正了测序的深度,而这个深度应该是所有基因算在一起的深度,不应该分开来算。
TGCA数据的标准化以及差异分析
用两个包来转换,得到ENTREZID用于后续分析,得到SYMBOL便于识别。

library(AnnotationDbi)
library(org.Hs.eg.db)
res$symbol <- mapIds(org.Hs.eg.db,
                     keys=res$gene_id,
                     column="SYMBOL",
                     keytype="ENSEMBL",
                     multiVals="first")
res$entrez <- mapIds(org.Hs.eg.db,
                     keys=res$gene_id,
                     column="ENTREZID",
                     keytype="ENSEMBL",
                     multiVals="first")

img

有了这个文件,里面有logFC,p值,还有基因名称,我们可以完成GO,KEGG,热图,火山图所有操作。这一部分内容参考
最有诚意的GEO数据库教程
这个帖子目前已经有接近4000次访问,这在我们这样一个小号是不容易的,靠的是真诚。

制作geneList

我们在那个帖子里面并没有讲GSEA分析,今天来展示一下。原理略过。我们这里还是用Y叔的神包clusterprofier,神包虽好,记得引用。

使用这个包做GSEA,要制作一个genelist,这个是一个向量,他的内容是排序后的logFC值,他的名称是ENTREZID,而这两个我们都是不缺的,在上一步得到的差异结果中。

library(dplyr)
gene_df <- res %>% 
  dplyr::select(gene_id,log2FoldChange,symbol,entrez) %>% 
  ## 去掉NA
  filter(entrez!="NA") %>% 
  ## 去掉重复
  distinct(entrez,.keep_all = T)

img

制作genelist的三部曲

## 1.获取基因logFC
geneList <- gene_df$log2FoldChange
## 2.命名
names(geneList) = gene_df$entrez
## 3.排序很重要
geneList = sort(geneList, decreasing = TRUE)

看一下这个genelist,增加感性的理解

head(geneList)

img

GSEA分析

完成KEGG的GSEA分析

library(clusterProfiler)
## 没有富集到任何数据
gseaKEGG <- gseKEGG(geneList     = geneList,
                    organism     = 'hsa',
                    nPerm        = 1000,
                    minGSSize    = 20,
                    pvalueCutoff = 0.05,
                    verbose      = FALSE)

作图展示富集分布图

library(ggplot2)
dotplot(gseaKEGG,showCategory=12,split=".sign")+facet_grid(~.sign)

img

这时候,我们看到有一些通路是被激活的,有一些通路是被抑制的。比如Cell cycle是被抑制的,我们可以选取单个通路来作图。

把富集的结果转换成data.frame,找到Cell cycle的通路ID是hsa04110

gseaKEGG_results <- gseaKEGG@result

img

使用gseaplot2把他画出来

library(enrichplot)
pathway.id = "hsa04110"
gseaplot2(gseaKEGG, 
          color = "red",
          geneSetID = pathway.id,
          pvalue_table = T)

img

也可以画出一个激活的

pathway.id = "hsa04060"
gseaplot2(gseaKEGG, 
          color = "red",
          geneSetID = pathway.id,
          pvalue_table = T)

img

pathview 展示

我们现在知道cell cycle是被抑制的,如果还想看一下这个通路里面的基因是如何变化的,应该怎么办呢,pathview 可以帮到我们。

library(pathview)
pathway.id = "hsa04110"
pv.out <- pathview(gene.data  = geneList,
                   pathway.id = pathway.id,
                   species    = "hsa")

img

改变一下参数,可以得到另外一种构图

library(pathview)
pathway.id = "hsa04110"
pv.out <- pathview(gene.data  = geneList,
                   pathway.id = pathway.id,
                   species    = "hsa",
                   kegg.native = F)

img

一眼看过去,都是绿的,说明这个通路确实是被抑制了,还可以在图上缕一缕,哪些是核心分子,一般说来,越往上游越核心。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值