RNA-seq是利器,大部分做实验的老板手下都有大量转录组数据,所以RNA-seq的分析需求应该是很大的(大部分的生信从业人员应该都差不多要沾边吧)。

普通的转录组套路并不多,差异表达基因、富集分析、WGCNA network以及一些没卵用的花式分析。DEG分析是基础,up and down,做个富集,了解一下处理后到底是什么通路被改变了;WGCNA主要就是根据相关性来找出一些co-express的gene module。

单细胞的转录组的玩法就比较多了,可以理解为超多样本的普通转录组,普通转录组的分析基本都可以用,但单细胞更侧重于两个主题:clustering和pseudotime。

RNA-seq离不开富集分析的本质原因就是因为它是超高通量的,老板肯花钱做RNA-seq自然就是想做数据挖掘,而不是focus on one gene;3万个基因你怎么分析?就算你用WGCNA得到了很多in silico的gene module,so what?生物老板不懂计算机,你给他们一大堆冰冷的gene有什么用,所以一些超级经典的数据库就出现了,GO、KEGG等,3万多基因我都根据现有知识给你做了定义定位分类,这样老板就知道,原来我敲除了A gene会导致B通路下调啊,这样我就可以接着讲我的生物学故事了。真找到老板感兴趣的通路,老板故事讲好了,你就可以午饭多加个鸡腿了。

基因表达或者基因集富集通路的分析过程就是GSEA了。

GSEA是一个软件的名字,就是基因集富集分析的意思,但它其实是特指某一种基因集富集分析;在GSEA之前就已经有了普通的基因集富集分析方法;两者之间的目的是一样的,但是原理有天壤之别。

先列一个富集分析的常见工具表:

  • DAVID - 很多CNS里都会见到,后来被人发现它根本就不更新数据库
  • WEGO - 华大在用的,Y叔还和华大有口水战
  • clusterProfiler - Y叔精品
  • webgestalt - 网页版的,也有R包,之前我在用
  • ClueGO
  • goProfiles
  • MeV
  • TEASE

GSEA单独列出,GSEA - Broad Institute,broad出品必属精品。

一些常用的数据库:

  • GO
  • KEGG
  • DO - Disease Ontology
  • Molecular Signatures Database (MSigDB)
  • webgestalt里可以看到更多的数据库

普通富集分析的原理比较简单,可以直接看clusterprofiler的文章,一下是原文截取:

The clusterProfiler package depends on the Bioconductor annotation data GO.db and KEGG.db to obtain the maps of the entire GO and KEGG corpus. Bioconductor annotation packages org.Hs.eg.db, org.Mm.eg.db, and org.Sc.sgd.db were imported for genome-wide annotation of mapping Entrez gene identifiers or ORF identifiers for humans, mice, and yeast, respectively.

The clusterProfiler package offers a gene classification method, namely groupGO, to classify genes based on their projection at a specific level of the GO corpus, and provides functions, enrichGO and enrichKEGG, to calculate enrichment test for GO terms and KEGG pathways based on hypergeometric distribution. To prevent high false discovery rate (FDR) in multiple testing, q-values (Storey, 2002) are also estimated for FDR control. Furthermore, clusterProfiler supplies a function, compareCluster, to automatically calculate enriched functional categories of each gene clusters and provides several methods for visualization.

稍微梳理一下:首先该工具依赖一些数据库GO和KEGG,另外需要一些基因名转换的数据库;然后groupGO就是根据GO term来把我们的基因集分类,然后enrichGO就是来做统计检验(超几何分布),判断这个基因集是不是随机抽取的;然后就是一些统计的修正了,FDR和q-value。

以下列几个我经常会碰到的问题(大部分都被Y叔解决了):

  1. 数据库冗余,大部分条目都是重复的,解决:use simplify to remove redundancy of enriched GO terms
  2. 一些太general的条目出现了,需要过滤,解决:test GO at sepcific level
  3. 一些term的名字太长,解决:看最新的公众号,2019年02月13日
  4. 有些基因名字不匹配,我是直接用的基因symbol的

能做好普通富集分析已经不错了,但是你看高分paper,发现更多大佬都在用一个叫GSEA的分析方法来做富集分析。以下就是这种分析的典型结果图:

以前我死活看不懂这张图(因为大部分教程都不说人话),后来偶然看到一篇教程,真的是通俗易懂,对着上面的图一看,理解了就再也忘不了。

附教程链接:GSEA分析结果详细解读

普通富集分析的致命缺点:

  1. 已经选出了DEGs,需要主观的过滤
  2. 在统计检验的时候不考虑基因的表达情况
  3. 一些微弱的却具有效力的基因集被过滤掉了

这就是为什么有些老板结果看多了,就自然理解出了普通富集分析的缺点,我给的基因本来就是偏向于某些通路的(比如说大脑发育的样本),那我注释出来的结果自然就有很大一批大脑发育的通路,这是必然的confounder。这就极大地削弱了富集分析结果的准确性!!!在这里我敢大胆的说,大部分paper里的普通富集分析结果都是为赋新词强说愁,为了讲故事而讲故事,根本不具备任何的科学性

broad的人估计是灌水太多,不忍再残害科学界,才花了大力气打造了一个颇具科学性的基因富集分析工具GSEA。

补充:普通富集分析的正式英文是Over-Representation Analysis;GSEA则称为Gene Set Enrichment Analysis。

Enrichment map是一个不错的结果展现方式。

待续~

GSEA - Gene set enrichment analysis 基因集富集 | ORA - Over-Representation Analysis 分析原理与应用的更多相关文章

  1. GSEA 基因集富集分析

    http://software.broadinstitute.org/gsea/index.jsp GSEA(Gene Set Enrichment Analysis)是一种生物信息学的计算方法,用于 ...

  2. GO 和 KEGG 的区别 | GO KEGG数据库用法 | 基因集功能注释 | 代谢通路富集

    一直都搞不清楚这两者的具体区别. 其实初学者搞不清楚很正常,因为它们的本质是相通的,都是对基因进行归类注释的数据库. 建议初学者自己使用一下这两个数据库,应该很快就能明白其中的区别. (抱歉之前没讲清 ...

  3. R获取指定GO term和KEGG pathway的gene list基因集

    clusterProfiler没有显性的接口,但是可以直接扣取clusterProfiler里的函数. 核心函数就是get_GO_data GO_DATA <- get_GO_data(&quo ...

  4. Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

    Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续) 今天延续昨天的内容,主要对为什么一个处理会分解成多个Job执行进行解析. 让我们跟踪下Job调用过 ...

  5. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  6. Power BI 与 Azure Analysis Services 的数据关联:2、Azure Analysis Services与 本地版本的 SQL Analysis Services 连接

    Power BI 与 Azure  Analysis Services 的数据关联:2.Azure  Analysis Services与 本地版本的 SQL   Analysis Services ...

  7. 编译原理根据项目集规范族构造LR(0)分析表

    转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...

  8. DEPICT实现基因优化(gene prioritization)、gene set富集分析(geneset enrichment)、组织富集分析(tissue enrichment)

    全基因组关联分析除了找到显著的关联位点,我们还可以做基因优化.geneset富集分析.组织富集分析,下面具体讲一讲怎么利用GWAS的summary数据做这个分析. summary数据就是关联分析的结果 ...

  9. variant变异 | Epigenome表观基因组 | Disease-susceptible gene 疾病易感基因

    paper:cepip: context-dependent epigenomic weighting for prioritization of regulatory variants and di ...

随机推荐

  1. hive sqoop,sqoop-hive import data

    https://segmentfault.com/a/1190000002532293 https://www.zybuluo.com/aitanjupt/note/209968 create tab ...

  2. JDBC事务(三)ThreadLocal绑定Connection

    处理一个请求即开启一个线程,在三层中,执行三层中的方法都是用的同一个线程. 我们开启一个事务,使用conn.setAutoCommit(false); conn应该属于ado层,不应该出现在servi ...

  3. 洛谷P4396 作业 [AHOI2013] 莫队

    正解:莫队 解题报告: 传送门! 天呐太久没做莫队了连板子都认不出来了,,,所以复健下做下莫队的题目QAQ 就很板子鸭,和莫队板子比好像只有一个离散化,,,?就不讲了QAQ 等下直接放代码QAQ ov ...

  4. (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比

    盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...

  5. Python:遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序

    编写了一个遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序,先把程序贴出来. #coding=utf-8 ''' Created on 2014年7月14日 @author: ...

  6. 2018-2019-1 20189203《Linux内核原理与分析》第二周作业

    一.本周学习情况 我本周结合<庖丁解牛>教材学习了蓝墨云的视频课,主要学习内容如下: 1.学习了计算机的工作原理,深入理解了冯诺依曼体系结构. 2.学习了X86-32 CPU的寄存器 3. ...

  7. Oracle 11.2.0.4 RAC重建EM案例

    环境:Oracle 11.2.0.4 RAC 重建EM 背景:客户之前的EM已经被损坏,需要重建EM 重建EM的方案有很多,其中最简单的方法是:直接使用emca重建,oracle用户下,只需一条命令搞 ...

  8. Eclipse 在启动发生错误异常:An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException的解决办法

    异常现象: 打开Eclipse,出现 An internal error occurred during: "Initializing Java Tooling". java.la ...

  9. C# 获取结构体的所有成员

    读取结构体的所有成员(Engine为结构体)    FieldInfo[] fieldInfos = typeof(Engine).GetFields();

  10. HTTPConnectionPool(host='xx.xx.xx.xx', port=xx): Max retries exceeded with url:(Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x0000015A25025EB8>...))

    HTTPConnectionPool(host='xx.xx.xx.xx', port=xx): Max retries exceeded with url:(Caused by ConnectTim ...