基因筛选概述:为什么我们非筛不可
基因筛选,说白了就是从数万个基因里,挑出真正有“戏”的那一小部分。我刚开始做单细胞分析时,总觉得筛选很麻烦——数据都测出来了,为什么还要筛?直到第一次拿到原始表达矩阵,看到三万多个基因密密麻麻排在一起,才明白什么叫无从下手。
基因筛选的定义其实很简单:根据特定规则,从全转录组中选出与当前生物学问题最相关的基因子集。规则可以是统计指标,也可以是先验知识,甚至是你对数据的直觉判断。嗯,这里要注意——筛选不是乱砍乱伐,而是有策略的特征选择。
你想想看,如果把所有基因都塞进下游分析,不仅计算开销大,更麻烦的是噪声会淹没真正的信号。我在一个空间转录组项目里遇到过这种情况:不做筛选直接聚类,结果所有spot糊成一团,空间模式完全看不出来。后来做了基因筛选,才找到那群只在肿瘤边界表达的标记基因。
筛选目的:三个核心诉求
个人习惯把基因筛选的目的归纳为三类,我建议你每次做分析前都想清楚,这次到底是为了什么而筛:
- 降噪提效:原始数据里多数基因表达量低、变异小,对下游分析贡献不大。去掉它们,计算更快,结果也更干净。我在处理10万级细胞的数据集时,筛选后从3万降到3000个基因,聚类时间从4小时缩短到20分钟。
- 生物标志物发现:寻找在不同细胞类型、状态或空间区域间差异表达的基因。这类筛选通常配合统计检验,目标是找到区分度高的特征。
- 生物学解释:保留与通路、功能或疾病相关的基因子集。我有个项目需要分析代谢重编程,就只筛选了KEGG代谢通路中的基因,结果解释起来特别顺。
| 目的类别 | 典型场景 | 常用方法 |
|---|---|---|
| 降噪提效 | 大规模聚类、UMAP降维 | HVG选择、表达量阈值 |
| 生物标志物 | 细胞类型注释、疾病诊断 | 差异表达分析、LFC排序 |
| 生物学解释 | 通路富集、调控网络 | 先验基因集、基因本体过滤 |
个人经验:多数情况下,我建议做两轮筛选。第一轮用统计指标(如方差、平均表达量)快速缩小范围,第二轮再用领域知识精挑细选。这样既快又准。
常见应用之一:寻找标记基因
标记基因是定义细胞身份的关键。比如你知道PTPRC(CD45)是所有免疫细胞的标志,CD3E是T细胞的标志。但在真实数据里,这些基因的表达模式可能不那么完美——有的细胞类型还没找到特异的标记,有的标记基因在多个类型间共享表达。
寻找标记基因的核心逻辑,是找出那些在某一类细胞中高表达,在其他类中低表达甚至不表达的基因。常用的指标包括log2倍变化和调整后的p值。
# 伪代码:标记基因筛选逻辑
select_markers(expression_matrix, cell_labels):
for each gene:
for each cluster:
compute_logFC = mean(cluster) - mean(other_clusters)
compute_pvalue = wilcoxon_test(cluster vs other)
keep_if(logFC > 1 & p_adj < 0.05)
return top_10_genes_per_cluster
嗯,这里有坑要注意。我遇到过好多次,某个基因在差异分析中排名第一,但实际表达量极低,只有几个细胞在表达。这种基因靠统计检验算出来的显著性其实很假。所以我每次都会加一个平均表达量的阈值,比如要求基因在所有细胞中的平均表达量至少大于0.1。
避坑指南:我曾在一次免疫肿瘤项目中,差一点把某个只在三个细胞里表达但统计p值极小的基因当作新发现的T细胞亚群标记。幸好看了violin图,才发现那可能是双胞或技术伪影。记住:统计显著性 ≠ 生物学显著性。
常见应用之二:空间变量基因
空间转录组的出现,让基因筛选有了新维度——位置信息。空间变量基因,是指在组织中表达具有空间模式的基因。换句话说,它的表达量不是随机分布,而是随着空间位置有规律地变化。
我参与过的一个脑组织空间项目,就通过筛选空间变量基因,找到了几个只在皮层特定层表达的基因。这些基因在普通单细胞数据里根本看不出来,因为单细胞丢了空间坐标。
识别空间变量基因的常见方法,是计算每个基因的“空间自相关”程度。简单理解:如果一个基因在空间近邻的spots之间表达相似,那它更可能是空间变量基因。具体指标有Moran's I、Geary's C等。
# 空间变量基因筛选示例(概念)
# 计算每个基因的 Moran's I 统计量
moran_i(gene_expression, spatial_weights_matrix)
# 保留 p_adj < 0.05 且 I > 0 的基因
spatial_variable_genes = [g for g in genes if moran_padj(g) < 0.05 & moran_i(g) > 0]
注意事项:空间变量基因筛选对组织切片质量非常敏感。如果组织有空泡、折叠或边缘破损,空间权重矩阵会出错,导致假阳性。我建议先做质量控制的Spot过滤,再做基因筛选。
讲到这里,你会发现基因筛选其实不是单一的步骤,而是贯穿整个分析流程的多个决策点。我自己习惯把筛选分为“粗筛”和“精筛”两个阶段:粗筛用统计指标快速剔除明显无用的基因;精筛则结合生物学问题,从候选基因里挑出最相关的子集。
你看这个流程,从原始矩阵开始,经过粗筛缩小范围,再针对不同目的做精筛,最后一定要回到可视化验证。我曾经踩过最大的坑,就是筛完基因直接跑下游分析,图出了觉得不对劲,回头一看——筛选阈值设错了,把一群有生物学意义的低表达基因全干掉了。所以从现在开始,每一次筛选后,都花五分钟看看violin图和feature plot,值不值得?我觉得非常值。