首页
学习
活动
专区
圈层
工具
发布
33 篇文章
1
CellChat三部曲1:使用CellChat对单个数据集进行细胞间通讯分析
2
CellChat三部曲2:使用CellChat 对多个数据集细胞通讯进行比较分析
3
CellChat 三部曲3:具有不同细胞类型成分的多个数据集的细胞通讯比较分析
4
多个单细胞亚群合并
5
如何读取单细胞数据
6
纯生信单细胞数据挖掘-全代码放送
7
单细胞测序流程(单细胞rna测序)
8
单细胞亚群比例变化和表达量差异分析
9
生信中各种ID转换
10
单细胞功能注释和富集分析(GO、KEGG、GSEA)(2021公开课配套笔记)
11
细胞亚群的生物学命名
12
scRNA包学习Monocle2
13
单细胞转录组基础分析六:伪时间分析
14
Seurat包的findmarkers函数只能根据划分好的亚群进行差异分析吗
15
​cytoscape的十大插件之二--MCODE插件
16
从零到壹:Cytoscape插件使用心得~MCODE篇
17
cytoscape的cytohubba及MCODE插件寻找子网络hub基因
18
上下调基因各自独立进行GO数据库的3分类富集(求美图代码)
19
拟时序分析的热图提取基因问题
20
单细胞亚群合并与提取(2021公开课配套笔记)
21
单细胞转录组之Seurat包全流程-数据过滤、降维分群及可视化
22
CellChat细胞通讯(二)可视化篇
23
GWAS全基因组关联分析流程(BWA+samtools+gatk+Plink+Admixture+Tassel)
24
WGCNA分析,简单全面的最新教程(在线做,但也需要懂原理)
25
统计遗传学:第九章,GWAS+群体分析+亲缘关系分析
26
干货:把知识经验整理为电子书
27
如何在箱线图添加显著性--代码分享
28
ANNOVAR 软件用法还可以更复杂
29
3DSNP 数据库 | 注释 SNP 信息
30
使用FUSION进行TWAS分析
31
R包”gwasrapidd”------快速获取GWAS Catalog数据库的信息
32
连锁不平衡小工具-----LDlink的使用教程
33
🤩 CMplot | 完美复刻Nature上的曼哈顿图(一)
清单首页生信文章详情

上下调基因各自独立进行GO数据库的3分类富集(求美图代码)

火山图大家应该是也基本上都没有问题,下面的MA图其实跟火山图非常的类似,两者都是log2FC信息,不同的是火山图展现P值,而MA图展现的是表达量情况!

  • 火山图是为了说明log2FC比较大的一般来说具有统计学显著性
  • 而MA图是为了说明log2FC无论大小,都不应该与表达量有相关性。

我们通常呢,挑选差异基因,会选择那些log2FC比较大而且具有统计学显著性的上下调基因,不过加上MA图,就可以进一步挑选那些表达量也比较高的,因为这样的基因呢,容易去实验验证。而且呢,通常情况下常识会告诉我们高表达量基因更容易发挥作用。

MA图加上GO数据库富集

图例:

  • (C) Differential gene expression between primary polyp calicoblasts and adult colony calicoblasts. Significant genes are shown in purple (adjusted p value <1e5, Fisher exact test).
  • (D) Gene Ontology analysis for differentially expressed genes between polyp and adult calicoblasts.

当然了,也可以对kegg进行同样的分析,上下调基因独立进行富集注释:

文献超级漂亮的kegg图

来源文献:Liu et al. J Hematol Oncol (2021) 14:6 https://doi.org/10.1186/s13045-020-01021-x ,不过要画出上面的图还是有一点难度的, 如果你一直看的是我的代码,你会发现出图简直是不忍直视:

我的kegg图

我的代码是:

代码语言:javascript
代码运行次数:0
复制
## KEGG pathway analysis
### 做KEGG数据集超几何分布检验分析,重点在结果的可视化及生物学意义的理解。
if(T){
  ###   over-representation test
  kk.up <- enrichKEGG(gene         = gene_up,
                      organism     = 'hsa',
                      universe     = gene_all,
                      pvalueCutoff = 0.9,#根据实际情况调整
                      qvalueCutoff =0.9)#根据实际情况调整
  head(kk.up)[,1:6]
  dotplot(kk.up );ggsave('kk.up.dotplot.png')
  kk.down <- enrichKEGG(gene         =  gene_down,
                        organism     = 'hsa',
                        universe     = gene_all,
                        pvalueCutoff = 0.9,#根据实际情况调整
                        qvalueCutoff =0.9)#根据实际情况调整
  head(kk.down)[,1:6]
  dotplot(kk.down );ggsave('kk.down.dotplot.png')
  kk.diff <- enrichKEGG(gene         = gene_diff,
                        organism     = 'hsa',
                        pvalueCutoff = 0.05)#根据实际情况调整
  head(kk.diff)[,1:6]
  dotplot(kk.diff );ggsave('kk.diff.dotplot.png')
  
  kegg_diff_dt <- as.data.frame(kk.diff)
  kegg_down_dt <- as.data.frame(kk.down)
  kegg_up_dt <- as.data.frame(kk.up)
  down_kegg<-kegg_down_dt[kegg_down_dt$pvalue<0.05,];down_kegg$group=-1
  up_kegg<-kegg_up_dt[kegg_up_dt$pvalue<0.05,];up_kegg$group=1
  ## 原来的画图函数
  source('functions.R') 
  g_kegg=kegg_plot(up_kegg,down_kegg)
  print(g_kegg)
  
  ggsave(g_kegg,filename = 'kegg_up_down.png')
  
  ###  GSEA 
  kk_gse <- gseKEGG(geneList     = geneList,
                    organism     = 'hsa',
                    nPerm        = 1000,#根据实际情况调整
                    minGSSize    = 10,#根据实际情况调整
                    pvalueCutoff = 0.9,##根据实际情况调整
                    verbose      = FALSE)
  head(kk_gse)[,1:6]
  gseaplot(kk_gse, geneSetID = rownames(kk_gse[1,]))
  
  down_kegg<-kk_gse[kk_gse$pvalue<0.05 & kk_gse$enrichmentScore < 0,];down_kegg$group=-1
  up_kegg<-kk_gse[kk_gse$pvalue<0.05 & kk_gse$enrichmentScore > 0,];up_kegg$group=1
  
  g_kegg=kegg_plot(up_kegg,down_kegg)
  print(g_kegg)
  ggsave(g_kegg,filename = 'kegg_up_down_gsea.png')
  
  
}

然后很久以前的一个学徒:

代码语言:javascript
代码运行次数:0
复制

### Update: Xiaojie Liang
### Date: 2021-07-12 23:38:07
### Email: liangxiaojiecom@163.com
### ---------------
library(ggthemes)
library(ggplot2)
go.kegg_plot <- function(up.data,down.data){
  # up.data <- up.data
  # down.data <- down.data
  dat=rbind(up.data,down.data)
  colnames(dat)
  dat$p.adjust = -log10(dat$p.adjust)
  dat$p.adjust=dat$p.adjust*dat$group 
  
  dat=dat[order(dat$p.adjust,decreasing = F),]
  
  gk_plot <- ggplot(dat,aes(reorder(Description, p.adjust), y=p.adjust)) +
    geom_bar(aes(fill=factor((p.adjust>0)+1)),stat="identity", width=0.7, position=position_dodge(0.7)) +
    coord_flip() +
    scale_fill_manual(values=c("#0072B2", "#B20072"), guide=FALSE) +
    labs(x="", y="" ) +
    theme_pander()  +
    theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          #axis.ticks.x = element_blank(),
          axis.line.x = element_line(size = 0.3, colour = "black"),#x轴连线
          axis.ticks.length.x = unit(-0.20, "cm"),#修改x轴刻度的高度,负号表示向上
          axis.text.x = element_text(margin = margin(t = 0.3, unit = "cm")),##线与数字不要重叠
          axis.ticks.x = element_line(colour = "black",size = 0.3) ,#修改x轴刻度的线                         
          axis.ticks.y = element_blank(),
          axis.text.y  = element_text(hjust=0),
          panel.background = element_rect(fill=NULL, colour = 'white')
    )
}

效果如下:

学徒的kegg图

啊,扯远了,我们这个教程其实是想征集大家的代码,关于上下调基因各自独立进行GO数据库的3分类富集后的可视化:

首先进行上下调基因的ID转换

前面的表达量矩阵差异分析代码我这里就不再赘述啦,我们分析已经拿到了 gene_up 和 gene_down 这两个变量(简单的向量而已)代表的上下调差异基因哦!

代码语言:javascript
代码运行次数:0
复制
library(org.Hs.eg.db)
#把SYMBOL转换ENTREZID,这里会损失一部分无法匹配到的
gene_up=as.character(na.omit(AnnotationDbi::select(org.Hs.eg.db,
                                    keys = gene_up,
                                    columns = 'ENTREZID',
                                    keytype = 'SYMBOL')[,2]))
gene_down=as.character(na.omit(AnnotationDbi::select(org.Hs.eg.db,
                                      keys = gene_down,
                                      columns = 'ENTREZID',
                                      keytype = 'SYMBOL')[,2]))


通常使用clusterProfiler包做GO和KEGG数据库富集需要的是 ENTREZID的ID系统,所以转换一下。

然后上下调基因独立进行GO数据库富集

代码仍然是很简单:

代码语言:javascript
代码运行次数:0
复制
library(clusterProfiler) 
#对正相关基因进行富集分析
go <- enrichGO(gene_up, OrgDb = "org.Hs.eg.db", ont="all") 
library(ggplot2)
library(stringr)
barplot(go, split="ONTOLOGY")+ facet_grid(ONTOLOGY~., scale="free")+ 
  ggsave('gene_up_GO_all_barplot.png') 
go=DOSE::setReadable(go, OrgDb='org.Hs.eg.db',keyType='ENTREZID')
write.csv( go@result,file = 'gene_up_GO_all_barplot.csv')

#对负相关基因进行富集分析
go <- enrichGO(gene_down, OrgDb = "org.Hs.eg.db", ont="all") 
barplot(go, split="ONTOLOGY")+ facet_grid(ONTOLOGY~., scale="free")+ 
  ggsave('gene_down_GO_all_barplot.png') 
go=DOSE::setReadable(go, OrgDb='org.Hs.eg.db',keyType='ENTREZID')
write.csv( go@result,file = 'gene_down_GO_all_barplot.csv')

这样有了最原始的图,如何绘制成为文章开头的美图呢?

学徒作业

看我六年前的表达芯片的公共数据库挖掘系列推文 :

完成数据集:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE97251 的表达量矩阵差异分析 :

代码语言:javascript
代码运行次数:0
复制
GSM2560200 plasmaRNA_health H13
GSM2560201 plasmaRNA_health H5
GSM2560202 plasmaRNA_health H8
GSM2560203 plasmaRNA_OSCC X474
GSM2560204 plasmaRNA_OSCC X574
GSM2560205 plasmaRNA_OSCC X602

这个数据集是很简单的两个分组,芯片平台是 Agilent-079487 Arraystar Human LncRNA microarray V4

如果确实感兴趣也可以去和原文对比:Screening and validation of plasma long non-coding RNAs as biomarkers for the early diagnosis and staging of oral squamous cell carcinoma. Oncol Lett 2021 Feb;21(2):172. PMID: 33552289

我需要大家完成文章开头的美图,并且给出来代码!

完成学徒作业,以markdown笔记的形式发到我邮箱,我会抽时间集中检查,挖掘其中足够优秀的小伙伴进行重点培养,给与更高级的学习资料或者个性化的学习指引,并且提供一定量的项目兼职测试一下你成为“数字游民”的潜力。

下一篇
举报
领券