空间转录组: Visium HD 数据集分析 (2)

简介: 空间转录组: Visium HD 数据集分析 (2)

引言

本系列讲解 空间转录组学 (Spatial Transcriptomics) 相关基础知识与数据分析教程,持续更新,欢迎关注,转发,文末有交流群

QC 质量控制

我们使用 SpotSweeper 对子集化的 16 µm 数据进行质量控制。

# calculate per-cell QC metrics
mt <- grepl("^MT-", rownames(.vhd16))
.vhd16 <- addPerCellQCMetrics(.vhd16, subsets=list(mt=mt))
# determine outliers based on 
# - low log-library size
# - few uniquely detected features
# - high mitochondrial count fraction
.vhd16 <- localOutliers(.vhd16, metric="sum", direction="lower", log=TRUE)
.vhd16 <- localOutliers(.vhd16, metric="detected", direction="lower", log=TRUE)
.vhd16 <- localOutliers(.vhd16, metric="subsets_mt_percent", direction="higher", log=TRUE)
.vhd16$discard <- 
    .vhd16$sum_outliers | 
    .vhd16$detected_outliers | 
    .vhd16$subsets_mt_percent_outliers
# tabulate number of bins retained 
# vs. removed by any criterion 
table(.vhd16$discard)

我们可以将 SpotSweeper 在空间中识别的局部异常值可视化:

plotCoords(.vhd16, point_shape=15, annotate="discard") + ggtitle("discard") +
plotCoords(.vhd16, point_shape=15, annotate="sum_outliers") + ggtitle("low_lib_size") +
plotCoords(.vhd16, point_shape=15, annotate="detected_outliers") + ggtitle("low_n_features") +
plot_layout(nrow=1, guides="collect") & 
    theme(
        plot.title=element_text(hjust=0.5),
        legend.key.size=unit(0, "lines")) &
    guides(col=guide_legend(override.aes=list(size=3))) & 
    scale_color_manual("discard", values=c("lavender", "purple"))

最后,我们将 Visium HD 16 µm 对象子集到通过 QC 的容器中:

.vhd16 <- .vhd16[, !.vhd16$discard]
dim(.vhd16)

聚类

首先,我们确定目标区域中的高变异基因(HVG):

.vhd16 <- logNormCounts(.vhd16)
dec <- modelGeneVar(.vhd16)
hvg <- getTopHVGs(dec, n=3e3)

首先通过一对空间核函数捕捉基因表达在空间上的变化,接着进行降维处理,再通过图聚类方法划分出不同的空间区域。

# set seed for random number generation
# in order to make results reproducible
set.seed(112358)
# 'Banksy' parameter settings
k <- 8   # consider first order neighbors
l <- 0.2 # use little spatial information
a <- "logcounts"
xy <- c("array_row", "array_col")
# restrict to selected features
tmp <- .vhd16[hvg, ]
# compute spatially aware 'Banksy' PCs
tmp <- computeBanksy(tmp, assay_name=a, coord_names=xy, k_geom=k)
tmp <- runBanksyPCA(tmp, lambda=l, npcs=20)
reducedDim(.vhd16, "PCA") <- reducedDim(tmp)
## run UMAP (for visualization purposes only)
# .vhd16 <- runUMAP(.vhd16, dimred="PCA")
# build cellular shared nearest-neighbor (SNN) graph
g <- buildSNNGraph(.vhd16, use.dimred="PCA", type="jaccard", k=20)
# cluster using Leiden community detection algorithm
k <- cluster_leiden(g, objective_function="modularity", resolution=1.2)
table(.vhd16$Banksy <- factor(k$membership))

接下来,我们可以进行差异基因表达(DGE)分析,以识别每个聚类的标记基因;我们还计算所选标记基因在各聚类中的平均表达水平:

# differential gene expression analysis
mgs <- findMarkers(.vhd16, groups=.vhd16$Banksy, direction="up")
# select for a few markers per cluster
top <- lapply(mgs, \(df) rownames(df)[df$Top <= 2])
top <- unique(unlist(top))
# average expression by clusters
pbs <- aggregateAcrossCells(.vhd16, 
    ids=.vhd16$Banksy, subset.row=top, 
    use.assay.type="logcounts", statistics="mean")

每个簇中的标记基因可以通过热图可视化:

# visualize averages z-scaled across clusters
pheatmap(
    mat=t(assay(pbs)), scale="column", breaks=seq(-2, 2, length=101), 
    cellwidth=10, cellheight=10, treeheight_row=5, treeheight_col=5)

或者,我们可以可视化空间中选定标记的 bin-wise 表达:

gs <- c("MMP2", "PIGR", "IGHG1")
ps <- lapply(gs, \(.) plotCoords(.vhd16, annotate=., point_shape=15, 
                                 point_size=0.8, assay_name="logcounts"))
wrap_plots(ps, nrow=1) & theme(
  legend.key.width=unit(0.5, "lines"),
  legend.key.height=unit(1, "lines")) &
  scale_color_gradientn(colors=rev(hcl.colors(9, "Rocket")))

相关文章
|
1月前
|
Java 开发者
Java高级技术深度解析:性能优化与架构设计
本文深入解析Java高级技术,涵盖JVM性能调优、并发编程、内存模型与架构设计。从G1/ZGC垃圾回收到CompletableFuture异步处理,剖析底层机制与实战优化策略,助力构建高性能、高可用的Java系统。
198 47
|
1月前
|
API PHP 数据库
解锁PHP数组的强大威力:超越基础遍历
解锁PHP数组的强大威力:超越基础遍历
|
2月前
|
编解码 数据可视化 数据挖掘
空间转录组: Visium HD 数据集分析 (1)
空间转录组: Visium HD 数据集分析 (1)
232 27
空间转录组: Visium HD 数据集分析 (1)
|
2月前
|
人工智能 开发框架 安全
浅谈 Agent 开发工具链演进历程
模型带来了意识和自主性,但在输出结果的确定性和一致性上降低了。无论是基础大模型厂商,还是提供开发工具链和运行保障的厂家,本质都是希望提升输出的可靠性,只是不同的团队基因和行业判断,提供了不同的实现路径。本文按四个阶段,通过串联一些知名的开发工具,来回顾 Agent 开发工具链的演进历程。
503 49
|
1月前
|
机器学习/深度学习 人工智能 并行计算
Transformer的核心:自注意力机制
自注意力机制是Transformer的核心,让序列中每个元素直接关联所有其他元素,实现全局信息交互。相比RNN的顺序处理和CNN的局部感知,它能并行计算、捕捉长距离依赖,并提供可解释的权重分布,彻底改变了序列建模方式,成为大模型崛起的关键基石。(239字)
|
1月前
|
存储 缓存 测试技术
解锁Python超能力:深入理解装饰器
解锁Python超能力:深入理解装饰器
238 116
|
1月前
|
安全 数据库 Python
超越`open()`:深入理解Python上下文管理器
超越`open()`:深入理解Python上下文管理器
224 116
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
GPT与BERT深度解析:Transformer的双子星架构
GPT基于Transformer解码器,擅长文本生成;BERT基于编码器,专注文本理解。二者在架构、注意力机制和训练目标上差异显著,分别适用于生成与理解任务,体现了AI智能的多元化发展。
|
1月前
|
数据处理 Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
208 43