-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用TPM/FPKM/RPKM进行差异分析真的可以消除系统误差吗? #3382
Comments
使用TPM/FPKM/RPKM进行差异分析真的可以消除系统误差吗? by 生信菜鸟团
背景知识首先我们来谈谈什么是线性和非线性系统误差?为什么TPM/FPKM/RPKM在理论上可以消除线性系统误差? 线性误差组学数据中的线性系统误差指的是由于技术或实验条件的限制,导致测量值与真实值之间存在一定的偏差,这种偏差在数学上可以用线性模型来表示。具体而言,对于一组测量数据 y,它们与真实值 x 的关系可以用以下的线性模型表示:y = Ax + b + e 其中,A 是系数矩阵,b 是偏置向量,e 是误差向量。在这个模型中,A 和 b 是已知的常数,而 e 表示测量误差,也就是线性系统误差。 消除线性系统误差的方法主要有两种:校准和标准化。 校准的基本思路是通过添加一些已知的标准样品,建立标准曲线,然后利用标准曲线对未知样品的测量结果进行修正。具体而言,我们可以将标准样品的真实值和测量值用线性回归模型拟合,得到一个系数和截距,然后利用这个系数和截距对未知样品的测量值进行校准。 标准化的基本思路是将测量数据进行线性变换,使得它们的均值为零,方差为一。这个过程通常称为Z-score标准化: Z = (x - μ) / σ 其中,x 是原始测量数据,μ 是所有样品的均值,σ 是所有样品的标准差。将这个标准化的结果作为最终的测量结果,可以有效消除线性系统误差e。 下面是一些在转录组数据分析中可能遇到的线性误差的例子:
这些误差可以通过对表达量进行归一化处理来消除,例如,TPM、FPKM、RPKM等方法。 关于这些方法我们此前也有介绍: 也欢迎大家关注我们语雀平台团队整理的“生物统计从理论到实践”,里面涉及到许多生物信息的统计学知识讲解 RPKM FPKM 和 TPM:https://www.yuque.com/biotrainee/biostat/chapter3-4
这些误差通常会引起表达量测量的偏差,但是这些误差通常是线性的,因此可以采用不同的标准化方法和归一化方法来消除或减小这些误差,从而提高数据处理的准确性和可靠性。 非线性误差组学数据中的非线性系统误差指的是由于技术或实验条件的限制,导致测量值与真实值之间存在一定的偏差,而这种偏差无法用线性模型来完全描述。 与线性系统误差不同,非线性系统误差不仅仅是误差向量 e 的线性组合,而可能涉及到多个变量之间的复杂关系,如幂律、指数函数、对数函数等。 因此,对于组学数据中的非线性系统误差,我们需要采用更加复杂的模型来描述和修正。常见的方法包括使用高阶多项式、神经网络等非线性模型来对数据进行拟合和校正。 非线性系统误差是指在组学数据分析中可能存在的不符合线性模型的偏差。这种偏差可能由于实验设计、样本处理、RNA测量、数据分析等各个方面的因素引起,因此可能影响分析的准确性和可靠性。非线性系统误差不能通过简单的计算和全局归一化等基本方法来消除,需要更为复杂和有效的技术来处理。在组学数据分析之前,必须对可能出现的非线性系统误差有所了解并对其进行评估,以保证数据的质量和准确性。 下面是一些在转录组数据分析中可能遇到的非线性误差的例子:
所以作者认为组学数据的非线性系统误差没有生物信息学方法可以消除,在此基础上,任何不同来源的数据集的合并都是不可接受的。 小编有话说: 此外,根据全篇文章的解读以及小编后续复现的分析也可发现,作者的文章暗含了支持使用raw counts进行差异分析的立场,认为为了理论上消除系统误差而使用TPM/FPKM/RPKM是不可取的。所以稍微总结一下作者的两个立场,以便读者带着问题阅读:
以下引用均为文章作者所述翻译内容 histogram
首先来到GEO看看这个数据集https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE159751 FPKM (Fragments Per Kilobase of transcript per Million mapped reads) 是一种常用的转录组表达量的标准化方法。FPKM处理的转录组数据的分布直方图通常呈现出类似于正态分布的形式,这是由于转录本的表达量在大多数生物学实验中都是连续变量,同时在样本中存在许多不同的转录本。 虽然FPKM转录组数据的分布可以近似为正态分布,但是具体的形态和趋势仍然取决于具体的实验设计和生物体。在一些情况下,转录本表达量可能呈现出双峰分布或者其他类型的非正态分布(这里FPKM的分布模式有两种形状:单峰和双峰状,无论疾病状态如何)。 我们先尝试使用GEOquery包在线获取:
发现为空后转为手动下载GSE159751_RAW文件,并对各个样本GSM进行合并获得FPKM的表达矩阵merge_GSM_file.txt
可以发现,各样本FPKM值的分布确实如作者所说“FPKM的分布模式有两种形状:单峰和双峰状,无论疾病状态如何” PCA
可以发现样本确实没有按照“disease state”分组聚集 hierarchical clustering
从这里开始,我们的结果开始和作者出现差别,看着作者的图3,私以为,虽然样本不是按疾病状态进行聚类,但也不能完全说按预期的PC1评分类别进行聚类吧,聚类结果也不是很完美 一开始我犯懒打算用SD标准差取差异基因简单看看聚类,但根据PC1的聚类结果都没作者那样好,这里还是贴出来,后面我还是做了一遍差异分析用差异基因热图聚类(虽然根据PC1得分分组的聚类结果还是没作者那样好) SD>2SD>50SD top100差异分析:
我们的聚类结果可以看出,虽然“disease state”分组的聚类效果也不是很好,但比PC1要好 作者认为“disease state”分组的聚类效果不好是因为存在非线性系统差异而生物学背景被覆盖掉 单独看根据“disease state”的PCA和热图聚类的效果确实可以认为存在非线性系统差异,但我们没有按作者预期那样得到根据PC1分组聚类的结果
我们在上面的差异分析的过程在对TPM矩阵进行了log2,并在绘制热图进行聚类的过程中对每行进行了scale标准化 需要注意的是我们一开始进行差异分析时就画了boxplot查看数据分布,并去除组间差异,这应该与作者所说的“强制分布形状相似”一致 其实我看作者又画的这个图,PC1分组聚类效果感觉还是没作者说的那么好 接着作者为了进一步确定非线性系统误差的来源,从头获取fastq文件用其他软件做了一遍:
数据集上传作者使用的软件:于是,作者将非线性系统误差的来源锁定到了获取fastq文件等实验操作、测序工作上 DE NOVO获取数据下载 fastq 数据(推荐)从 EBI 数据库直接下载 fastq 格式数据,直接越过 SRA,而且不用再做格式转换https://sra-explorer.info/ 质控hisat2比对stringtie定量这个软件我之前没用过,这里写的详细点,转录组专辑之前在上游分析推文中使用的都是FeatureCount 参考文章:
组装合并定量
这里可以发现,我们只用了样本名.gtf文件,而没有用gene_abundances.tsv文件 打开看看就可以发现,样本名.gtf文件是包括了转录水平和基因水平的,而gene_abundances.tsv只有基因水平。prepDE.py 脚本可以直接从 gtf 文件中提取 count 值,而不需要使用 gene_abundances.tsv 文件。这样可以省去合并 gene_abundances.tsv 表格的步骤,简化了数据处理流程。 结束后在当前目录生成 到了这一步我们其实就得到了熟悉的raw counts矩阵了,打开看会发现gene_id列有许多“MSTRG”标志符,是因为我们这里使用的是从头开始的方法 MSTRG是StringTie软件生成的新基因的命名前缀,表示未在基因组注释中发现的新基因。在gene_count_matrix.csv文件中出现大量的MSTRG表示这些新基因在各个样本中都有被表达并被计算在了count矩阵中 MSTRG 是 StringTie 生成的转录本(transcript)的名称,当 StringTie 无法将转录本与已知的基因注释匹配时,会生成一个新的 MSTRG 转录本。在生成 count 矩阵时,StringTie 会将 MSTRG 转录本与已知的基因注释进行合并,并将其与已知的基因一起计算。因此,gene_count_matrix.csv 中出现的 MSTRG 转录本实际上是 StringTie 生成的新转录本和已知基因的合并结果 获取已知基因看看有多少: 48946个,和GEO给的数量42072个差不多 提取 FPKM/TPM 或 coverage 结果我们在这里只提取FPKM 需要借助一个perl脚本:https://github.com/griffithlab/rnaseq_tutorial/blob/master/scripts/stringtie_expression_matrix.pl 发现这个脚本--result-dirs必须要求gtf和基因丰度tsv文件在以样本命名的文件夹下 大致这样改文件名 这中间我有个地方看错了,来来回回改名字有点乱就不贴了。反正最后就是改成这个样: 怪事出现了,脚本说它找不到transcript_id,但文件里明明是有的 查看脚本所在仓库issue:https://github.com/griffithlab/rnaseq_tutorial/issues/46https://github.com/griffithlab/rnaseq_tutorial/issues/48 发现存在相同问题: 由于我本人不会perl所以我打开脚本大致看了看没看懂哪里有问题 所以接下来我们使用raw counts矩阵进行分析 raw counts 差异分析PCA
hierarchical clustering FPKM_PC1group可以发现重新用其他上游分析软件获得的counts的聚类结果中确实也存在非线性系统误差,没有完全根据”state disease“分组聚类 但也没如作者所说的那样根据PC1得分分组聚类 总结针对在一开始我们归纳的作者的两个观点,我们根据上面的复现结果进行讨论:
我们的结果中counts相比FPKM拥有更好的PCA效果(除了FPKM处理,还可能的影响:我们自己进行的转录组上游分析软件所用参数,如质控可能更严格等),FPKM虽然理论上可以消除线性系统误差但是无法消除非线性系统误差,所以如果选择FPKM而非counts并不能达到理想的去除系统误差效果,并且这样的处理可能会掩盖掉数据的质量问题,目前主流也是根据counts来进行差异分析
在我们的分析中可以发现该数据集确实存在非线性系统误差,并且经过自行使用其他软件进行上游分析得到counts进行差异分析,可以确定早在fastq文件中就存在这种误差,非线性系统误差来自实验设计、操作、测序等环节。 作者认为没有任何生物信息学方法可以在处理的过程中去除这些误差(这里做了分布形状的校准)从而进一步提出任何不同来源的数据集的合并都是不可接受的 此前表达量芯片专辑有篇推文介绍了如何整合不同数据集的结果老文新看,今天来看看两个数据集的整合分析,涉及到三种方法:
这里主要谈论的是第一种方法的可行性 小编认为,①是否可以在“移除批次效应合并数据集”之前单独参照本文对非线性系统误差进行查看呢?如果各数据集实验分组聚类效果很好,是不是就可以合并呢?合并后再次查看实验分组聚类效果。 ②对单个数据集,如果PCA的效果不好,转录组专辑此前也介绍了一些处理方法“亡羊补牢”:PCA效果不行,我们可以试试这样补救下,那么进行了补救(筛选聚类合格样本数据数据后)能否再进行多个数据集合并呢? 同时,我们的复现过程中存在一些跟作者不一致的地方也值得深入探讨,比如为什么作者预测认为存在非线性系统误差的数据集应该在PC1得分分组上有很好的聚类效果?欢迎大家在评论区讨论。 |
https://mp.weixin.qq.com/s/L5ikz6qmCTSoO4ut4ahQvg
The text was updated successfully, but these errors were encountered: