前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >单细胞多样本整合之scVI和scANVI

单细胞多样本整合之scVI和scANVI

作者头像
生信菜鸟团
发布于 2023-08-23 00:50:07
发布于 2023-08-23 00:50:07
7K02
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:2
代码可运行

我也有用python做过BBKNN和Harmony:

scVI(Single-Cell Variational Inference)是基于深度学习的整合算法,多次被评价为最佳的整合算法之一。scVI发表于2018年的Nature Methods上,后续经过多次的更新改进,文章题目是《Deep generative modeling for single-cell transcriptomics》。

而scANVI(single-cell ANnotation using Variational Inference)算法和scVI类似,是同一个团队做的算法,发表在2021年的Mol Syst Biol上,文章题目是《Probabilistic harmonization and annotation of single-cell transcriptomics data with deep generative models》。

注意,scVI和scANVI都是用于单细胞转录组数据分析的深度生成模型,它们都是scvi-tools包的一部分。scVI可以用于数据集成、降维、聚类、差异表达等任务,而scANVI可以用于半监督的细胞类型注释,即利用部分已知的细胞类型标签来推断其他细胞的状态(需要预先对每个批次的单细胞数据进行预注释)。scANVI可以看作是在scVI的基础上增加了一个分类器,因此可以从预训练的scVI模型初始化。

  • 官网教程在https://docs.scvi-tools.org/en/stable/tutorials/notebooks/harmonization.html,
  • github在https://github.com/scverse/scvi-tools

需要强调的是用scVI/scANVI整合分析的话比较吃资源,如果有GPU的话速度会快5-10倍;如果没有GPU,仅用CPU运行scVI,还需谨慎。因为CPU模式的scVI运行速度实在是慢,特别是单细胞大样本数据的运行。

一. 环境部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mamba create -n scvi python=3.9
which python
#/home/data/fuli09/miniconda3/envs/scvi2/bin/python

/home/data/fuli09/miniconda3/envs/scvi2/bin/python -m pip install scvi-tools anndata numpy scanpy scib certifi scib-metrics pymde scvi-colab
#Please be sure to install a version of PyTorch that is compatible with your GPU (if applicable).

还需要在python里运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scvi_colab import install

install()

如果需要衔接Jupyter notebook使用的话,需要在scvi这个环境里安装一下几个插件,然后就能在Jupyter notebook里选择scvi这个环境(ps:我用的是JupyterLab,和Jupyter notebook是差不多的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mamba install -y nb_conda_kernels ipykernel
python -m ipykernel install --user --name scvi --display-name scvi

JupyterLab

二. 运行示例数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scanpy as sc
import scvi
from rich import print
from scib_metrics.benchmark import Benchmarker
from scvi.model.utils import mde
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.set_figure_params(figsize=(4, 4))

%config InlineBackend.print_figure_kwargs={'facecolor' : "w"}
%config InlineBackend.figure_format='retina'
Step1. 读入数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata = sc.read(
    "data/lung_atlas.h5ad",
    backup_url="https://figshare.com/ndownloader/files/24539942",
)
adata
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AnnData object with n_obs × n_vars = 32472 × 15148
    obs: 'dataset', 'location', 'nGene', 'nUMI', 'patientGroup', 'percent.mito', 'protocol', 'sanger_type', 'size_factors', 'sampling_method', 'batch', 'cell_type', 'donor'
    layers: 'counts'
Step2. 数据集预处理

该数据集已经按照scIB手稿中的描述进行了处理。通常,scvi工具中的模型期望以与Scanpy/Seurat相同的方式进行标准分析。

值得注意的是高度可变的基因选择问题。虽然scVI和scANVI都可以在运行时使用所有基因,但作者通常建议过滤基因以获得最佳整合性能。同时,这也有助于消除由于批次特异性基因表达而产生的批次特异性变异。

一般来说,用户可以使用Scanpy的标准流程执行高变基因选择。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata.raw = adata  # keep full dimension safe
sc.pp.highly_variable_genes(
    adata,
    flavor="seurat_v3",
    n_top_genes=2000,
    layer="counts",
    batch_key="batch",
    subset=True,
)
Step3. 使用scVI进行整合分析

第一步,根据count数据和batch信息创建模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scvi.model.SCVI.setup_anndata(adata, layer="counts", batch_key="batch")
vae = scvi.model.SCVI(adata, n_layers=2, n_latent=30, gene_likelihood="nb")
#Now we train scVI. This should take a couple of minutes on a Colab session
vae.train()

将结果添加至obsm,命名为X_scVI

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata.obsm["X_scVI"] = vae.get_latent_representation()

最后,对数据集进行聚类,并可视化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.neighbors(adata, use_rep="X_scVI")
sc.tl.leiden(adata)
adata.obsm["X_mde"] = mde(adata.obsm["X_scVI"])
sc.pl.embedding(
    adata,
    basis="X_mde",
    color=["batch", "leiden"],
    frameon=False,
    ncols=1,
)

image-20230723214135712

因为该数据集已做注释,所以这里可以根据注释结果来评价scVI的效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pl.embedding(adata, basis="X_mde", color=["cell_type"], frameon=False, ncols=1)

image-20230723214212112

Step4. 使用scANVI进行整合

作者说,如果输入的数据有预注释的信息,使用scANVI可以产生更准确的整合结果。

由于上述已经训练了一个scVI模型,我们将使用它来初始化scANVI。在初始化scANVI时,我们为它提供labels_key。由于scANVI也可以用于具有部分观察到的注释的数据集,因此我们需要为它指定与未标记细胞对应的类别名称。由于我们没有未标记的细胞,我们可以给它任意一个不是现有细胞类型名称的随机名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lvae = scvi.model.SCANVI.from_scvi_model(
    vae,
    adata=adata,
    labels_key="cell_type",
    unlabeled_category="Unknown",
)
lvae.train(max_epochs=20, n_samples_per_label=100)

将结果添加为"X_scANVI"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata.obsm["X_scANVI"] = lvae.get_latent_representation(adata)

结果可视化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata.obsm["X_mde_scanvi"] = mde(adata.obsm["X_scANVI"])
sc.pl.embedding(
    adata, basis="X_mde_scanvi", color=["cell_type"], ncols=1, frameon=False
)

image-20230723215034705

Step5. 计算整合效果

这里我们使用scIB-metrics包,它包含scIB基准测试套件中使用的度量的可伸缩实现。我们可以使用这些度量来评估集成的质量。

我们可以看到,使用标签信息和scANVI的额外训练改进了捕获生物保护的指标(cLISI, Silhouette标签),而不会牺牲太多的批校正能力(iLISI, Silhouette批)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bm = Benchmarker(
    adata,
    batch_key="batch",
    label_key="cell_type",
    embedding_obsm_keys=["X_pca", "X_scVI", "X_scANVI"],
    n_jobs=-1,
)
bm.benchmark()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bm.plot_results_table(min_max_scale=False)

image-20230723215710408

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = bm.get_results(min_max_scale=False)
print(df)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
              Isolated labels        Leiden NMI        Leiden ARI  \
Embedding                                                           
X_pca                 0.50606          0.724169          0.474548   
X_scVI               0.540021          0.750638           0.58713   
X_scANVI             0.536124          0.771481          0.639793   
Metric Type  Bio conservation  Bio conservation  Bio conservation   

             Silhouette label             cLISI  Silhouette batch  \
Embedding                                                           
X_pca                0.557418               1.0          0.878176   
X_scVI               0.535189          0.994187          0.900951   
X_scANVI             0.588762          0.998546           0.88585   
Metric Type  Bio conservation  Bio conservation  Batch correction   

                        iLISI              KBET Graph connectivity  \
Embedding                                                            
X_pca                0.003306          0.223596           0.728504   
X_scVI               0.111625          0.339272           0.899708   
X_scANVI             0.105794          0.349628           0.922797   
Metric Type  Batch correction  Batch correction   Batch correction   

               PCR comparison Batch correction Bio conservation  \
Embedding                                                         
X_pca                     0.0         0.366716         0.652439   
X_scVI               0.891112         0.628534         0.681433   
X_scANVI             0.809051         0.614624         0.706941   
Metric Type  Batch correction  Aggregate score  Aggregate score   

                       Total  
Embedding                     
X_pca                0.53815  
X_scVI              0.660273  
X_scANVI            0.670014  
Metric Type  Aggregate score  

三. 评价和总结

我用这个算法跑了一下示例数据,还用了自己的数据也试了一下,使用后的第一个想法是,等我以后有钱了,我一定要买一台高配服务器,加GPU的那种。目前贫穷的我,是用不起scvi-tools这种高贵的算法的(纯CPU跑真的很慢,非常焦虑)。

另外,目前scVI可以用R语言运行了,下期推文进行介绍。

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
单细胞测序最好的教程(七): 数据整合与批次效应校正
本教程将是本系列教程中比较有趣的一章,对于大型的单细胞测序项目来说,数据整合也是不可或缺的一个步骤。本教程首发于[单细胞最好的中文教程](https://single-cell-tutorial.readthedocs.io/zh/latest/ ),未经授权许可,禁止转载。
生信技能树jimmy
2023/08/31
3.3K0
单细胞测序最好的教程(七): 数据整合与批次效应校正
单细胞测序数据分析|多样本整合与去批次
上一节我们基于seucat框架学习了单细胞转录组单样本分析,本节我们学习多样本整合去批次的内容。
天意生信云
2025/01/22
1580
单细胞测序数据分析|多样本整合与去批次
单细胞数据分析|差异表达分析
在对单细胞数据进行差异表达分析的时候,可以从全细胞和元细胞两个角度去考虑。基于全细胞目前常见的单细胞转录组计算差异表达基因方法有DESeq2、edgeR、limma、MAST、SCDE (Single Cell Differential Expression)、Seurat (FindMarkers)、Monocle ( differentialGeneTest)、t-SNE/PCA-based methods。其中Seurat和DESeq2是医学研究中最常用的两种方法。基于元细胞的方法有SC3 (Single-Cell Consensus Clustering)、MetaCell。
天意生信云
2025/01/22
1350
单细胞数据分析|差异表达分析
单细胞测序最好的教程(十一):差异表达基因分析|或许比pseudobulk更优
我们在前面注释的章节中,研究了不同细胞的特异性marker(标记)基因,但很多时候,我们更关心在某一类细胞中,两种不同状态下的组别差异,例如药物治疗与未经药物治疗,肿瘤细胞与正常细胞(癌旁)细胞等。因此,我们希望能在单细胞水平上,进行差异表达分析。
生信技能树jimmy
2024/01/05
13K0
单细胞测序最好的教程(十一):差异表达基因分析|或许比pseudobulk更优
单细胞ATAC实战04: 联合scRNA-seq数据给细胞注释
from pathlib import Path import warnings import numpy as np import pandas as pd import scanpy as sc import snapatac2 as snap import scvi import bioquest as bq import sckit as sk 基因组注释文件 gff_file="~/DataHub/Genomics/GENCODE/hg38.v43.chr_patch_hapl_scaf
生信探索
2023/04/11
8430
单细胞测序最好的教程(五):聚类
我们前面四次教程,已经完成单细胞数据的预处理了,包括质控,归一化,高可变基因筛选,降维。现在,我们就要开始单细胞测序的正式分析了,细胞类型注释等,在开始介绍细胞类型注释前,我们先来了解一下聚类。对于生物学家而言,聚类一词可能有点晦涩,因为这个词是机器学习领域里的概念。所以本章将详细讲解聚类的缘由以及意义。
生信技能树jimmy
2023/08/31
2K0
单细胞测序最好的教程(五):聚类
scanpy教程:使用ingest和BBKNN整合多样本
随着单细胞技术的成熟,测序成本的降低,单细胞的数据量和样本量也日益增长。我们知道单细胞转录组的一个主要应用就是解释细胞的异质性,那么,不同器官,不同测序平台,不同物种之间的单细胞数据何如整合分析呢?特别是在单细胞的数据维度这么高的前提下,显然传统的基于回归的方法已经不适用了。于是出现了一批单细胞整合分析的工具,它们大多数是在R生态条件下的。如:
生信技能树jimmy
2020/04/08
5.8K0
scanpy教程:使用ingest和BBKNN整合多样本
单细胞测序最好的教程(五):聚类
我们前面四次教程,已经完成单细胞数据的预处理了,包括质控,归一化,高可变基因筛选,降维。现在,我们就要开始单细胞测序的正式分析了,细胞类型注释等,在开始介绍细胞类型注释前,我们先来了解一下聚类。对于生物学家而言,聚类一词可能有点晦涩,因为这个词是机器学习领域里的概念。所以本章将详细讲解聚类的缘由以及意义。
生信菜鸟团
2023/08/23
1.4K0
单细胞测序最好的教程(五):聚类
课前准备-单细胞联合ATAC数据分析(SnapATAC2)
追风少年i
2024/06/20
2120
课前准备-单细胞联合ATAC数据分析(SnapATAC2)
单细胞测序数据分析|手动注释
之前我们分享过单细胞自动注释包GPTtypecell的使用方法。今天我们详细介绍一下细胞类型注释的内容,并且学习手动注释是如何实现的。
天意生信云
2025/01/22
2760
单细胞测序数据分析|手动注释
单细胞测序最好的教程(六):细胞类型注释
作者按 本教程将是本系列教程中最重要的一章,我们后续所有的单细胞分析,都要基于准确的细胞类型注释。本系列教程首发于“[单细胞最好的中文教程](single_cell_tutorial Readthedocs[1])”,未经授权许可,禁止转载。 全文字数|预计阅读时间: 4500|5min ——Starlitnightly
生信菜鸟团
2023/08/23
1.5K0
单细胞测序最好的教程(六):细胞类型注释
单细胞多样本整合之R语言版scVI
上个帖子简单介绍了scVI和scANVI,以及其python环境部署,并尝试运行了一个示例数据,详见:
生信菜鸟团
2023/08/23
2.3K1
单细胞多样本整合之R语言版scVI
真诚是永远的必杀技,带圈的UMAP图谁能不迷
输入数据是一个注释好的adata对象,示例数据请在公众号聊天窗口回复‘adata1030’
用户11414625
2025/02/03
790
真诚是永远的必杀技,带圈的UMAP图谁能不迷
使用国产大模型完成单细胞自动注释
哥伦比亚大学梅尔曼公共卫生学院(Columbia University Mailman School of Public Health)的 Wenpin Hou 和杜克大学医学院(Duke University School of Medicine)的 Zhicheng Ji 证明,大语言模型 GPT-4 可以在单细胞 RNA 测序分析中使用标记基因信息准确注释细胞类型。
生信技能树
2024/05/31
2830
使用国产大模型完成单细胞自动注释
单细胞测序最好的教程(十三):你真的做对过干预后细胞分析吗?
在前面的分析教程中,我们详细研究了“不同处理下细胞的差异表达基因”,“不同处理下细胞的组成变化”。实际上,我们还会关心一个很直接的问题,那就是不同处理下,究竟什么细胞受到的影响最大。可能你会说,观察差异表达基因的数量,或者观察哪一类细胞变多了,又或者是对差异表达基因进行通路富集分析去评价通路变化。这两个思路是都是间接去反映细胞的状态,但我们希望有一个直接的评价指标,去评估不同处理后细胞的影响大小。
生信技能树
2024/01/11
1.7K0
单细胞测序最好的教程(十三):你真的做对过干预后细胞分析吗?
Python做单细胞测序数据分析必备技能
在前面单细胞转录组数据分析的文章中,有使用python实现的。今天我们了解一下在单细胞转录组分析过程中,必须要掌握的python数据框、包和函数等内容。
天意生信云
2025/01/22
2200
Python做单细胞测序数据分析必备技能
单细胞最好的教程(四):降维
上周的教程中,我们讲解了使用omicverse进行单细胞测序数据的预处理的一些思想。关于omicverse的使用文档与安装教程可以参考我们的readthedocs(https://omicverse.readthedocs.io/).
生信技能树jimmy
2023/08/31
1K0
单细胞最好的教程(四):降维
基于python的scanpy模块的乳腺癌单细胞数据分析
这次我们来复现一篇单细胞的文章。这篇我们只来复现细胞图谱和拟时序分析 像细胞通讯,还有富集分析还是很简单的。大家可以继续走下去,然后我们来交流讨论! 这篇全篇基于python复现。
生信技能树
2021/10/12
3.8K1
整合单细胞和空转数据多种方法之Cell2location
除了我们上期介绍过的CellTrek算法【整合单细胞和空转数据多种方法之CellTrek】,还有非常多的算法用于整合单细胞和空转数据,如何快速系统的了解更多的主流整合算法呢?这么多种算法我们又应该选择哪种呢?答案是查阅综述+大量实践!
生信菜鸟团
2024/01/04
6.7K0
整合单细胞和空转数据多种方法之Cell2location
python 单细胞scanpy流程
这篇推文耗时甚久,主要是学习和跑通官网代码,其次是加了一些自己的细微调整,比如整理marker基因表格,还有可视化的调整等。
用户11414625
2024/12/20
3440
python 单细胞scanpy流程
推荐阅读
相关推荐
单细胞测序最好的教程(七): 数据整合与批次效应校正
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文