现在我们已经有了整合的高质量的细胞,我们想知道我们的细胞群体中存在的不同细胞类型。
sc_workflow_integration.png
为了克服scRNA-seq数据中任何单个基因表达中广泛的技术噪音,Seurat根据细胞从整合的可变性最高的基因的表达中得出的PCA分数将细胞分配到不同的簇,每个PC实质上代表一个结合了相关基因集信息的“metagene”。因此,确定要在分群步骤中包括多少PC对于确保我们捕获数据集中存在的大多数变异或细胞类型是很重要的。
在决定下游分群分析要包括哪些PC之前,先探索下这些PC非常有用。
cells
参数指定用于绘图的PCA得分负向最低或正向最高的细胞数量。我们的想法是,我们正在寻找一个PC,它的热图开始看起来更“模糊”,也就是说,基因组之间的区别不是那么明显。
# Explore heatmap of PCs
DimHeatmap(seurat_integrated,
dims = 1:9,
cells = 500,
balanced = TRUE)
如果我们想要探索大量的PC,这种方法可能会很慢,很难将可视乎单个基因。在相同的脉络下,为了探索大量的PC,我们可以通过驱动PC的PCA得分打印出前10个(或更多)正向和负向基因。
# Printing out the most variable genes driving PCs
print(x = seurat_integrated[["pca"]],
dims = 1:10,
nfeatures = 5)
让我们使用排名前40位的PC绘制一张elbow plot:
# Plot the elbow plot
ElbowPlot(object = seurat_integrated,
ndims = 40)
基于这个曲线图,我们可以粗略地根据elbow出现在PC8-PC10周围的位置来确定大部分变化,或者有人可能会争辩说,应该是当数据点开始接近X轴时,PC30左右。这让我们对需要包括的PC数量有了一个非常粗略的了解,我们可以以更定量的方式提取这里的可视化的信息,这可能会更可靠一些。
基于这个曲线图,我们可以粗略地根据elbow 出现(接触底部)在PC12-PC16的位置之间来确定出大部分变化。虽然这让我们对需要包括的PC数量有了很好的粗略了解,但更定量的方法可能会更可靠一些。我们可以通过取较大的值来计算主成分开始弯曲的位置:
我们将从计算第一个度量开始:
# Determine percent of variation associated with each PC
pct <- seurat_integrated[["pca"]]@stdev / sum(seurat_integrated[["pca"]]@stdev) * 100
# Calculate cumulative percents for each PC
cumu <- cumsum(pct)
# Determine which PC exhibits cumulative percent greater than 90% and % variation associated with the PC as less than 5
co1 <- which(cumu > 90 & pct < 5)[1]
co1
第一个度量返回PC42作为符合这些要求的PC。让我们检查第二个度量,它标识了连续PC之间变化百分比小于0.1%的PC:
# Determine the difference between variation of PC and subsequent PC
co2 <- sort(which((pct[1:length(pct) - 1] - pct[2:length(pct)]) > 0.1), decreasing = T)[1] + 1
# last point where change of % of variation is more than 0.1%.
co2
第二个度量返回PC14。通常,我们会选择这两个指标中最小的一个,因为PC覆盖了数据中的大部分变化。
# Minimum of the two calculation
pcs <- min(co1, co2)
pcs
基于这些指标,对于Seurat中的细胞分群,我们将使用前14个PC来生成群集。我们可以再次绘制elbow plot,并覆盖使用我们的指标确定的信息:
# Create a dataframe with values
plot_df <- data.frame(pct = pct,
cumu = cumu,
rank = 1:length(pct))
# Elbow plot to visualize
ggplot(plot_df, aes(cumu, pct, label = rank, color = rank > pcs)) +
geom_text() +
geom_vline(xintercept = 90, color = "grey") +
geom_hline(yintercept = min(pct[pct > 5]), color = "grey") +
theme_bw()
虽然上述两种方法与Seurat的旧方法一起被更多地用于归一化和鉴定可变基因,但它们不再像以前那样重要。这是因为SCTransform方法比旧方法更准确。
旧的方法在一些较高的PC中加入了一些技术差异来源,因此PC的选择更为重要。SCTransform更好地估计了差异,并且在较高的PC中不经常包括这些技术差异来源。
从理论上讲,使用SCTransform时,我们选择的PC越多,在执行分群时考虑的差异就越大,但执行分群所需的时间要花费更多。因此,对于此分析,我们将使用前40个PC来生成群集。
未完待续......
注:以上内容来自哈佛大学生物信息中心(HBC)_的教学团队的生物信息学培训课程。原文链接:https://hbctraining.github.io/scRNA-seq/schedule/