SMNN:对单细胞数据进行批次校正

2022-03-29 11:19:05 浏览数 (1)

导语

GUIDE ╲

随着单细胞测序技术的成熟和测序成本的不断下降,产生了越来越多的单细胞数据。在整合来自多个批次的单细胞数据时,批次效应校正至关重要。

背景介绍

今天小编为大家带来一个通过有监督的相互最近邻检测对单细胞数据进行批次效应校正的R包——SMNN,今年5月发表在Briefings in Bioinformatics上。

R包简介

SMNN的实现包括两个步骤:可选的聚类和另一个批次效应校正。在第一步中,SMNN将表达式矩阵作为输入,并使用Seurat v.3.0进行聚类。然后根据用户指定的标记基因跨批次匹配相应的簇/细胞类型。可以通过提供SMNN细胞cluster标签来绕过整个聚类步骤。利用细胞cluster标签信息,SMNN在每个细胞类型内搜索相互最近邻,并使用SMNNcorrect函数进行批量效应校正。

R包安装

SMNN包可以直接从GitHub安装:

代码语言:javascript复制
install.packages("devtools")
devtools::install_github("yycunc/SMNN")
library("SMNN")

结果展示

01

加载表达矩阵

代码语言:javascript复制
data("data_SMNN")
dim(data_SMNN$batch1.mat)
data_SMNN$batch1.mat[1:5, 1:5]
dim(data_SMNN$batch2.mat)

02

提供细胞类型特异性标记基因信息

输入marker基因和每个marker基因对应的细胞类型标签。

代码语言:javascript复制
# Maker genes
markers <- c("Col1a1", "Pdgfra", "Ptprc", "Pecam1")
# Corresponding cell type labels for each marker gene
cluster.info <- c(1, 1, 2, 3)

03

跨批次协调cluster标签

unifiedClusterLabelling函数用于匹配/协调跨多个单细胞批次cluster/细胞类型的标签。它将来自两个或多个批次的原始表达矩阵、标记基因列表及其相应的聚类标签作为输入,并为所有批次的每个单个细胞输出协调的聚类标签。

代码语言:javascript复制
matched_clusters <- unifiedClusterLabelling(batches = list(data_SMNN$batch1.mat, data_SMNN$batch2.mat), features.use = markers, cluster.labels = cluster.info, min.perc = 0.3)

04

调用mnnpy包批次效应校正

在SMNNcorrection函数中,从mnnpy包中调用了几个python函数来加速计算。可以使用三种方法加载mnnpy包。

代码语言:javascript复制
library(reticulate)

# please change the path below to your local path for python
use_python("/nas/longleaf/apps/python/3.5.1/bin/python3")

git clone https://github.com/chriscainx/mnnpy.git
cd mnnpy
pip install .

Mnnpy采用矩阵或AnnData对象。这里我们使用mnnpy包的示例数据集为例。

代码语言:javascript复制
import scanpy.api as sc
import mnnpy

sample1 = sc.read("Sample1.h5ad")
sample2 = sc.read("Sample2.h5ad")
sample3 = sc.read("Sample3.h5ad")
hvgs = load_from_file("Some HVGs.csv")
corrected = mnnpy.mnn_correct(sample1, sample2, sample3, var_subset=hvgs, batch_categories = ["N0123X", "N0124X", "T0124X"])
adata = corrected[0]

adata
bdata = adata[:, hvgs]
sc.pp.scale(bdata)
sc.pp.neighbors(bdata)
sc.tl.umap(bdata)
sc.pl.umap(bdata, color='Sample')

最后,使用跨批次单细胞的协调cluster标签信息执行批次效应校正。具体来说,对输入和输出数据应用余弦归一化,并将相互最近邻的数量设置为20。

代码语言:javascript复制
corrected.results <- SMNNcorrect(batches = list(data_SMNN$batch1.mat, data_SMNN$batch2.mat), batch.cluster.labels = matched_clusters, matched.labels=c(1,2,3), k=20, sigma=1, cos.norm.in=TRUE, cos.norm.out=TRUE)

05

结果展示

SMNNcorrect函数将输出以下信息:(1) 每个批次的批次校正后的表达矩阵;(2)关于相互最近邻的信息。

在下面的示例中,我们将批次1视为参考批次,将批次2视为要校正的批次(这样批次2将针对参考批次1进行校正)。参考批次(即批次1)将仅应用余弦归一化。

代码语言:javascript复制
# Output after correction for batch
## Output (1): the batch-corrected expression matrix
corrected.results$corrected[[2]][1:10,1:10]
## Output (2): mutual nearest neighbor information
corrected.results$pairs[[2]]

小编总结

SMNN建立在2018年发表在Nature biotechnology的MNN之上(MNN 在跨批次搜索最近邻中属于相同生物细胞类型的细胞时往往会出错)。因此SMNN考虑细胞类型标签信息来执行有监督的MNN匹配,从而能够仅从相同的细胞类型中提取所需的邻居。今天的分享到这里就结束啦,希望小编介绍的单细胞工具可以帮助到大家!

0 人点赞