做生信分析这行,我也算是摸爬滚打了十五年。最近不少刚入行的朋友在后台问我,说拿到GEO数据库里的单细胞数据后,看着那一堆密密麻麻的数字头都大了,不知道从哪下手。其实,核心就在那个所谓的“表达矩阵”上。今天我不讲那些高大上的理论,就结合我经手的几个真实项目,聊聊怎么把这个geo的单细胞测序表达矩阵玩明白,少走弯路。
首先得纠正一个误区,很多人以为下载下来的文件直接扔进Seurat或者Scanpy就能跑通。大错特错。GEO上的数据格式五花八门,有的作者上传的是经过预处理的counts,有的是原始fastq,甚至有的连metadata都缺失。我去年接的一个肿瘤微环境项目,客户直接给了一个TSV文件,看着像矩阵,结果里面混杂了大量的非编码RNA注释错误,导致后续聚类完全跑偏。所以,第一步不是分析,而是“验货”。
拿到数据后,第一件事是确认矩阵的维度。真正的geo的单细胞测序表达矩阵,行通常是基因,列是细胞。但你要小心,有些平台上传的是转置后的数据,或者包含了一些质量控制前的低质量细胞。我在处理一个免疫细胞数据集时,发现列名里混入了很多以“S”开头的样本ID,这其实是测序批次信息,如果不剔除,后续做批次校正时会被误认为是生物学差异。这时候,你得用R语言里的Read.table或者Python的Pandas库,先把数据读进来,检查一下行列名是否规范。
接下来是数据清洗。这一步最考验耐心。很多新手在这里偷懒,直接跳过QC(质量控制)。记住,垃圾进,垃圾出。你需要根据线粒体基因比例、UMI数量、基因数量这三个指标,画出散点图。一般来说,线粒体比例超过10%-20%的细胞,大概率是死细胞或破损细胞,必须剔除。我有个客户的项目,因为没剔除这些低质量细胞,导致后续的差异基因分析里,大量上调的基因都是线粒体相关的,这显然不是生物学意义上的差异,而是技术噪音。
清洗完数据,就是标准化的关键步骤。这里要提到一个细节,很多教程只说用LogNormalize,但对于geo的单细胞测序表达矩阵来说,如果数据中存在大量的零值(dropout效应),简单的对数转换可能不够。这时候,可以考虑使用SCTransform,它基于负二项式回归模型,能更好地处理技术变异。我在处理一个发育生物学的数据时,用了SCTransform后,细胞聚类的分辨率明显提高了,原本混在一起的几个亚群终于分开了。
然后是降维和聚类。PCA是基础,但别忘了看PCs的选择。不要盲目取前30个PC,要根据碎石图(Scree Plot)或者JackStraw plot来决定。我见过太多人直接取前20个,结果把噪声当成了信号。聚类算法方面,Louvain和Leiden是主流,但分辨率参数(resolution)需要根据数据量调整。数据量大时,分辨率设低一点,避免过度分割;数据量小时,设高一点,捕捉细微差异。
最后,差异表达分析。这一步出来的结果,才是你写文章的核心。但要注意,差异基因筛选时,不要只看p值,还要看logFC(对数倍数变化)。有时候p值很小,但logFC只有0.1,这种差异在生物学上可能毫无意义。我习惯设定logFC > 0.25且p.adjust < 0.05作为初步筛选标准,然后再结合文献和通路富集分析,筛选出真正有故事基因。
说到这,可能还是有朋友觉得头大。毕竟从原始数据到最终图表,中间涉及的细节太多了。比如批次效应如何去除?不同平台的数据如何整合?这些都需要丰富的经验。如果你手头有复杂的geo的单细胞测序表达矩阵搞不定,或者分析结果总是不理想,不妨找个靠谱的人聊聊。别为了省那点咨询费,最后浪费了宝贵的时间和样本数据。分析数据就像看病,找对医生,才能药到病除。
本文关键词:geo的单细胞测序表达矩阵