如何快速从转录组数据中筛选目标基因!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速从转录组数据中筛选目标基因!相关的知识,希望对你有一定的参考价值。
参考技术A 如何从海量高通量测序数据中筛选出目标数据?这是困扰大多数老师的一个难题!我以一个excel的简单函数为例,演示一下如何从表格中快速筛选感兴趣的基因等信息。
函数的名称是 VLOOKUP函数 ,该函数是Excel表中的一个纵向查找函数,学会该函数之后, 可以方便我们从所有基因的结果中筛选我们关心的基因相关信息,比如:基因的长度、基因在样品中的表达量、基因的注释等等信息 。
VLOOKUP函数需要输入4个值:
1、要查找的值,比如:基因的ID;
2、需要查找的区域;
3、区域中包含返回值的列号,也就是找到相关值之后返回第几列的信息;
4、精确匹配或者近似匹配,一般我们选择精确匹配。精确匹配采用0/FALSE、近似匹配采用1/TRUE。
一般来说,我们做完转录组测序,都会有一个总表,表里有所有基因的ID、长度、表达量、差异倍数、注释信息等等,表格很大,内容很多。
如果我们想提取某些差异基因的基因长度信息,那么我们该如何操作呢?
我们需要在需要提取长度信息的差异基因表中加上一列gene_length列。
然后插入VLOOKUP函数,按要求输入4个参数,点击确定即可。
以上是利用基因ID在总表中查找一列信息,比较简单。如果我们想查找多列信息该如何操作呢?
方法相似,我们可以在总表中插入deg_gene列,然后去差异基因表中查找基因ID即可,具体操作如下:
到这里,一个简单的Excel表筛选基因信息的方法就介绍完了,实际上在公司给出转录组标准分析之后,很多个性化都可以由自己解决,您需要的仅仅是高手领进门!
更多生物信息课程:
1. 文章越来越难发?是你没发现新思路,基因家族分析发2-4分文章简单快速,学习链接: 基因家族分析实操课程 、 基因家族文献思路解读
2. 转录组数据理解不深入?图表看不懂?点击链接学习深入解读数据结果文件,学习链接: 转录组(有参)结果解读 ; 转录组(无参)结果解读
3. 转录组数据深入挖掘技能-WGCNA,提升你的文章档次,学习链接: WGCNA-加权基因共表达网络分析
4. 转录组数据怎么挖掘?学习链接: 转录组标准分析后的数据挖掘 、 转录组文献解读
5. 微生物16S/ITS/18S分析原理及结果解读 、 OTU网络图绘制 、 cytoscape与网络图绘制课程
6. 生物信息入门到精通必修基础课,学习链接: linux系统使用 、 perl入门到精通 、 perl语言高级 、 R语言画图
7. 医学相关数据挖掘课程,不用做实验也能发文章,学习链接: TCGA-差异基因分析 、 GEO芯片数据挖掘 、 GSEA富集分析课程 、 TCGA临床数据生存分析 、 TCGA-转录因子分析 、 TCGA-ceRNA调控网络分析
8.其他课程链接: 二代测序转录组数据自主分析 、 NCBI数据上传 、 二代测序数据解读 。
转录组入门(7):差异表达分析
参考技术A原先三个样本的HTSeq-count计数的数据可以在我的GitHub中找到,但是前面已经说过Jimmy失误让我们分析的人类就只有3个样本, 另外一个样本需要从另一批数据获取(请注意batch effect),所以不能保证每一组都有两个重复。
我一直坚信”你并不孤独“这几个字,遇到这种情况的人肯定不止我一个,于是我找到了几种解决方法
以上方法都会在后续进行介绍,但是我们DESeq2必须得要有重复的问题亟待解决,没办法我只能自己瞎编了。虽然是编,我们也要有模有样,不能直接复制一份,要考虑到高通量测序的read是默认符合泊松分布的。我是这样编的。
这仅仅是一种填坑的方法而已,更好模拟数据的方法需要参阅更加专业的文献, 有生之年 我希望能补上这一个部分。
这部分内容最先在 RNA-Seq Data Analysis 的8.5.3节看到,刚开始一点都不理解,但是学完生物统计之后,我认为这是理解所有差异基因表达分析R包的关键。
基本上,统计课都会介绍如何使用 t检验 用来比较两个样本之间的差异,然后在样本比较多的时候使用 方差分析 确定样本间是否有差异。当然前是样本来自于正态分布的群体,或者随机独立大量抽样。
对于基因芯片的差异表达分析而言,由于普遍认为其数据是服从正态分布,因此差异表达分析无非就是用t检验和或者方差分析应用到每一个基因上。高通量一次性找的基因多,于是就需要对多重试验进行矫正,控制假阳性。目前在基因芯片的分析用的最多的就是 limma 。
但是 ,高通量测序(HTS)的read count普遍认为是服从泊松分布(当然有其他不同意见),不可能直接用正态分布的 t检验 和 方差分析 。 当然我们可以简单粗暴的使用对于的 非参数检验 的方法,但是统计力不够,结果的p值矫正之估计一个差异基因都找不到。老板花了一大笔钱,结果却说没有差异基因,是个负结果,于是好几千经费打了水漂,他肯定是不乐意的。因此,还是得要用参数检验的方法,于是就要说到方差分析和线性模型之间的关系了。
线性回归和方差分析是同一时期发展出的两套方法。在我本科阶段的田间统计学课程中就介绍用 方差分析 (ANOVA)分析不同肥料处理后的产量差异,实验设计如下
这是最简单的单因素方差分析,每一个结果都可以看成 yij = ai + u + eij, 其中u是总体均值,ai是每一个处理的差异,eij是随机误差。
注 :方差分析(Analysis of Variance, ANAOVA)名字听起来好像是检验方差,但其实是为了判断样本之间的差异是否真实存在,为此需要证明不同处理内的方差显著性大于不同处理间的方差。
线性回归 一般是用于量化的预测变量来预测量化的响应变量。比如说体重与身高的关系建模:
当然线性回归也可用处理名义型或有序型因子(也就是离散变量)作为预测变量,如果要画图的话,就是下面这个情况。
如果我们需要通过一个实验找到不同处理后对照组和控制组的基因变化,那么基因表达可以简单写成, y = a + b · treament + e。 和之前的 yij = ai + u + eij 相比,你会发现公式是如此的一致。 这是因为线性模型和方差分析都是 广义线性模型 (generalizing linear models, GLM)在正态分布的预测变量的特殊形式。而GLM本身只要采用合适的 连接函数 是可以处理对任意类型的变量进行建模的。
目前认为read count之间的差异是符合负二项分布,也叫gamma-Possion分布。那么问题来了,如何用GLM或者LM分析两个处理件的差异呢?其实可以简单的用上图的拟合直线的斜率来解释,如果不同处理之间存在差异,那么这个拟合线的斜率必定不为零,也就是与X轴平行。但是这是一种便于理解的方式(虽然你也未必能理解),实际更加复杂,考虑因素更多。
注1 负二向分布有两个参数,均值(mean)和离散值(dispersion). 离散值描述方差偏离均值的程度。泊松分布可以认为是负二向分布的离散值为1,也就是均值等于方差(mean=variance)的情况。
注2 这部分涉及大量的统计学知识,不懂就用维基百科一个个查清楚。
聊完了线性模型和方差分析,下面的设计矩阵(design matrix)就很好理解了, 其实就是用来告诉不同的差异分析函数应该如何对待变量。比如说我们要研究的KD和control之间变化,设计矩阵就是
那么比较矩阵(contrast matrix)就是告诉差异分析函数应该如何对哪个因素进行比较, 这里就是比较不同处理下表达量的变化。
其实read count如何标准化的方法有很多,最常用的是FPKM和RPKM,虽然它们其实是错的-- FPKM/RPKM是错的 。
我推荐阅读 Comparing the normalization methods for the differential analysis of Illumina high-throughput RNA-Seq data , 了解不同标准化方法之间的差异。
有一些方法是要求原始数据,有一些则要求经过某类标准化后的数据,记得区分。
关于DESeq2分析差异表达基因,其实在 https://www.bioconductor.org/help/workflows/rnaseqGene/ 里面介绍的非常清楚了。
我们已经准备好了count matrix,接下来就是把数据导入DESeq2。DESeq2导入数据的方式有如下4种,基本覆盖了主流read count软件的结果。
注 DESeq2要求的数据是raw count, 没必要进行FPKM/TPM/RPFKM/TMM标准化。
本来我们是可以用DESeq2为htseq-count专门提供的 DESeqDataSetFromHTSeq ,然而很尴尬数据不够要自己凑数,所以只能改用 DESeqDataSetFromMatrix 了 :cold_sweat:
导入数据,构建 DESeq2 所需的 DESeqDataSet 对象
注 : 这一步到下一步之间可以过滤掉一些low count数据,节省内存,提高运行速度
使用 DESeq 进行差异表达分析: DESeq 包含三步,estimation of size factors(estimateSizeFactors), estimation of dispersion(estimateDispersons), Negative Binomial GLM fitting and Wald statistics(nbinomWaldTest),可以分布运行,也可用一步到位,最后返回 results 可用的DESeqDataSet对象。
用results获取结果: results的参数非常的多,这里不好具体展开 :pensive: 但是你们会自己看的吧
我们可用mcols查看每一项结果的具体含义,比如说 log2FoldChange 表示倍数变化取log2结果,还能画个火山图。一般简单粗暴的用2到3倍作为阈值,但是对于低表达的基因,3倍也是噪音,那些高表达的基因,1.1倍都是生物学显著了。更重要的没有考虑到组内变异,没有统计学意义。 padj 就是用BH对多重试验进行矫正。
用summary看描述性的结果,大致是上调的基因占总体的11%,下调的是7.1%(KD vs control)
画个MA图,还能标注p值最小的基因。
下图是没有经过 statistical moderation平缓log2 fold changes的情况
如果经过 lfcShrink 收缩log2 fold change, 结果会好看很多
当然还有火山图,不过留给其他方法作图,我们先把差异表达的基因找出来。
一般p value 小于0.05就是显著了, 显著性不代表结果正确,只用于给后续的富集分析和GSEA提供排序标准和筛选而已。关于P值的吐槽简直无数, 请多注意。
edgeR在函数说明中称其不但可以分析SAGE, CAGE的RNA-Seq,Tag-RNA,或RNA-seq, 也能分析ChIP-Seq和CRISPR得到的read counts数据。嗯,我信了:confused:!
edgeR使用 DGEList 函数读取count matrix数据,也就说你需要提供一个现成的matrix数据,而不是指望它能读取单独的文件,然后进行合并(当然机智的我发现,其实可以用 tximport 或 DESeqDataSetFromHTSeq 读取单独的文件,然后传递给 DGEList )
第一步: 构建DGEList对象
第二步: 过滤 low counts数据。与DESeq2的预过滤不同,DESeq2的预过滤只是为了改善后续运算性能,在运行过程中依旧会自动处理low count数据,edgeR需要在分析前就要排除那些low count数据,而且非常严格。从生物学角度,有生物学意义的基因的表达量必须高于某一个阈值。从统计学角度上, low count的数据不太可能有显著性差异,而且在多重试验矫正阶段还会拖后腿。 综上所诉,放心大胆的过滤吧。
根据经验(又是经验 :dog: ), 基因至少在某一些文库的count超过10 ~ 15 才被认为是表达。这一步全靠尝试, 剔除太多就缓缓,剔除太少就严格点。 我们可以简单的对每个基因的raw count进行比较,但是建议用CPM(count-per-million) 标准化 后再比较,避免了 文库大小 的影响。
这里的0.5(即阈值)等于 10/(最小的文库的 read count数 /1000000),keep.lib.size=FALSE表示重新计算文库大小。
第三步: 根据组成偏好(composition bias)标准化。edgeR的 calcNormFactors 函数使用 TMM算法 对DGEList标准化
注 大部分的mRNA-Seq数据分析用TMM标准化就行了,但是也有例外,比如说single-cell RNA-Seq(Lun, Bach, and Marioni 2016), 还有就是global differential expression, 基因组一半以上的基因都是差异表达的,请尽力避免,(D. Wu et al. 2013), 不然就需要用到内参进行标准化了(Risso et al. 2014).
第四步: 实验设计矩阵(Design matrix), 类似于DESeq2中的design参数。 edgeR的线性模型和差异表达分析需要定义一个实验设计矩阵。很直白的就能发现是1vs0
第五步: 估计离散值(Dispersion)。前面已经提到负二项分布(negative binomial,NB)需要均值和离散值两个参数。edgeR对每个基因都估测一个经验贝叶斯稳健离散值(mpirical Bayes moderated dispersion),还有一个公共离散值(common dispersion,所有基因的经验贝叶斯稳健离散值的均值)以及一个趋势离散值
还可以进一步通过quasi-likelihood (QL)拟合NB模型,用于解释生物学和技术性导致的基因特异性变异 (Lund et al. 2012; Lun, Chen, and Smyth 2016).
注1 估计离散值这个步骤其实有许多 estimate*Disp 函数。当不存在实验设计矩阵(design matrix)的时候, estimateDisp 等价于 estimateCommonDisp 和 estimateTagwiseDisp 。而当给定实验设计矩阵(design matrix)时, estimateDisp 等价于 estimateGLMCommonDisp , estimateGLMTrendedDisp 和 estimateGLMTagwiseDisp 。 其中tag与gene同义。
注2 其实这里的第三, 四, 五步对应的就是DESeq2的 DESeq 包含的2步,标准化和离散值估测。
第六步: 差异表达检验(1)。这一步主要构建比较矩阵,类似于DESeq2中的 results 函数的 contrast 参数。
这里用的是 glmQLFTest 而不是 glmLRT 是因为前面用了glmQLTFit进行拟合,所以需要用QL F-test进行检验。如果前面用的是 glmFit ,那么对应的就是 glmLRT . 作者称QL F-test更加严格。多重试验矫正用的也是BH方法。
后续就是提取显著性差异的基因用作下游分析,做一些图看看
第六步:差异表达检验(2)。上面找到的显著性差异的基因,没有考虑效应值,也就是具体变化了多少倍。我们也可用找表达量变化比较大的基因,对应的函数是 glmTreat 。
经过上面两个方法的洗礼,基本上套路你也就知道了,我先简单小结一下,然后继续介绍limma包的 voom 。
Limma原先用于处理基因表达芯片数据,可是说是这个领域的老大 :sunglasses: 。如果你仔细看edgeR导入界面,你就会发现,edgeR有一部分功能依赖于limma包。Limma采用经验贝叶斯模型( Empirical Bayesian model)让结果更稳健。
在处理RNA-Seq数据时,raw read count先被转成log2-counts-per-million (logCPM),然后对mean-variance关系建模。建模有两种方法:
数据预处理 : Limma使用edgeR的DGEList对象,并且过滤方法都是一致的,对应edgeR的第一步,第二步, 第三步
差异表达分析 : 使用”limma-trend“
差异表达分析 : 使用”limma-voom“
如果分析基因芯片数据,必须好好读懂LIMMA包。
基本上每一个包,我都提取了各种的显著性基因,比较就需要用韦恩图了,但是我偏不 :stuck_out_tongue: 我要用UpSetR.
感觉limma的结果有点奇怪,有生之年在折腾吧。
好吧,这部分我鸽了
[1] Comparing the normalization methods for the differential analysis of Illumina high-throughput RNA-Seq data
[2] https://www.bioconductor.org/help/workflows/rnaseqGene/
[3] https://www.bioconductor.org/help/workflows/RnaSeqGeneEdgeRQL/
[4] https://www.bioconductor.org/help/workflows/RNAseq123/
以上是关于如何快速从转录组数据中筛选目标基因!的主要内容,如果未能解决你的问题,请参考以下文章