参考:
[1] https://github.com/Starlitnightly/single_cell_tutorial
[2] https://github.com/theislab/single-cell-best-practices
背景
前面学习了不同处理条件下的基因差异表达,和不同处理条件下的细胞组成变化。这延申出另一个问题,我们想在不同处理条件下,看看究竟是什么细胞受到的影响最大。
在这里,有人会想到,直接观察差异表达基因数量,或者哪一类细胞变多了,或者对差异表达基因进行通路富集分析去评估通路的变化,这三种思路都是间接体现细胞的状态,我们需要一个直接的评价指标,去评估条件施加对细胞的影响。
首先阐明扰动的定义:由外部影响所造成的细胞暂时性或永久性改变。最常见的是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_c