跳至章节信息跳至正文
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

降维

🧠 关键要点
⚙️ 环境设置
步骤
yml
  1. 安装 conda:

    • 在创建环境之前,请确保 conda 已安装在您的系统中。

  2. 保存 yml 内容:

    • 将 yml 选项卡中的内容复制到名为 environment.yml。

  3. 创建环境:

    • 打开终端或命令提示符。

    • 运行以下命令:

      conda env create -f environment.yml
  4. 激活环境:

    • 创建好环境后,使用以下命令激活它:

      conda activate <environment_name>
    • 请将 <environment_name> 替换为 environment.yml 文件中指定的环境名称。该名称在 yml 文件中如下所示:

      name: <environment_name>
  5. 验证安装:

    • 通过运行以下命令,检查环境是否创建成功:

      conda env list
🗄️ 获取数据和笔记本

本书使用 lamindb 来存储、共享和加载数据集与笔记本,所用实例为 theislab/sc-best-practices 实例。我们感谢以下平台提供的免费托管:Lamin Labs。

  1. 安装 lamindb

    • 安装 lamindb Python 软件包:

    pip install lamindb
  2. 可选择创建 Lamin 账户

  3. 验证你的设置

    • 运行 lamin connect 命令:

    import lamindb as ln
    
    ln.Artifact.connect("theislab/sc-best-practices").df()

    你现在应该能看到最多 100 个已存储的数据集。

  4. 访问数据集(Artifact)

    • 在以下页面搜索数据集:Artifacts 页面

    • 加载一个 Artifact 及其对应的对象:

    import lamindb as ln
    af = ln.Artifact.connect("theislab/sc-best-practices").get(key="key_of_dataset", is_latest=True)
    obj = af.load()

    该对象现在已可在内存中访问,并可用于分析。请调整 lamindb.Artifact.connect("theislab/sc-best-practices").get("SOMEIDXXXX") 后缀,以获取相应版本。

  5. 访问笔记本(Transform)

    lamin load <notebook url>

    该命令会将笔记本下载到当前工作目录。与 Artifacts 类似,你也可以调整后缀 ID 来获取旧版本。

单细胞 RNA 测序(single-cell RNA sequencing, scRNA-seq) 是一种高通量 测序 技术,它会产生在细胞数和基因数上都具有高维度的数据集。因此,scRNA-seq 数据深受“维度灾难(curse of dimensionality)”之苦。

并非所有基因都有信息量,因此并非所有基因对聚类(clustering)等任务都是必需的。我们此前已通过特征选择(feature selection)来降低数据的维度。下一步,我们将用降维(dimensionality reduction)算法进一步降低单细胞 RNA-seq 数据的维度。这些算法是预处理过程中的重要一步,用于降低数据复杂度并便于可视化。

降维

图 1:降维将高维数据嵌入(embedding)到一个低维空间中。这种低维表示在维度尽可能少的同时,仍能捕捉数据的底层结构。这里我们将一个三维物体投影到二维来加以展示。

Xiang 等人独立比较了 10 种不同降维方法的稳定性、准确性和计算成本 Xiang et al., 2021。他们建议使用 t 分布随机邻域嵌入(t-distributed stochastic neighbor embedding, t-SNE),因为它的整体表现最佳。统一流形近似与投影(uniform manifold approximation and projection, UMAP)则显示出最高的稳定性,并能最好地将原始细胞群分开。此外,还有一种值得一提的降维方法是主成分分析(principal component analysis, PCA),它至今仍被广泛使用。

一般来说,只要使用特定的初始化设置,t-SNE 和 UMAP 都非常稳健,并且在很大程度上是等价的。Kobak & Berens, 2019。

上述所有方法都在 scanpy 中实现。

现在,我们首先导入所有所需的 Python 软件包,然后加载数据集,该数据集已先后经过 质量控制(quality control, QC),归一化(normalization),以及 特征选择。

import lamindb as ln
import scanpy as sc

# Suppress verbose logging from Scanpy
sc.settings.verbosity = 0

# Set figure parameters for clean, minimal plots
sc.settings.set_figure_params(dpi=80, facecolor="white", frameon=False)

assert ln.setup.settings.instance.slug == "theislab/sc-best-practices"

ln.track()
输出
→ connected lamindb: theislab/sc-best-practices
→ loaded Transform('liGMVGre4G5H0000'), re-started Run('ZFh04bqi...') at 2025-05-13 03:27:34 UTC
→ notebook imports: lamindb==1.3.2 scanpy==1.11.1
af = ln.Artifact.connect("theislab/sc-best-practices").get(
    key="preprocessing_visualization/s4d8_feature_selection.h5ad", is_latest=True
)
adata = af.load()

我们将使用前一章保存的 scran 归一化层进行降维和可视化;该层已按 scran 估计的大小因子(size factor)缩放,并做了 log1p 变换。

adata.X = adata.layers["scran_normalization"]

下面开始具体分析:

PCA

在我们的数据集中,每个细胞都是一个 n_var 维向量空间中的一个向量,该空间由某组标准正交基(orthonormal basis)张成。由于 scRNA-seq 受“维度的诅咒”影响,我们知道并非所有特征对理解数据集的底层动态都重要,而且其中存在固有的冗余 Grün et al., 2014。PCA 通过对原始数据集进行正交变换(orthogonal transformation),构造出一组新的、互不相关的变量,即所谓的主成分(principal component, PC)。各主成分是原始数据集中各特征的线性组合,并按方差由大到小排序以定义该变换。在排序中,第一个主成分通常捕获最大的方差。方差最小的主成分会被舍弃,从而在不丢失信息的前提下有效降低数据的维度。

PCA 的优点是可解释性强、计算高效。然而,scRNA-seq 数据集因漏检事件而相当稀疏,从而呈现高度非线性,因此用 PCA 这种线性降维技术来做可视化并不十分合适。PCA 通常用于选出排名前 10–50 的主成分,供下游分析任务使用。

# setting highly variable as highly deviant to use scanpy 'use_highly_variable' argument in sc.pp.pca
adata.var["highly_variable"] = adata.var["highly_deviant"]
sc.pp.pca(adata, svd_solver="arpack", mask_var="highly_variable")
sc.pl.pca_scatter(adata, color="total_counts")
<Figure size 320x320 with 2 Axes>

t-SNE

t-SNE 是一种基于图的非线性降维技术,它将高维数据投影到 2D 或 3D 分量上。该方法依据数据点之间的高维欧氏距离(Euclidean distance)定义一个高斯分布(Gaussian distribution)。随后,用 Student t 分布(Student's t-distribution)在低维空间中重建该概率分布,并通过梯度下降(gradient descent)来优化低维嵌入。

sc.tl.tsne(adata, use_rep="X_pca")
sc.pl.tsne(adata, color="total_counts")
<Figure size 320x320 with 2 Axes>

UMAP

UMAP 是一种基于图的非线性降维技术,原理上与 t-SNE 类似。它构建数据集的高维图表示,并优化低维图表示,使其在结构上尽可能与原始图相似。

我们首先计算 PCA,然后基于数据创建一个邻域图。

sc.pp.neighbors(adata)
sc.tl.umap(adata)
sc.pl.umap(adata, color="total_counts")
<Figure size 320x320 with 2 Axes>

检查质量控制指标

现在,我们还可以在 PCA、t-SNE 或 UMAP 图中检查先前计算的质量控制指标,从而有可能识别出低质量细胞。

sc.pl.umap(
    adata,
    color=["total_counts", "pct_counts_mt", "scDblFinder_score", "scDblFinder_class"],
)
<Figure size 1545.6x320 with 7 Axes>

双细胞(Doublet)得分较高的细胞会被投影到 UMAP 中的同一区域。我们暂时把它们保留在数据集中,但一般来说,这提示可能需要重新审视质量控制策略,以确保尽量少地保留双细胞。

af = ln.Artifact(
    adata,
    key="preprocessing_visualization/s4d8_dimensionality_reduction.h5ad",
    description="anndata after dimensionality reduction",
).save()
af
输出
→ creating new artifact version for key='preprocessing_visualization/s4d8_dimensionality_reduction.h5ad' (storage: 's3://lamin-eu-central-1/VPwcjx3CDAa2')
! The cache path /Users/seohyon/Library/Caches/lamindb/lamin-eu-central-1/VPwcjx3CDAa2/preprocessing_visualization/s4d8_dimensionality_reduction.h5ad already exists, replacing it.
Artifact(uid='6MXF3Uy8DkG9wy720002', is_latest=True, key='preprocessing_visualization/s4d8_dimensionality_reduction.h5ad', description='anndata after dimensionality reduction', suffix='.h5ad', otype='AnnData', size=4530494307, hash='E-h2bZDOxSnEFWk1reXptw', space_id=1, storage_id=1, run_id=10, created_by_id=5, created_at=2025-05-13 03:31:03 UTC)

贡献者

我们衷心感谢以下人员的贡献:

作者

  • Anna Schaar

  • Seo H. Kim

审阅者

  • Lukas Heumos

References
  1. Bellman, R., Bellman, R. E., & Corporation, R. (1957). Dynamic Programming. Princeton University Press. https://books.google.de/books?id=rZW4ugAACAAJ
  2. Xiang, R., Wang, W., Yang, L., Wang, S., Xu, C., & Chen, X. (2021). A Comparison for Dimensionality Reduction Methods of Single-Cell term`RNA`-seq Data. Frontiers in Genetics, 12. 10.3389/fgene.2021.646936
  3. Kobak, D., & Berens, P. (2019). The art of using t-SNE for single-cell transcriptomics. Nature Communications, 10(1), 5416. 10.1038/s41467-019-13056-x
  4. Grün, D., Kester, L., & Van Oudenaarden, A. (2014). Validation of noise models for single-cell transcriptomics. Nature Methods, 11(6), 637–640.