单细胞分析(七)——fastMNN数据去批次整合

本文介绍了如何使用Seurat工具包构建Seurat对象,特别是处理已经预处理过的单细胞测序数据,包括读取文件、合并数据、去除批次效应(使用fastMNN)以及对比未校正与校正后的单细胞聚类效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构建seurat 对象

seurat官网给出的数据是 SeuratData 内置数据,但是使用 SeuratData 下载会提示相应的问题,也有通过数据连接直接下载。这里我使用个人数据,特点是:已经通过 cellranger 处理了 FASTQ 文件,得到了 feature, barcode, matrix 文件, 如下

上一级文件如下,

层级显示关系如下

然后需要将这些文件统一读入到一个列表中,操作如下

# 读入数据
# 创建一个空列表来存储数据块
seu.list <- list()

# 指定文件夹路径
folder_path <- "./HRA000212_raw_feature_bc_matrix"

# 获取文件夹中的文件列表
file_list <- list.files(path = folder_path, full.names = TRUE)

# file_names <- substr(basename(file_list), 1, 9)

# 遍历文件列表并读入数据
library(future)
# check the current active plan
plan()
# change the current plan to access parallelization
plan("multiprocess", workers = 15)
options(future.globals.maxSize = 10000 * 1024^2)

system.time({
  for (file_path in file_list) {
    # 提取文件名(不包括路径和扩展名)
    file_name <- tools::file_path_sans_ext(basename(file_path))
    file_name <- substr(basename(file_name), 1, 9)
    
    # 读入文件数据(这里假设文件是文本文件)
    data <- Read10X(file_path)
    
    scobj <- CreateSeuratObject(data, project = file_name, min.cells = 3, min.features = 200)
    
    # 将数据添加到列表中,以文件名作为标识
    seu.list[[file_name]] <- scobj
    
    # return(seu.list)
  }
  
})

# 打印列表中的数据
print(seu.list)

使用fastMNN去批次

### Merge 合并数据
system.time({
  scobj <- merge(x=seu.list[[1]], y = seu.list[-1])
})
# user  system elapsed 
# 117.717  76.181 195.091 


### 使用 fastMNN 去除批次
scobj <- NormalizeData(scobj)
scobj <- FindVariableFeatures(scobj)

scobj <- RunFastMNN(object.list = SplitObject(scobj, split.by = "orig.ident"))
scobj <- RunUMAP(scobj, reduction = "mnn", dims = 1:30)
scobj <- FindNeighbors(scobj, reduction = "mnn", dims = 1:30)
scobj <- FindClusters(scobj, resolution = 0.5)
p1 <- DimPlot(scobj, reduction = "umap")
p2 <- DimPlot(scobj, reduction = 'umap', group.by = 'orig.ident') + ggsci::scale_color_d3("category20")
p2 + p1

没有去除批次的效果

# 如果不进行批次矫正

scobj <- NormalizeData(scobj)
scobj <- FindVariableFeatures(scobj, selection.method = "vst", nfeatures = 2000)
scobj <- ScaleData(scobj, features = rownames(scobj))
scobj <- RunPCA(scobj, features = VariableFeatures(object = scobj), reduction.name = "pca")
ElbowPlot(scobj)
DimPlot(scobj, reduction = "pca")

# 不进行批次矫正
scobj <- RunUMAP(scobj,reduction = "pca", dims = 1:10, reduction.name = "umap_naive")
p2 <- DimPlot(scobj, reduction = "umap_naive",group.by = "orig.ident")


可以看出矫正之后的作用也是比较明显

参考文章

Batch Effect Correction
Running fastMNN on Seurat Objects
Multi-Sample Single-Cell Analyses with Bioconductor
Single-Cell Batch Correction Methods

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值