EVBioX 第七期 |单细胞降维与聚类全攻略

“第一次把 RNA‑seq 高维矩阵拖进 UMAP,屏幕就像放烟花——杂乱无章的点忽然排成星座。”

0. 前言:在高维丛林里找路

在传统转录组数据里,我们面对的变量可能是几十或几百个基因,但在单细胞 RNA-seq 中,每个细胞就是一个高维样本,维度通常高达上万。这样的数据让我们“看不见摸不着”全局结构,因此需要用到**降维(Dimensionality Reduction)聚类(Clustering)**这两个工具。

降维,是为了从高维空间中提取最具代表性的信息,让我们可以在二维或三维图中一眼识别出不同细胞群体;而聚类,是在降维后的空间中将相似细胞分组,为后续的细胞类型注释打下基础。

在本期中,我们将从概念讲起,结合 R 和 Python 的实操代码,帮助大家搞清楚:“什么是降维和聚类?常见的方法有哪些?如何根据数据选择合适的工具和参数?”

1. 降维篇

1.1 降维的意义和背景

高维数据常常面临“维度灾难”,也就是说,随着维度增加,数据点之间的距离逐渐趋同,传统的相似性度量(如欧几里得距离)逐渐失效。这会直接影响聚类、可视化等分析效果。

降维的目标就是在保留关键信息的同时,去除冗余或噪音维度,从而让数据在低维空间中更易处理、理解和呈现。

不同分析目标需要不同的降维程度:

  • 可视化(Visualization):通常压缩成 2-3 维,便于绘图和直观观察。

  • 特征提取 / 去噪(Feature Extraction):通常保留 10-50 个维度,兼顾计算效率和信息含量。

  • 下游分析(如聚类、轨迹推断):依赖降维后的特征空间。

1.2 降维方法概览

目前常用的降维方法可以分为线性和非线性两大类:

类型代表算法What‘s Cool什么时候上场
线性PCA / ICA快、可解释预处理、快速扫雷
非线性t‑SNE / UMAP / PHATE保流形、成像好看细胞亚群可视化、连续谱系
拓扑Diffusion Map拓扑稳定发育轨迹、干细胞渐变
深度scVI / scANVI学习噪声、批次整合海量样本、异构数据

🔍 名词解释:

  • PCA(主成分分析):通过线性变换找到最大方差方向,是最基础的降维工具。

  • t-SNE:专注保留局部结构,适合展示紧凑类群,但不太适合展示全局结构。

  • UMAP:兼顾局部与全局,速度快,几乎是目前 scRNA-seq 可视化的默认首选。

  • PHATE:能较好展示“发展轨迹”类结构,尤其适合时间序列或连续分化数据。

参考文献推荐:Frontiers in Genetics 2021 比较了10种降维算法(doi:10.3389/fgene.2021.646936),指出 UMAP 在运行效率和局部结构保真度上表现最优。

1.3 降维实战技巧

算法必调参数经验值 / 提醒
PCAn_components取累计解释方差 ≈ 80% 或拐点处
t‑SNEperplexity样本 1 k → 30;样本 10 k → 50
learning_rate通常 200–1000;过低易团成一坨
UMAPn_neighbors15–50;越大越看全局
min_dist0.1–0.5;越小簇越紧

此外,还有一些评估降维效果的方法:

  • 累计方差曲线(用于 PCA)

  • kNN 保留率:查看邻近结构是否在低维空间中仍得以保留

  • Trustworthiness / Continuity:量化高低维之间的一致性

📦 实操代码示例

pbmc <- RunPCA(pbmc, npcs = 50)
pbmc <- RunUMAP(pbmc, dims = 1:30, n.neighbors = 30, min.dist = 0.3)
DimPlot(pbmc, reduction = "umap", group.by = "seurat_clusters")
sc.tl.pca(adata, svd_solver='arpack')
sc.pp.neighbors(adata, n_neighbors=30, n_pcs=30)
sc.tl.umap(adata, min_dist=0.3)
sc.pl.umap(adata, color='leiden')


2. 聚类篇

2.1 聚类的意义

聚类是指将一组数据分成多个“内部相似、外部差异”的子集,常用于识别不同细胞类型、状态或稀有亚群。在 scRNA-seq 分析中,聚类是细胞注释、差异分析、轨迹推断的关键前提。

值得注意的是,聚类是无监督的,意味着我们并不知道这些细胞应该怎么分组,算法是基于数据本身的相似性做出划分。

  • Who are you? 细胞类型 / 状态

  • Where is the rare one? 罕见亚群挖掘

  • How do they change? 动态节点与轨迹分支

2.2 聚类方法类型

范式算法脑洞原理调参焦点优点 vs. 坑
图‑社区Louvain / LeidenkNN 图 + 模块度k, resolution快、可拆小簇;高分辨率易碎片
密度DBSCAN / HDBSCAN“高人堆成团,僧少算孤”eps, min_samples抓不规则形;稀疏难调
层次Ward不断合并最近邻linkagedendrogram 直观;大数据慢
原型K‑means / GMM找中心 / 高斯混合k, init简单粗暴;球型假设

📌 推荐使用 Leiden 聚类,它是 Louvain 的改进版,分群更稳定,并且已在 Scanpy 和 Seurat 中广泛支持。

2.3 聚类实战

操作流程通常包括:

  1. 建邻居图:降维后 kNNk = 8–30

  2. 扫分辨率resolution 连跑 0.2–2,看颗粒度。

  3. 评价优劣:Silhouette、Adjusted Rand、marker 基因一致性。

pbmc <- FindNeighbors(pbmc, dims = 1:30, k.param = 20)
pbmc <- FindClusters(pbmc, resolution = 0.5)
DimPlot(pbmc, reduction = "umap", label = TRUE)
sc.pp.neighbors(adata, n_neighbors=20, n_pcs=30)
sc.tl.leiden(adata, resolution=0.5)
sc.pl.umap(adata, color='leiden')

3. 实例:PBMC 3k 的降维与聚类

我们以经典的 PBMC(外周血单个核细胞)3k 数据集为例,跑一遍全流程:

  • 下载数据:SeuratData::InstallData("pbmc3k")

  • 执行标准流程:QC → 归一化 → 选择高变基因 → PCA → UMAP → Leiden 聚类

  • 注释细胞类型:通过 marker gene(如 CD3D, MS4A1, NKG7)识别 T/B/NK 细胞

进阶玩法:

  • resolution 多档跑,选最稳定方案

  • 对较大簇进行“子聚类”

  • 清理线粒体比例过高的双细胞群体


4. 延伸阅读

  • 降维新秀:scGLUE、DestVI、CELLBENDER

  • 深度聚类:scDeepCluster, GraphSAGE

  • Benchmark 数据集:dynverse、scIB、Human Cell Atlas

5. 小结

降维和聚类,是单细胞分析中“化繁为简”的关键一环。它们让我们看清高维数据背后的生物逻辑,也为后续注释和下游分析奠定了坚实基础。

下一期我们将进入“单细胞注释”模块,欢迎继续关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EVBioX

如果有收获,欢迎打赏支持创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值