单细胞下采样
最近做了一些个超大数据集的分析,其中出现了超级大量的问题….除了数据不整洁,找不到直接适用的meta还得自己生成之外,最大的问题,就是数据实在太大了没法跑….有些分析甚至直接能给200G的服务器内存给爆了,总不能什么时候都氪金吧?而且部分方法直接不支持超大量数据或者无法并行的问题。这时候,就需要用到下采样了,理论上如果我们认可自己在细胞聚类和注释这一步中,得到的cluster的纯度,那么,取部分细胞代表整体是很合理的,当然这一步可以用ROGUE工具进行检查,下采样时,除了subset里的downsample参数,和pseudocell聚合间接下采样,或者直接分层抽样,bootstrap抽样等方法之外,还发现了一个专门的工具可以进行下采样:geosketch
这是个python包,但是通过reticulate可以很方便地调用且直接兼容R中的矩阵直接下采样,因而可以在纯R环境下运行:
1 | #在R中需要调用reticulate使用python环境,py中则可以原生运行 |
从结果上讲,还真是有点东西!即便对于最少的细胞类型,抽样上也并没有忽略掉…而且在全程分析中并没有使用过CellType这个信息,且没有缺少某种类型,证明这个方法的确比较稳健。经过反复多次尝试,确定基本上这个方法能够照顾到极不均衡数据,不至于出现一下采样直接缺少某种细胞类型的问题。
当然,这么方便的工具不会全无问题,关键就在其中的获取转置矩阵那一步,因为这个工具需要行是细胞,列是基因,还不支持稀疏矩阵,所以消耗上在R里有时候仍然会有问题……但这个包原生是为py开发的,python中,特别是scanpy中,表达矩阵的形式直接就是符合要求的….因而不需要任何转置操作,而且内存消耗极小,看上去python环境刻不容缓啊….
那么,不依托于python,有没有其他的工具呢?
也有,那就是metacell类工具,当然,由于metacell坑爹的开发组,这个工具没法在win平台安装,linux和unix平台都能安装,但metacell的接口写的很晦涩,结果展示做的也不怎么样,因此自然就有大佬感觉不爽,去开发新的工具,那就是Supercell,当然严格来说这类工具做的是cell aggregating,但是能够实现和下采样类似的效果,极大减少细胞数量,降低计算开销,以及提升某些分析的准确度:
1 | library(SuperCell) |
从聚类结果上将,效果确实不错!而且同样兼顾了稀有细胞的问题,还支持meta信息的直接映射,支持直接使用aggregating后的数据走Seurat的流程,也提到了细胞不均等的时候引入weight的方法,考虑得非常全面,甚至支持aggregating后进行velocyto的运算,综合性能非常好,以后大规模数据就用这个了,而且这个工具aggregating后甚至支持去批次的问题,也即可以从一开始,对于每个sample的数据就进行aggregating,然后再进行下游分析,就能极大程度减少运算压力:
直接用TISCH2上面的CRC的数据,来自文章,数据为7 patients,no treatment,10X,primary,2.3W cells,理论上这种大小的数据集当然能直接分析,但是对于这种每个样本单独获取数据的形式,如果数据扩大10倍呢?那显然就得引入一些降低开销的方法了:
1 | sce <- Read10X_h5("./CRC_EMTAB8107_expression.h5") |
整个流程非常nice,几乎和原生单细胞流程一致,从表达量上,也能够提升marker基因的表现,harmony的结果也非常可靠,和TISCH网站上的整体数据相对比,降维聚类的结构完全一致,基因表达上则更加准确,显然是一种极好地公共数据大规模复用的方法!