利用scanpy进行数据归一化

作者:童蒙
编辑:angelica

函数1—scanpy.pp.regress_out

01 功能

去除非期望来源的方差对数据的影响。使用的是简单的线性回归模型,同seurat的regressOut类似,然而,在某些情况下需要注意,可以参见:https://github.com/theislab/scanpy/issues/526

对于不同的数据,可能效果不一样,需要仔细分辨。比如下图第一行的,经过regress_out后,PC2已经降低了很多;而对于第二行的数据,由于包含了各种细胞类型,不管PC1还是PC2都同检测的基因数有关,因此取出后,感觉更怪异了。

对于细胞周期,第三行很好地分开G1 和 G2 M/S期,而第四行却不行,可能跟细胞类型多有关。

因此在使用这个函数的时候需要注意,regress_out会去除方差,然而通常去除的MT表达量或者细胞周期都是生物方差,而不是技术方差。去除生物方差的时候,可能会对其他的过程有影响,会误伤到我们想关注的因素。也许在做轨迹推断有帮助,但是在聚类的时候会有干扰。例如细胞的分裂周期可能跟细胞类型有关(不同的细胞类型也许会处于不同的细胞周期,比如干细胞和增值细胞),MT的表达可能跟某些生理因素相关,因此在去除的时候需要注意。

02 参数

  • adata:AnnData
  • keys:选择的obs中的key

03 例子

sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])

04 代码片段

利用Gaussian来去除方差,y为表达量,x为选择的obs;并且获得分析后的残差,修改y, 即adata.X

result = sm.GLM(
    data_chunk[:, col_index], regres, family=sm.families.Gaussian()
).fit()
new_column = result.resid_response

函数2—scanpy.pp.scale

将数据归一化到mean=0,var=1。

如果某个基因没有任何方差,也会被保留,如果设置了zero_center=True,那么会设置为0 ,未来会设置为NaN。否则会丢掉这个基因。

Variables (genes) that do not display any variation (are constant across all observations) are retained and (for zero_center==True) set to 0 during this operation. In the future, they might be set to NaNs.

参考资料

  • https://scanpy.readthedocs.io/en/stable/generated/scanpy.pp.scale.html

  • https://scanpy.readthedocs.io/en/stable/generated/scanpy.pp.regress_out.html

你可能感兴趣的:(利用scanpy进行数据归一化)