单细胞 & 空间整合去批次方法比较(2)

作者,追风少年i
开头先放一张marker表,供大家参考

marker list

这一篇内容很简单
接上一篇,上一篇文章单细胞 & 空间整合去批次方法比较介绍了以下几种方法整合去批次的代码
  • CCA
  • merge
  • SCT
  • merge & SCT
  • merge加harmony
  • SCT && harmony
关于上述方法我只强调一点,就是ScaleData的时候vars.to.regress的作用,这个要引起大家的重视。
这一篇我们要进行补充,因为上述的方法仍然存在一定的局限性。面对大数据集,几十上百万的细胞量,上述方法无能为力,R语言的原因,处理起来很慢。
  • rpca的方法:

ifnb.list <- SplitObject(ifnb, split.by = "stim")

# normalize and identify variable features for each dataset independently
ifnb.list <- lapply(X = ifnb.list, FUN = function(x) {
    x <- NormalizeData(x)
    x <- FindVariableFeatures(x, selection.method = "vst", nfeatures = 2000)
})

# select features that are repeatedly variable across datasets for integration run PCA on each
# dataset using these features
features <- SelectIntegrationFeatures(object.list = ifnb.list)
ifnb.list <- lapply(X = ifnb.list, FUN = function(x) {
    x <- ScaleData(x, features = features, verbose = FALSE)
    x <- RunPCA(x, features = features, verbose = FALSE)
})

####rpca

immune.anchors <- FindIntegrationAnchors(object.list = ifnb.list, anchor.features = features, reduction = "rpca"

# this command creates an 'integrated' data assay
immune.combined <- IntegrateData(anchorset = immune.anchors)
这里大家要注意rpca的方法,关于rpca,大家可以参考文章10X单细胞数据整合分析Seurat之rpca(large data,细胞量超过20万),原理我都已经说的很清楚了。
  • rpca + reference

bm280k.list <- SplitObject(bm280k, split.by = "orig.ident")
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
    x <- NormalizeData(x, verbose = FALSE)
    x <- FindVariableFeatures(x, verbose = FALSE)
})

features <- SelectIntegrationFeatures(object.list = bm280k.list)
bm280k.list <- lapply(X = bm280k.list, FUN = function(x) {
    x <- ScaleData(x, features = features, verbose = FALSE)
    x <- RunPCA(x, features = features, verbose = FALSE)
})

anchors <- FindIntegrationAnchors(object.list = bm280k.list, reference = c(1, 2), reduction = "rpca",
    dims = 1:50)
bm280k.integrated <- IntegrateData(anchorset = anchors, dims = 1:50)
注意这里的reference在指定的时候一般指定为control样本,或者预后好的样本。
  • bbknn(scanpy,python),这是很多高分文章采用的大细胞量整合方法

import scanpy as sc
import pandas as pd
import seaborn as sns

adata_ref = sc.datasets.pbmc3k_processed()  # this is an earlier version of the dataset from the pbmc3k tutorial
adata = sc.datasets.pbmc68k_reduced()
####注意这里的不同,高变基因取交集
var_names = adata_ref.var_names.intersection(adata.var_names)
adata_ref = adata_ref[:, var_names]
adata = adata[:, var_names]
####ref数据预处理
sc.pp.pca(adata_ref)
sc.pp.neighbors(adata_ref)
sc.tl.umap(adata_ref)

sc.tl.ingest(adata, adata_ref, obs='louvain')
adata.uns['louvain_colors'] = adata_ref.uns['louvain_colors']  # fix colors

adata_concat = adata_ref.concatenate(adata, batch_categories=['ref', 'new'])
adata_concat.obs.louvain = adata_concat.obs.louvain.astype('category')
adata_concat.obs.louvain.cat.reorder_categories(adata_ref.obs.louvain.cat.categories, inplace=True)  # fix category ordering
adata_concat.uns['louvain_colors'] = adata_ref.uns['louvain_colors']  # fix category colors

####采用bbknn矫正批次
sc.tl.pca(adata_concat)
sc.external.pp.bbknn(adata_concat, batch_key='batch')
####然后进行标准过程即可,多样本就是不停的迭代这个过程。
python版本大细胞量harmony矫正。

import scanpy as sc
import scanpy.external as sce
####大家读取自己的数据
adata = sc.datasets.pbmc3k()
sc.pp.recipe_zheng17(adata)
sc.tl.pca(adata)
####矫正批次
sce.pp.harmony_integrate(adata, 'sample')
sc.pp.neighbors(adata)
sc.tl.umap(adata)

其中sce.pp.harmony_integrate(adata, 'sample')这句其实就是下面这个调用下面的语句

import harmonypy
harmony_out = harmonypy.run_harmony(adata.obsm["X_pca"], adata.obs, 'batch')
adata.obsm[adjusted_basis] = harmony_out.Z_corr.T ###obsm就是降维的数据
大样本量还是推荐scanpy做分析,bbknn或者harmony矫正。

生活很好,有你更好

&lt;think&gt;嗯,用户需要处理百万级单细胞数据的批次效应,我应该先回顾一下常用的方法。记得之前学过Seurat和Harmony,这些工具在小规模数据上表现不错,但面对百万级的数据可能需要优化。然后,用户提到的方法中,SVA可能也是一种选择,但不确定是否适合单细胞数据。另外,参考文献里提到的SVA跟批次效应有关,可能相关。需要确认这些工具是否支持大数据量,或者有没有并行处理的能力。 接下来要考虑的是百万级数据的挑战,比如计算资源和内存占用。可能需要推荐一些高效的工具,比如Scanpy,它基于Python,适合处理大数据。还有BBKNN,速度快,适合整合大规模数据集。另外,用户可能对分布式计算有需求,比如DASK集成或者使用云计算平台,这部分需要提到。 然后,方法部分需要分步骤,比如预处理、选择合适的工具、并行计算等。要确保每个步骤都有具体的工具或方法,比如UMAP降维前的数据过滤,或者使用HDF5格式节省内存。此外,参考文献中的SVA可能在这里适用,尤其是在已知批次变量时,可以用来识别替代变量,但需要结合单细胞数据的特点。 最后,相关问题部分需要考虑用户可能进一步的问题,比如工具比较、资源优化、评估方法等。要确保覆盖用户可能关心的后续问题,比如如何评估批次校正的效果,或者处理时间的问题。同时,引用提到的文献中的SVA应用实例,可以增强回答的可信度。&lt;/think&gt;### 单细胞数据百万级批次校正方法与工具 在百万级单细胞数据的批次校正中,需平衡计算效率与算法精度。以下是常用方法及工具的分步说明: --- #### 1. **主流工具与算法** **a. Seurat (R/Python)** - **原理**:基于CCA(典型相关性分析)或RPCA(鲁棒主成分分析)对齐批次间的共享特征空间[^1]。 - **优化方向**:通过分步整合(如锚点识别与校正)降低计算复杂度,支持并行化。 - **适用性**:需调整参数(如`dims`和`k.anchor`)以适配大规模数据。 **b. Harmony (R/Python)** - **原理**:利用模糊聚类和迭代优化将细胞嵌入到共享的潜在空间,消除批次效应。 - **优势**:内存占用低,支持增量学习(`theta=2`增强批次间差异惩罚)。 - **代码示例**: ```python import scanpy as sc import harmony adata = sc.read_h5ad(&quot;data.h5ad&quot;) sc.pp.pca(adata) adata = harmony.keras_integrate(adata, batch_key=&#39;batch&#39;, max_iter=50) ``` **c. BBKNN (Python/Scanpy)** - **原理**:基于KNN图构建跨批次的局部邻域,直接修正邻接矩阵以减少批次影响。 - **性能**:时间复杂度$O(n \log n)$,适合百万级数据[^2]。 --- #### 2. **百万级数据优化策略** **a. 预处理降维** - 使用基因过滤(如高变基因选择)或特征哈希(feature hashing)降低维度至$d &lt; 100$。 - **公式**:基因表达矩阵$X \in \mathbb{R}^{n \times p}$经PCA后为$Z \in \mathbb{R}^{n \times d}$,满足$d \ll p$。 **b. 分布式计算** - **工具**: - **DASK + Scanpy**:将数据分块处理,并行执行PCA和KNN。 - **Cuml (RAPIDS)**:GPU加速PCA和UMAP,速度提升10倍以上。 **c. 内存管理** - 使用稀疏矩阵存储(如`scipy.sparse.csr_matrix`)或HDF5格式读写数据。 --- #### 3. **新兴方法** **a. scVI (Python)** - **原理**:基于变分自编码器(VAE)建模基因表达分布,隐变量$z$自动校正批次效应。 - **优势**:支持缺失数据插补,适用于复杂实验设计。 **b. Conos (R)** - **原理**:构建跨样本的联合图结构,通过随机游走对齐批次。 --- #### 4. **评估指标** - **批次混合度**:计算kBET或LISI分数,验证批次间细胞混合程度。 - **生物学保留度**:通过差异基因(DEG)或细胞类型聚类轮廓系数评估。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值