单细胞 RNA-seq 数据的生物异质性常常受到测序深度等技术因素的影响。每个细胞中检测到的分子数量在细胞之间可能存在显着差异,即使在同一细胞类型内也是如此。 scRNA-seq 数据的解释需要有效的预处理和标准化,以消除这种技术变异性。在 Hafemeister 和 Satija,2019 年,seurat实验室引入了一个建模框架,用于对 scRNA-seq 实验中的分子计数数据进行归一化和方差稳定。该过程省略了对启发式步骤的需要,包括伪计数加法或对数转换,并改进了常见的下游分析任务,例如变量基因选择、降维和差异表达。
在这个tutorial中,演示了如何使用基于 sctransform 的标准化来恢复与对数标准化相比更清晰的生物学差异。
加载Rpackage
library(Seurat)
library(ggplot2)
library(sctransform)
加载数据创建seurat对象
### sample list
samples <- read_excel("../data/metadata/patients_metadata.xlsx", range = cell_cols("A:A")) %>% .$sample_id
# 根据研究情况,确定研究样本即可
### import cellranger files from different data sets
for (i in seq_along(samples)){
assign(paste0("scs_data", i), Read10X(data.dir = paste0("../data/cellranger/", samples[i], "/filtered_feature_bc_matrix")))
}
### create seurat objects from cellranger files
for (i in seq_along(samples)){
assign(paste0("seu_obj", i), CreateSeuratObject(counts = eval(parse(text = paste0("scs_data", i))), project = samples[i], min.cells = 3))
}
### merge data sets
seu_obj <- merge(seu_obj1, y = c(seu_obj2, seu_obj3, seu_obj4, seu_obj5, seu_obj6, seu_obj7, seu_obj8, seu_obj9, seu_obj10, seu_obj11, seu_obj12, seu_obj13, seu_obj14, seu_obj15, seu_obj16, seu_obj17, seu_obj18, seu_obj19, seu_obj20), add.cell.ids = samples, project = "SC")
# 根据研究内容,输入相应的project即可
使用sctransform进行标准化
- 这个命令取代了 NormalizeData()、ScaleData() 和 FindVariableFeatures()。
- 转换后的数据将在 SCT 测定中可用,运行 sctransform 后设置为默认值。
- 在标准化过程中,我们还可以消除混杂的变异来源,例如线粒体作图百分比
# store mitochondrial percentage in object meta data
seu_obj[["percent.mt"]] <- PercentageFeatureSet(seu_obj, pattern = "^MT-")
# run sctransform
seu_obj <- SCTransform(seu_obj, vars.to.regress = "percent.mt", verbose = FALSE)
参数学习
seu_obj: 这是你之前提到的Seurat对象,表示你要对这个对象中的数据执行SCTransform处理。
SCTransform(): 这是一个函数调用,用于执行SCTransform处理。
verbose = T: 这个参数设置为TRUE,表示在执行SCTransform时会输出一些详细的信息,通常用于调试和监控处理进度。
vars.to.regress = “percent.mt”: 这是一个用于回归的参数,它指定了要从数据中回归掉的变量。在这里,选择了变量:“percent.mt”。这通常是为了排除一些技术因素对数据的影响。
conserve.memory = T: 这个参数设置为TRUE,表示在处理时尽量减少内存的使用,以避免内存不足的问题。
# These are now standard steps in the Seurat workflow for visualization and clustering
seu_obj <- RunPCA(seu_obj, verbose = T)
seu_obj <- RunUMAP(seu_obj, dims = 1:30, verbose = T)
seu_obj <- FindNeighbors(seu_obj, dims = 1:30, verbose = FALSE)
seu_obj <- FindClusters(seu_obj, verbose = FALSE)
DimPlot(seu_obj, label = TRUE) + NoLegend()
SCTransform() 函数的主要作用是用于对单细胞RNA测序数据进行数据预处理和归一化,以便在后续的分析中减少技术噪音和批次效应的影响,同时使数据更具可比性。以下是 SCTransform() 函数的主要作用:
数据变换:SCTransform() 使用单细胞RNA测序数据,对每个细胞的基因表达数据进行变换。这种变换通常采用对数变换,如对每个细胞的基因表达值取自然对数,以减小数据中的技术噪音。
去批次效应:SCTransform() 可以校正或去除实验中不同批次(如不同时间点、不同样本等)导致的批次效应,从而使数据更加可比。
潜在变量调整:该函数支持通过指定潜在变量(latent variables)来进一步调整数据,以考虑潜在的来源于细胞特性或其他因素的变异性。
数据缩放和中心化:SCTransform() 可以选择性地对数据进行缩放和中心化,以使数据的均值和方差达到一致性,这在许多单细胞分析中是重要的。
返回变量特征:函数通常返回一个包含变量特征的数据集,以便在后续分析中选择重要的基因进行进一步研究。
可视化和分析:SCTransform() 还可以作为准备数据以进行单细胞RNA测序数据分析和可视化的重要步骤,帮助研究人员理解数据并进行后续的数据挖掘和探索。
SCTransform() 函数是单细胞RNA测序数据分析中的重要工具,用于预处理数据,降低噪音,校正批次效应,并为后续分析提供更可靠和可比的数据。这有助于揭示单细胞数据中的生物学信息,如细胞类型、基因表达模式等。
参考文献
SCTransform:单细胞样本的标准化
SCTransform到底做了什么
Normalization and variance stabilization of single-cell RNA-seq data using regularized negative binomial regression
tutorial:Using sctransform in Seurat