5.基于python的scRNA-seq细胞状态分析-细胞扰动

news2024/11/14 5:30:01

参考:
[1] https://github.com/Starlitnightly/single_cell_tutorial
[2] https://github.com/theislab/single-cell-best-practices

目录

  • 背景
  • 识别受扰动影响最大的细胞类型
  • 预测细胞的扰动响应
    • 构建模拟数据集
    • 构建scGEN

背景

前面学习了不同处理条件下的基因差异表达,和不同处理条件下的细胞组成变化。这延申出另一个问题,我们想在不同处理条件下,看看究竟是什么细胞受到的影响最大。

在这里,有人会想到,直接观察差异表达基因数量,或者哪一类细胞变多了,或者对差异表达基因进行通路富集分析去评估通路的变化,这三种思路都是间接体现细胞的状态,我们需要一个直接的评价指标,去评估条件施加对细胞的影响。

首先阐明扰动的定义:由外部影响所造成的细胞暂时性或永久性改变。最常见的是CRISPR-Cas9实验带来的基因组扰动现象,其次是由外界干预所带来的转录水平或者蛋白水平的改变。

尽管我们可以从实验的角度去衡量扰动的效果,但是对单细胞层面,不同细胞的扰动效果,仍有着较大的发展空间,具体来说有以下几点:

  • 扰动响应:根据不同的外界干预方法,我们可以预测扰动后的组学特征。一般我们可以通过预测特征和真实值的相关性来评估,还可以通过表型的测量值进行评估,例如IC50,不同剂量反应下的AUC(曲线下面积),毒性等。
  • 靶点和机理:我们通常会采用实验手段去分析药物的靶点与机理,但实际上,对于一种未知作用的化合物而言,我们分析其作用模式,也可以通过扰动响应的方式进行。
  • 扰动相互作用:由于干预一般不是独立的,我们有时候会去预测扰动的组合效应,以了解基因组与药物组合之间的相互关联的影响。
  • 化学性质:我们除了通过组学层特征的改变去分析药物的扰动响应外,我们也可以根据现有的化合物知识,包括R基团,药效基团等,通过已有的数据来直接预测药物的扰动效应。

下面将分析两个方面,包括"查找受扰动影响最大的细胞类型"以及"预测单细胞对扰动的转录反应"

这里依然使用kang数据集,基于10x液滴scRNA-seq的PBMC(外周血单核细胞),来自8名红斑狼疮患者在 INF-β 治疗前后 6 小时的测量。


补充:PBMC是一个细胞大类,所以一般机器学习的细胞类型注释其实是细胞亚型注释


将label重命名为condition以提高可读性,并且将ctrl替换成control,stim替换成stimulated:

import omicverse as ov
import scanpy as sc
import pertpy as pt

adata=ov.read('./data/kang.h5ad')
adata.obs.rename({"label": "condition"}, axis=1, inplace=True)
adata.obs["condition"].replace({"ctrl": "control", "stim": "stimulated"}, inplace=True)

识别受扰动影响最大的细胞类型

扰动很少对所有细胞产生相同的影响,Augur是一种量化响应程度的方法。Augur 的目标是根据细胞类型对给定单细胞基因表达数据的实验扰动的反应,对细胞类型进行排序或优先排序。基本思想是,在分子测量领域,对诱导扰动反应强烈的细胞比反应很少或没有反应的细胞类型更容易分为受扰动组和未受扰动组。通过测量每种细胞类型内实验标签(例如处理"treatment"和对照"control")的预测程度来量化这种可分离性。Augur 训练一个机器学习模型,在多次交叉验证运行中预测每种细胞类型的"处理条件"标签,然后根据衡量模型准确性的指标分数对细胞类型响应进行优先级排序。

Augur有两种分类器:随机森林和逻辑回归。

在Kang中,处理条件有Control和stimulated两种类别,同时我们选择随机森林作为分类器:

ag_rfc = pt.tl.Augur("random_forest_classifier")
loaded_data = ag_rfc.load(adata, label_col="condition", cell_type_col="cell_type")

v_adata, v_results = ag_rfc.predict(
    loaded_data, subsample_size=20, n_threads=4, select_variance_features=True, span=1
)

print(v_results["summary_metrics"])

可视化排序结果和UMAP结果:

lollipop = pt.pl.ag.lollipop(v_results)

ov.utils.embedding(v_adata,
                   basis='X_umap',
                    frameon='small',
                   color=["augur_score", "cell_type", "label"],
                   cmap='Reds',
                   ncols=2)

fig1
fig2
据观察,CD14+单核细胞受IFN-β影响最大,而巨核细胞受影响最小。这与原始论文中各细胞类型差异表达基因的统计分析吻合。既然与差异表达基因统计一致,那为什么不用差异表达基因数量来衡量扰动强弱,这是因为,除了关心扰动强弱外,我们还关心扰动的主要干预基因,这些基因不一定是差异表达最高的基因,但他们对模型的贡献度是可以量化的:

important_features = pt.pl.ag.important_features(v_results)

fig3
这些是扰动相关的所有基因。

不同处理中受扰动影响的细胞类型优先级

在上述分析中,我们仅研究了Ctrl和Stim两个组,但在真实情况中,我们通常会进行多种药物处理,或者是不同时间段的药物干预分析。在Augur中,提供了排列测试来进行差异优先级划分。

这里使用另一个数据集,该数据给小鼠提供可卡因,并在戒断后48小时(withdraw_48h_Cocaine)和15天(withdraw_15d_Cocaine)采集前额皮质,测量技术为scRNA-seq:

adata=ov.read('./data/bhattacher.h5ad')
adata.obs.rename({"label": "condition"}, axis=1, inplace=True)
#ov.pp.preprocess(adata,mode='shiftlog|pearson',n_HVGs=2000,)
ag_rfc = pt.tl.Augur("random_forest_classifier")
sc.pp.log1p(adata)

# 分析5天
# Default mode
bhattacherjee_15 = ag_rfc.load(
    adata,
    label_col='condition',
    condition_label="Maintenance_Cocaine",
    treatment_label="withdraw_15d_Cocaine",
    cell_type_col="cell_type",
)

bhattacherjee_adata_15, bhattacherjee_results_15 = ag_rfc.predict(
    bhattacherjee_15, random_state=None, 
    n_threads=4, 
)
bhattacherjee_results_15["summary_metrics"].loc["mean_augur_score"].sort_values(
    ascending=False
)

# 分析48小时
# Default mode
bhattacherjee_48 = ag_rfc.load(
    adata,
    label_col='condition',
    condition_label="Maintenance_Cocaine",
    treatment_label="withdraw_48h_Cocaine",
    cell_type_col="cell_type",
)

bhattacherjee_adata_48, bhattacherjee_results_48 = ag_rfc.predict(
    bhattacherjee_48, random_state=None, 
    n_threads=4,
)

bhattacherjee_results_48["summary_metrics"].loc["mean_augur_score"].sort_values(
    ascending=False
)

scatter = pt.pl.ag.scatterplot(bhattacherjee_results_15, bhattacherjee_results_48)

fig4
在戒断后,Oligo的响应从0.5上升到0.8,这为后续研究提供了一个潜在的启发。对于几乎没有变化的细胞类型,说明戒断对其影响没有提高,有可能是可卡因已经造成了永久性损伤。

预测细胞的扰动响应

除了对已知细胞评估扰动响应,我们还可以根据已有的细胞,预测数据集中未知细胞的扰动响应。对于分析未知的细胞,从实验角度需要重新测序,这带来了额外的代价,scGen是一种自编码器,学习数据的潜在表示,估计对照(未处理)和扰动(处理)细胞之间的差异向量,然后将估计的差异向量添加到对照组感兴趣的细胞类型中,以预测每个单细胞的基因表达反应。

构建模拟数据集

以Kang数据集为例,假设CD4 T cells在治疗后没有被测序仪捕获,构建数据如下,首先选择HVG加快计算速度:

import omicverse as ov
import scanpy as sc
import pertpy as pt

adata=ov.read('./data/kang.h5ad')
adata.obs.rename({"label": "condition"}, axis=1, inplace=True)
adata.obs["condition"].replace({"ctrl": "control", 
                                "stim": "stimulated"}, inplace=True)
adata=ov.pp.preprocess(adata,mode='shiftlog|pearson',n_HVGs=2000,)
adata.raw = adata
adata = adata[:, adata.var.highly_variable_features]

遵循假设(治疗后的CD4 T cells没有被捕获),我们删除stimulated下的所有CD4 T cells,命名为adata_t,同时存放stimulated下的所有CD4 T cells,命名为cd4t_stim:

adata_t = adata[
    ~(
        (adata.obs["cell_type"] == "CD4 T cells")
        & (adata.obs["condition"] == "stimulated")
    )
].copy()

cd4t_stim = adata[
    (
        (adata.obs["cell_type"] == "CD4 T cells")
        & (adata.obs["condition"] == "stimulated")
    )
].copy()

构建scGEN

scGen 需要修改后的AnnData对象 (adata_t) 来构造模型对象,该模型对象可用于训练模型。n_hidden该函数接收多个用户输入,包括bottleneck(网络的中间层)之前模型的每个hidden( 隐藏层)中的节点数以及此类层的数量(n_layers)。

scGEN在adata_t上训练,由于环境问题,这里不再演示。可以用UMAP可视化scGEN输出的细胞表示:
fig5

对比原本的UMAP:
fig6

可以看到,经过scGEN的细胞表示体现出,治疗处理让所有细胞类型发生强烈的转录变化(对照组和治疗组相互分离)。

然后,scGEN利用adata_t中各个细胞类型的差异作为全局差异,添加到细胞类型CD4 T cells(对照组),以预测治疗组的表达情况。

由于前面保留了GT(cd4t_stim),我们可以评估预测结果的准确性。可以利用下面方式评估:

  • 主成分分析空间中Control,Predicted,Actual的CD4+ T细胞的特征表示
  • Predicted的刺激后CD4 T细胞与实际的刺激后CD4 T细胞对于Control的差异表达基因的相关性

首先观察PCA下的表示:
fig7
可以看到预测的情况具有相同的移动方向(从对照到真实治疗的测量)。

然后是DEG的相关性, R 2 R^{2} R2最大值为1,红色突出显示的基因是 IFN-β 刺激后的前 10 个 DEG(真实测量的治疗组):
fig8
可以看到scGEN的预测,对高表达基因是准确的,对低表达基因(0-4)的预测不够准确。

以ISG15为例,统计表达情况,正如所观察到的,该基因在 IFN-β 刺激后确实上调:
fig9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1706270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QGis3.34.5工具软件保存样式,软件无反应问题

在使用QGis软件保存SLD样式的时候,每次保存样式,软件都进入无反应状态,导致无法生成样式文件 百度中多次查询问题点,终未能在在3.34.5这个版本上解决问题。 考虑到可能是软件本身问题,于是删除了3.34.5这个版本&#x…

报修新选择:一款软件搞定所有维修问题

数字化、智能化时代发展迅速,各类便捷、智能化软件应用已经深入到我们生活和工作的方方面面。尤其是在企业或学校的设备管理中,报修维修工作一直是一个重要环节。传统的报修方式,如电话报修、填写纸质报修单等,已经无法满足现代高…

Pytorch索引、切片、连接

文章目录 1.torch.cat()2.torch.column_stack()3.torch.gather()4.torch.hstack()5.torch.vstack()6.torch.index_select()7.torch.masked_select()8.torch.reshape9.torch.stack()10.torch.where()11.torch.tile()12.torch.take() 1.torch.cat() torch.cat() 是 PyTorch 库中的…

联想凌拓 NetApp AFF C250 全闪存存储助力丰田合成打造数据新“引擎”

联想凌拓 NetApp AFF C250全闪存存储助力丰田合成打造数据新“引擎” 丰田合成(张家港)科技有限公司(以下简称“丰田合成”)于2003年12月成立,坐落在中国江苏省张家港市保税区中华路113号,是日本丰田合成株…

亚马逊自养号与机刷有何区别?

在亚马逊这一全球电商巨头中,买家评价的重要性如同指南针般引领着消费者的购买决策。在购买前,消费者们往往会驻足查看产品的评论,仔细比较不同产品的买家口碑,以确保自己的选择既明智又满意。因此,测评成为了各大电商…

空间转录组数据的意义

10X空间转录组Visium学习笔记(三)跑通Visium全流程记录 | 码农家园 (codenong.com) 这两个的区别是:一个是像素的位置信息,一个是阵列的位置信息

百度百科个人词条怎么这么难通过?

百度百科作为国内最具影响力的知识平台,个人词条的通过率却让很多人感到困惑。为什么我的个人词条总是难以通过?伯乐网络传媒给大家揭秘百度百科个人词条审核的难点,并提供相应的对策。 一、百度百科词条难以通过的原因分析 1. 内容不符合审…

小动物单通道麻醉机、多通道麻醉机

ZL-04A-5多通道小动物麻醉机采用英国进口的挥发罐体,国内组装而成,产品输出气体稳定。多通道小动物麻醉机无需氧气瓶,自带空气输出机,小动物麻醉机对氧气浓度有要求可以选配氧气输出机。 详情介绍: 产品特点&#xf…

巅峰对决:OpenAI与Google如何用大模型开创未来

2024年,人工智能领域正引领着一场波澜壮阔的全球技术革命。 5月14日,OpenAI揭开了其新一代多模态人工智能大模型GPT4系列的神秘面纱,其中GPT-4o不仅拥有流畅迷人的嗓音,还展现出幽默、机智和深刻的洞察力……紧接着,在…

【MySQL数据库】存储过程实战——图书借阅系统

图书借阅归还 借阅不用count判断,归还不用具体字段值判断 每次借阅或者归还只能操作1本 数据准备 -- 创建数据库 create database db_test3 CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用数据库 use db_test3; -- 创建图书信息表: create tabl…

C++容器之双端队列(std::deque)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 rezize3.6 shrink_to_fit3.7 access3.8 assign3.9 push_back3.10 push_front3.11 pop_back3.12 pop_front3.13 insert3.14 erase3.15 swap3.16 clear3.17 emplace3.18 emplace_front3.19…

TCS工作原理

1、TCS的基本原理 TCS 的原理建立在驱动轮最优滑转率基础之上。理论研究证明,轮胎与路面之间的纵向附着特性决定汽车的加速和制动能力,轮胎滑动率与路面附着之间存在一定的关系,驱动轮的滑动率 λ \lambda λ 可以表示如下: λ…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候,SurfaceFlinger是如何构建对应的Layer的主要工作有那些! 这里参考的Android源码是Android 13 aosp! app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因,因为淘宝的镜像域名更换,由于 npm.taob…

搜维尔科技:【系统集成案例】三面CAVE系统案例

用户名称:成都东软学院 主要产品:工业激光投影机、光学跟踪系统、主动立体眼镜、主动式立体眼镜发生器 在4米x9米的空间内,通过三通道立体成像,对立体模型进行数字化验证,辅助unity课程设计。 立体投影大屏方案采用的…

行波进位加法器和超前进位加法器比较

文章目录 1.行波进位加法器2.超前进位加法器 1.行波进位加法器 行波进位加法器就是将全加器串联起来,将低位的进位输出作为高位的进位输入。 由全加器公式可知: S A ⊕ B ⊕ C i n C o u t A B B C i n A C i n SA\oplus B\oplus C_{in}\\ C_{out}…

ssm教职工防疫打卡小程序-计算机毕业设计源码73760

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,教职工防疫打卡小程序被用户普遍使用,为方便用…

QGIS:根据已知色带数组生成sld文件

1、将已知的色带数组转换为Excel文件(Test.xlsx) 格式如下: 2、Python生成QGIS colormap文件(.txt) import numpy as np import os import sys import pandas as pd#QGSI输入文件 #读取C中导出的Rainbow数组 fp_rain…

电商API接口||电商数据连接器:一键连接,效率加倍!

电商数据API接口: 一键连接,效率加倍! 打造智能数据生态,让数据流动更加高效 在数字化时代,数据已成为企业发展的核心驱动力。电商API数据采集接口,助力电商企业实现数据的高效管理和应用。 电商数据API…

【乐吾乐3D可视化组态编辑器】模型类型与属性

编辑器地址:3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点(Node),从节点类型上可以分为转换节点(TransformNode)、网格(Mesh)、实例网…