高变基因与 PCA:抓住主要变化
按 Seurat 教程去掉极少检测到的基因后,pbmc3k 仍有 13,714 个基因。大多数基因要么几乎不表达,要么只在细胞间随机波动。先挑出信息量最大的几千个高变基因,再用 PCA 把它们压缩成几十个主成分,后面的聚类和 UMAP 都在这几十维上进行。
高变基因:先挑信息量大的基因
最直接的想法是挑方差最大的基因,但计数数据有个特点:表达越高,方差天然越大。直接按方差排序,选出来的大多只是高表达基因。
Seurat 的 vst 方法先拟合所有基因“方差随均值变化”的趋势,再看每个基因比趋势高出多少,取偏离最大的前 2,000 个。组件的均值–方差图上,高变基因被单独标出。在 Seurat 教程的 pbmc3k 结果里,排在前面的是 PPBP、LYZ、S100A9、GNLY 这类细胞类型特异的基因:它们只在血小板、单核细胞或 NK 细胞里高表达,细胞间差异自然很大。
obj <- FindVariableFeatures(obj, selection.method = "vst", nfeatures = 2000)
PCA:把两千维压到几十维
先用 ScaleData 把每个基因标准化,再在高变基因上做 PCA。PCA 找一组相互正交的方向:PC1 是细胞间变异最大的方向,PC2 是与 PC1 垂直的方向中变异最大的,依此类推。每个 PC 是基因的加权组合,权重(loading)告诉你哪些基因在驱动它。
在 Seurat 教程的 pbmc3k 结果中,PC1 的一端是 CST3、TYROBP 等髓系基因,另一端是 LTB、IL7R 等淋巴细胞基因;PC2 区分 B 细胞(CD79A、MS4A1)与 NK 和细胞毒性细胞(NKG7、GZMB)。PC 的正负号是任意的,换个软件可能整体翻转。在组件里把 PC1/PC2 散点图分别按 LYZ、MS4A1、NKG7 着色,可以亲眼看到这一点。
保留几个 PC?碎石图(elbow plot)显示每个 PC 解释的方差,曲线变平的位置是一个参考。pbmc3k 教程用前 10 个。稀有群体(如树突状细胞、血小板)的信号可能落在靠后的 PC 上,Seurat 教程的建议是宁多勿少。
常见误区
- 把高变基因的数量当成事实。 2,000 是参数,1,000 到几千都常见;关键结论不应只在某一个数量下成立。
- 不做 ScaleData 就做 PCA。 高表达基因会主导主成分。
- 以为一个 PC 就是一种细胞类型。 PC 是方差方向,常常同时反映几种细胞的差异。
- PC 选得太少。 稀有群体会被并进大群,在后面的聚类里消失。
- 忽视由技术因素主导的 PC。 如果某个 PC 的 loading 主要是线粒体基因或应激基因,或与 nCount_RNA 高度相关,它反映的是实验而不是生物学。