5.基于python的scRNA-seq细胞状态分析-细胞组成

参考:

[1] https://github.com/Starlitnightly/single_cell_tutorial

[2] https://github.com/theislab/single-cell-best-practices

目录

背景

差异基因分析是研究特定条件导致的基因表达变化,在分析管道中,我们还会关注细胞组成(细胞类型的比例)在特定条件下的变化。例如药物的干预会导致细胞组成发生变化。

这里我们使用Haber数据集子集,完整数据集包含来自小鼠小肠以及类器官的53,193个单个上皮细胞。一些细胞还受到细菌或蠕虫感染。子集仅包括被指定细菌----沙门氏菌和Heligmosomoides polygyrus的受感染和对照细胞:

python 复制代码
import omicverse as ov
import scanpy as sc

adata=ov.read('./data/haber_count.h5ad')
print(adata)
"""
AnnData object with n_obs × n_vars = 9842 × 15215
    obs: 'batch', 'barcode', 'condition', 'cell_label'
"""
print(adata.obs['condition'].cat.categories)
"""
Index(['Control', 'Hpoly.Day3', 'Hpoly.Day10', 'Salmonella'], dtype='object')
"""
print(adata.X.max())
"""
4385.0
"""

数据有10 个批次。条件是对照组(Control)、沙门氏菌(Salmonella)、肠道寄生线虫感染3天(Hpoly.Day3)和肠道寄生线虫感染10天(Hpoly.Day10)。cell_label存放了细胞类型。

组成差异

在分析单细胞数据中的细胞比例的时候,通常是描述细胞在不同分组中的占比来进行叙述的,在一般的分析教程中,例如药物治疗后,某类T细胞的比例上升。但是,这类T细胞真的上升了吗?这是一个值得思考的问题。看下面这个例子,在一项癌症研究中,想要比较健康器官和患病器官的细胞类型组成,假设在这种器官中存在三类细胞A,B,C。其中,健康器官中,三类细胞的细胞数量相同,都是2000个,患病器官中,A类细胞变成4000个,但是B和C还是2000个:

患病后显而易见,A类细胞翻倍变化了,但在实际测量中,技术有通量限制,测序仪单次通过的细胞在5000-6000之间,因此,每个病人器官所获得的细胞总数是有限的,我们会用所测序的细胞来作为这个"病人器官"的代表。

因此,前面的A、B、C三类细胞,我们并不能获得6000和8000个细胞,假设测序仪的限制为600,因此我们只能从中随机获得600个细胞。我们采用随机抽样模拟这一过程:

可以直观感受到,虽然A类细胞的比例依然最大,但是B和C类细胞在病人器官中出现了下降情况,但真实情况是,B和C在病人和健康人中的比例是不变的。

这一小节的例子是为了告诉我们,我们不能直接统计数据来分析细胞组成,这样得到的结果是有偏差的,所以应该使用专业的细胞组成分析方法。

基于已有的标记-scCODA

scCODA通过预定义的细胞类型来统计得到细胞的成分变化:

python 复制代码
sccoda_model = pt.tl.Sccoda()
sccoda_data = sccoda_model.load(
    adata,
    type="cell_level",
    generate_sample_level=True,
    cell_type_identifier="cell_label",
    sample_identifier="batch",
    covariate_obs=["condition"],
)
print(sccoda_data)

为了进一步概述不同条件下的细胞类型分布,我们使用boxplot来可视化:

python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt

pt.pl.coda.boxplots(
    sccoda_data,
    modality_key="coda",
    feature_name="condition",
    figsize=(12, 5),
    add_dots=True,
    # args_swarmplot={"palette": ["red"]},
)
plt.show()

箱线图突出显示了细胞类型分布的差异,除了通过箱线图,也可以通过堆叠柱状图来可视化细胞类型的比例变化:

python 复制代码
pt.pl.coda.stacked_barplot(
    sccoda_data, modality_key="coda", feature_name="condition", figsize=(2, 2)
)
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.ylabel('Prop',fontsize=11)
plt.legend(bbox_to_anchor=(1.05,1),fontsize=10)
plt.show()

选择一个几乎恒定的细胞作为参考细胞,比如上图的内分泌细胞(Endocrine)在4种类型中的变化很小,即具有几乎恒定的相对丰度,选择该类型,然后训练scCODA:

python 复制代码
sccoda_data = sccoda_model.prepare(
    sccoda_data,
    modality_key="coda",
    formula="condition",
    reference_cell_type="Endocrine",
)
sccoda_model.run_nuts(sccoda_data, modality_key="coda", rng_key=112)

sccoda_model.set_fdr(sccoda_data, 0.4)

sccoda_model.credible_effects(sccoda_data, modality_key="coda")

pt.pl.coda.effects_barplot(sccoda_data, modality_key="coda", 
                           covariates="condition")
plt.show()

该图为条件对细胞类型的显著且可信的影响,这些结果与现有发现吻合:

  • 感染沙门氏菌后,成熟肠上皮细胞(Entercyte)的频率大幅增加
  • 蠕虫感染后将导致杯状细胞(Goblet)和簇状细胞(Tuft)丰度增加

基于层次结构-TAscCODA

除了每种细胞类型的丰度之外,典型的单细胞数据集还以基于树的分层排序的形式包含有关不同细胞相似性的信息。这些层次结构可以通过基因表达的聚类(通常用于发现属于同一细胞类型的细胞簇)自动确定,也可以通过生物信息层次结构(如细胞谱系)自动确定。 TAscCODA是 scCODA 的扩展,它将分层信息和实验协变量集成。这对于高分辨率的细胞图谱工作特别有益。

下面就不再演示,TAscCODA的结果会更加合理,具体操作参考:https://single-cell-tutorial.readthedocs.io/zh/latest/stages/4-2/

相关推荐
岑梓铭12 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
游客52026 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
Eric.Lee202128 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Dontla33 分钟前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
qq_529025291 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@1 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
終不似少年遊*2 小时前
pyecharts
python·信息可视化·数据分析·学习笔记·pyecharts·使用技巧
Python之栈2 小时前
【无标题】
数据库·python·mysql
袁袁袁袁满2 小时前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程