NBIS单细胞教程:批次效应矫正(三)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是整合不同批次的单细胞数据并矫正批次效应。

参考来源:https://nbisweden.github.io/workshop-scRNAseq/labs/compiled/seurat/seurat_01_qc.html

感兴趣的话可以阅读原文。

整合方法

目前,常见的整合方法一共有四种,具体如下:

MarkdownLanguageLibraryRef
CCARSeuratCell
MNNR/PythonScater/ScanpyNat. Biotech.
ConosRconosNat. Methods
ScanoramaPythonscanoramaNat. Biotech.

首先,我们把上一步的得到的数据读进R并且根据样本名将数据拆分成单个数据,然后对基因表达量进行标准化,并根据方差稳定性转换(variance stabilizing transformation ,vst)识别每个样本的高变基因。

suppressPackageStartupMessages({
  library(Seurat)
  library(cowplot)
  library(ggplot2)
})
alldata <- readRDS("data/results/covid_qc_dr.rds")

alldata.list <- SplitObject(alldata, split.by = "orig.ident")

for (i in 1:length(alldata.list)) {
    alldata.list[[i]] <- NormalizeData(alldata.list[[i]], verbose = FALSE)
    alldata.list[[i]] <- FindVariableFeatures(alldata.list[[i]], selection.method = "vst",
        nfeatures = 2000, verbose = FALSE)
}

hvgs_per_dataset <- lapply(alldata.list, function(x) {
    x@assays$RNA@var.features
})
# venn::venn(hvgs_per_dataset,opacity = .4,zcolor = scales::hue_pal()(3),cexsn
# = 1,cexil = 1,lwd=1,col='white',frame=F,borders = NA)

temp <- unique(unlist(hvgs_per_dataset))
overlap <- sapply(hvgs_per_dataset, function(x) {
    temp %in% x
})
pheatmap::pheatmap(t(overlap * 1), cluster_rows = F, color = c("grey90", "grey20"))

在这里插入图片描述

Seurat4

  • 数据整合

使用Seurat4所自带的函数对不同批次的样本进行整合,是一种基于anchor的方法。

# 首先需要找到整合数据使,作为参考的anchor
alldata.anchors <- FindIntegrationAnchors(object.list = alldata.list, dims = 1:30,
    reduction = "cca")

# 根据找到的anchor整合不同批次的单细胞数据
alldata.int <- IntegrateData(anchorset = alldata.anchors, dims = 1:30, new.assay.name = "CCA")
# 发现,现在以CCA的名字建立了一个新的基因表达矩阵,只不过现在用来计算的默认基因集由RNA变成了新的CCA
names(alldata.int@assays)
# [1] "RNA" "CCA"

alldata.int@active.assay
# [1] "CCA"
  • 聚类差异

在进行整合之后,原始的基因表达举证依旧存在于原来的list中,所以这个时候可以比较整合前后的降维差异。

# 在新的整合数据上进行降维处理
alldata.int <- ScaleData(alldata.int, verbose = FALSE)
alldata.int <- RunPCA(alldata.int, npcs = 30, verbose = FALSE)
alldata.int <- RunUMAP(alldata.int, dims = 1:30)
alldata.int <- RunTSNE(alldata.int, dims = 1:30)

# 绘图显示差异
plot_grid(ncol = 3,
  DimPlot(alldata, reduction = "pca", group.by = "orig.ident")+NoAxes()+ggtitle("PCA raw_data"),
  DimPlot(alldata, reduction = "tsne", group.by = "orig.ident")+NoAxes()+ggtitle("tSNE raw_data"),
  DimPlot(alldata, reduction = "umap", group.by = "orig.ident")+NoAxes()+ggtitle("UMAP raw_data"),
  
  DimPlot(alldata.int, reduction = "pca", group.by = "orig.ident")+NoAxes()+ggtitle("PCA integrated"),
  DimPlot(alldata.int, reduction = "tsne", group.by = "orig.ident")+NoAxes()+ggtitle("tSNE integrated"),
  DimPlot(alldata.int, reduction = "umap", group.by = "orig.ident")+NoAxes()+ggtitle("UMAP integrated")
)

在这里插入图片描述

PS:可以从tSNE上看到,批次效应已经得到了很好的矫正

  • marker基因展示

MarkersCell Type
CD3ET cells
CD3E CD4CD4+ T cells
CD3E CD8ACD8+ T cells
GNLY, NKG7NK cells
MS4A1B cells
CD14, LYZ, CST3, MS4A7CD14+ Monocytes
FCGR3A, LYZ, CST3, MS4A7FCGR3A+ Monocytes
FCER1A, CST3DCs
myfeatures <- c("CD3E", "CD4", "CD8A", "NKG7", "GNLY", "MS4A1", "CD14", "LYZ", "MS4A7",
    "FCGR3A", "CST3", "FCER1A")
plot_list <- list()
for (i in myfeatures) {
    plot_list[[i]] <- FeaturePlot(alldata, reduction = "umap", dims = 1:2, features = i,
        ncol = 3, order = T) + NoLegend() + NoAxes() + NoGrid()
}
plot_grid(ncol = 3, plotlist = plot_list)

在这里插入图片描述

Harmony

Harmony是另外一个可以用来进行数据整合的R包。

# install.packages("harmony")
library(harmony)

# 不需要对数据进行拆分,可以直接整合
alldata.harmony <- RunHarmony(alldata, group.by.vars = "orig.ident", reduction = "pca",
    dims.use = 1:50, assay.use = "RNA")

# 使用Harmony计算得到的主成分进行UMAP二次降维
alldata.int[["harmony"]] <- alldata.harmony[["harmony"]]
alldata.int <- RunUMAP(alldata.int, dims = 1:50, reduction = "harmony", reduction.name = "umap_harmony")

# 展示了整合后每个样本中的特征基因的数量与细胞数量
hvgs <- unique(unlist(hvgs_per_dataset))

assaylist <- list()
genelist <- list()
for (i in 1:length(alldata.list)) {
    assaylist[[i]] <- t(as.matrix(GetAssayData(alldata.list[[i]], "data")[hvgs, ]))
    genelist[[i]] <- hvgs
}

lapply(assaylist, dim)

还有一种基于python的整合方法-scanorama,但不知到为什么,我在R中无法导入这个包,暂时也没有找到解决办法。就我目前解决单细胞批次效应,两个包已经足以,后面如果再有时间,在来继续研究这个包。

保存数据

像之前一样,保存当下的数据:

saveRDS(alldata.int, "data/results/covid_qc_dr_int.rds")
### 如何使用 Keil5 Hex 文件 对于仅拥有已编译好的 hex 文件而无源文件的情况,在 Keil V5 平台上直接hex 文件至单片机(如华大单片机)需采取特定的方法,因为直接调用该平台进行此类操作不可行[^1]。 #### 设置 Output 路径 进入 Keil 的 output 设置界面,指定要录的 hex 文件的具体位置。确保在路径输入框中填完整的 hex 文件名称并附带 `.hex` 扩展名;缺少此扩展名可能导致系统继续尝试录先前编译的结果而非所选的 hex 文件[^3]。 #### 配置 Flash 工具选项 针对不同类型的微控制器(MCU),可能还需调整 flash 下载工具的相关配置参数以匹配目标设备的要求。这一步骤通常涉及选择合适的编程算法以及设定通信接口等细节[^2]。 #### 启动下载过程 完成上述准备工作之后,可以通过点击调试窗口内的 “Download” 或者快捷菜单里的相应命令来启动实际的程序入流程。如果一切顺利的话,软件会自动连接硬件并将选定的 hex 数据传输到 MCU 中存储起来[^4]。 ```python # Python 示例代码用于说明自动化脚本概念 (并非真实实现) def download_hex_to_mcu(hex_file_path, mcu_type): """ 自定义函数模拟将 HEX 文件下载到指定型号的 MCU 上 参数: hex_file_path -- 完整路径字符串指向待上传的 .hex 文件 mcu_type -- 字符串表示的目标单片机类型标识符 返回值: 成功则返回 True ,失败抛出异常信息 """ try: configure_output_settings(hex_file_path) # 设定输出设置 select_flash_tool(mcu_type) # 挑选适合的闪存工具 execute_download_command() # 发送下载指令 return True # 表明成功结束 except Exception as e: raise RuntimeError(f"Failed to upload {hex_file_path}: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值