写在前面TBtools已经拆除了绝大部分生信分析的门槛,让众多湿实验工作者们(无代码基础)可以畅快地分析他们的数据。 不求人非常爽! 不用跟公司低效沟通分析细节非常爽! 很早之前陈师兄就跟我提过是否有兴趣整一个单细胞分析方面的插件,一方面由于我R用的非常不6,另一方面确实是懒。。。所以搁置了。。近期又提了一下,于是菜菜的我终于踏上了一段辛酸的写bug之旅。。 总的来说,第一次接触shiny开发体系,确实非常不习惯,跟之前数据库整的html+css+JavaScript+php完全不一样,特别是在debug上,菜狗如我,太难了。。。不过shiny确实在实现可交互功能的时候非常强大,能够在ui端可视化地实时控制参数进行分析或者自定义绘图。 磕磕绊绊,尽管质量有待提高,最终还是完成了这个插件,Seurat Plugin for TBtools。将Seurat的基本分析流程进行了打包与可视化,能够在ui界面上直接完成从读入标准表达矩阵到数据质控、降维,然后进行细胞分群、marker基因鉴定与可视化等基本的single cell分析流程。 Seurat Plugin for TBtools插件安装方式注意到这是一个 TBtools R-plugin。与其他R插件类似,如果没有安装 Rserver插件,那么需要先安装 Rserver 插件(可以直接在 TBtools Plugin Store 找到并安装)。 安装完成后,打开插件。进入方式非常简单,你只需要点一下 Start 。 1. 上传数据输入表达量数据,目前支持两种格式的表达量文件
2. 数据预处理以及创建Seurat对象上传完数据之后,在右边的“Data Preview”中会展示count矩阵,用户可以自行浏览或者检索。由于单细胞数据量(细胞数目)一般非常大,因此我们只展示了前30个细胞的数据。 接下来对数据进行预处理,过滤掉一些不表达的基因以及基本没有表达基因的细胞,一定程度可以去除一些异常值,加速下游的计算。通常这一步我们过滤两个指标:
预处理完数据之后,后台自动对其构建Seurat对象。 质控质量控制。这一步我们对数据的一些QC指标进行可视化,用户可以根据可视化图片判断自己的数据是否正常。此外,我们提供了一个接口,用户可以在QC step1中计算一些基因在所有细胞中表达的比例,例如计算线粒体基因表达比例,其是过滤异常细胞的一个常用指标。一般我们认为线粒体基因表达过高的细胞,是一个处于应激或者其他不好状态的细胞,需要将其过滤。也可以计算核糖体基因等的表达情况。 Step1:计算线粒体(或者其他基因)的表达比例这里我们以线粒体基因为例。拟南芥基因组中(TAIR10)的线粒体基因为ATMG开头,因此我们可以用正则表达式“^ATMG”来匹配拟南芥中所有线粒体基因。如果是人类,线粒体基因则以MT-开头,小鼠以mt-开头。我们提供了两种基因检索方式:
Tips:如果你研究的物种并不是拟南芥等模式物种,我们该怎么确定它的线粒体基因呢?
Step2:QC指标的可视化根据QC指标过滤异常细胞 在Step2中,我们对几个QC指标进行了可视化,其中包括Step1中用户指定计算的基因表达量(如线粒体)。可视化的指标如下:
接着根据线粒体基因比例和每个细胞检测到的基因数目进行细胞过滤。线粒体基因表达过高的细胞一般是异常细胞,而检测到基因数目异常过高的细胞,大概率是双胞(doublets,一个文库中存在两个细胞的情况,会对后续的分群和细胞鉴定造成影响和误导,需要剔除。当然有专门的doublets预测软件,如DoubletFinder等) 注意:示例数据使用的是拟南芥根尖的公共数据,该套数据已经经过质控,因此QC指标基本正常,并不存在异常值。 查看单细胞数据的质量 我们也对特征值进行了相关性分析,并可视化。用户可以根据nFeature_RNA和nCount_RNA的相关性进行大致判断自己的数据是否正常,理论上一个细胞测得的UMI越多,其测得的基因应该也越多,因此这两个指标应该是强正相关。 数据标准化与归一化在对数据进行降维之前,需要对数据进行处理,即三步法:Normalization,Find Variable Genes以及Scale。通常情况下,默认只是标准化2000个高变基因,运算速度更快,不影响 PCA降维和细胞分群。对数据进行scale,可以消除极高表达的基因的影响。在Seurat plugin中,用户可以直接点击start按钮进行一键化跑三步法。 PCA线性降维对处理过后的数据进行pca降维,默认计算前50个主成分。用户点击PCA降维按钮之后,会实时可视化展示PCA结果。 细胞聚类在进行细胞聚类之前,我们首先要确定好两个参数:1,使用的PC个数;2,Resolution(分辨率)。
个人项目经验,如果Resolution选取较小,则分群较少,会将一些相似的细胞类群合并成一个大的cluster,从而对后续的细胞类型鉴定造成困扰,丢失一些细胞类型信息。而Resolution过大,则会将cluster分的过多,加大后续细胞类型鉴定的难度。因此我们一般会将Resolution选择在中等稍微偏大一点的值,鉴定细胞类型的时候,可以将具有相同marker基因,且在umap/tSNE上距离相近的cluster归为同一个细胞类型。 确定好PC数目和Resolution之后,则可以点击按钮进行细胞聚类。 UMAP/tSNE非线性降维细胞聚类完成之后,用户可以点击按钮进行UMAP/tSNE非线性降维,并对其进行可视化。 marker基因鉴定/差异表达分析marker基因鉴定,本质上其实是进行差异分析,鉴定每个cluster的差异表达基因(差异上调,往往cluster的marker基因是只在该cluster中特异表达,而在其他cluster中不表达。因此鉴定marker的时候,我们通常会设置only.pos=TRUE,即只保留差异上调基因)。在该模块中,提供了三种鉴定marker基因的模式。
marker基因可视化鉴定好marker基因之后,用户可以在该模块中,对感兴趣的marker基因进行各种可视化,分析其是否确实在某些cluster中特异表达,而在其他cluster中不表达。
写在最后磕磕绊绊,最终还是写完了这个插件。虽然写的确实很烂,功能也非常简单,但在写这些代码的折腾中,确确实实能感受到收获了新的东西,接触到了新的网页工具开发方式(shiny跟html和php等网站开发确实不一样。。。) 。Seurat Plugin for TBtools,确实还有许多需要改进的地方以及新增的功能,后续也会抽空慢慢将其完善,副教授说“优秀的产品都是一步一步优化的”哈哈,希望自己也能像产品一样,”一步一步优化“! 接触了shiny才发现,用其与R脚本结合,搭建实时可交互的网页/插件工具确实非常强大,后续也会慢慢摸索,尝试将单细胞分析中常用的几个包写成插件,顺便继续磨炼一下自己的能力。。我果然还是太菜了。。 博士生涯转眼已过一半,临近过年,希望各位老板舒舒服服过个好年,来年再战! |
|