1. Spot过滤简介:什么是Spot过滤,在空间转录组中的核心应用场景
说实话,我刚接触空间转录组那会儿,拿到原始数据的第一反应就是——直接跑聚类、找差异基因。结果呢?出来的图惨不忍睹,要么背景噪声淹没了信号,要么低质量的spots把整个空间模式搅得一团糟。
后来我才明白,空间转录组分析的第一步,也是最容易被忽略的一步,就是Spot过滤。
1.1 什么是Spot过滤
简单说,Spot过滤就是从原始数据中筛选出真正承载了有效组织信息的spots,剔除那些背景噪音、组织边缘残留、或技术上失败的捕获点。
你想想看,一张空间转录组芯片上可能有几千甚至上万个spots。但其中有不少spots落在载玻片上、落在组织褶皱处、或者本身捕获效率就很低。如果不对这些低质量spots做处理,后续所有分析都会被带偏。
我记得在某个项目中,我们处理的是FFPE样本的Visium数据。一开始没做严格的过滤,结果差异基因列表里冒出了一堆线粒体基因。排查了半天才发现,是那些坏掉的spots贡献的假信号。
1.2 空间转录组的数据长什么样
在做过滤之前,得先搞清楚我们面对的是什么数据。空间转录组数据的核心是计数矩阵,行是spots,列是基因。
# 典型的Visium计数矩阵概览(行列转置后)
# 行:spot barcodes | 列:基因名称
# ┌──────────┬──────┬──────┬──────┐
# | barcode | MALAT1 | ACTB | GAPDH | ...
# ├──────────┼──────┼──────┼──────┤
# | AAACAACGA | 128 | 56 | 89 | ...
# | AAACAACTG | 0 | 2 | 1 | ... # 这个spot可能有问题
# | AAACAAGTA | 345 | 201 | 178 | ...
# └──────────┴──────┴──────┴──────┘
每个spot附带一个barcode,同时还有空间坐标信息。过滤的基础就建立在这两个层面:表达层面的质量和空间层面的合理性。
1.3 核心应用场景:什么时候需要Spot过滤
我建议大家在下面几个场景中,一定要把Spot过滤放到分析流程的前端:
- 质控阶段:移除UMI count过低、基因数过少的spots
- 组织区域识别:剥离背景spots(落在非组织区域的捕获点)
- 差异分析前:剔除异常值对统计检验的干扰
- 空间聚类:过滤掉噪声spots可以提高聚类分辨率
- 细胞类型推断:混合信号严重的spots会影响推断精度
说白了,Spot过滤是一个前置的“净化”步骤。它不炫技,但非常实用。
1.4 判断一个Spot质量好坏的核心指标
我一般在项目中用以下三个指标来做初步过滤:
| 指标 | 含义 | 经验阈值(仅供参考) |
|---|---|---|
| UMI count | 一个spot检测到的总UMI数 | 视测序深度而定,通常>500 |
| Gene count | 一个spot检测到的基因种类数 | 通常>200 |
| 线粒体比例 | 线粒体基因UMI占比 | 通常<20% |
1.5 两种主要的过滤策略
根据我个人的经验,过滤策略可以分为:
- 硬阈值过滤:直接设定UMI、基因数、线粒体比例的上下限,一次性砍掉所有不达标的spots。优点是快,缺点是可能误伤。
- 软过滤(迭代过滤):先对spots做初步聚类或可视化,参考统计学分布(比如中位数绝对偏差MAD)动态调整过滤标准。
我现在的习惯是先做一轮硬阈值快速清理,然后用可视化的方式(比如UMI分布在组织切片上的映射)检查过滤效果,再决定是否需要调整参数。
1.6 知识体系总览
下面这张图是我梳理的Spot过滤在整个空间转录组分析流程中的位置,以及它内部的核心环节。理解了这个框架,后面各章节学起来会更清晰。
1.7 小结:为什么要重视Spot过滤
这几年我做了不少空间转录组项目,从10x Visium到Slide-seq,从新鲜冷冻到FFPE。说句实在话,数据质量决定了分析的下限,而Spot过滤直接决定了数据质量的起点。
你想想看,如果前面这一步没做好,后面那些漂亮的代码、复杂的模型,都是在垃圾数据上“跳舞”而已。我曾经见过不少同学花了大量的时间在调试聚类参数、优化可视化效果,结果最后发现是过滤这一步没做好,白忙活了一个星期。
嗯,本章的核心就这些。掌握好Spot过滤的理念和基础指标,后面的实战技巧才能发挥真正的价值。