高级篇 CNS级分析

空间转录组学完整教程

不做实验也能发10+SCI?CNS级别空间转录组套路全解析

⚠️
免责声明: 本内容仅供医学学习参考,不作为临床诊断依据。 实际临床决策请结合患者具体情况和多学科意见。
🗺️

空间转录组学是近年来最火的技术之一,Nature Methods年度技术, 能够在保留空间位置信息的同时进行转录组分析。 本教程详解空间转录组的完整分析流程,从数据格式到高级可视化, 让你也能发表CNS级别的空间转录组文章!

1. 空间转录组技术概述

Visium (10x Genomics)

55μm直径spot,每个spot包含1-10个细胞,目前应用最广泛

Slide-seq

10μm分辨率,接近单细胞水平,技术难度较高

Stereo-seq

华大技术,500nm分辨率,真正的亚细胞级空间组学

⚠️ 关键区别:传统单细胞测序丢失了空间位置信息, 而空间转录组能够在组织切片上同时获得基因表达和空间坐标,是连接组织学和基因组学的桥梁。

2. 安装与数据加载

# 安装Seurat和空间分析包
install.packages("Seurat")
if (requireNamespace("BiocManager", quietly = TRUE)) {
    BiocManager::install("SeuratDisk")
}

# 加载必要的包
library(Seurat)
library(SeuratDisk)
library(ggplot2)
library(patchwork)
# 加载Visium示例数据
InstallData("stxBrain")  # 人类脑组织数据
LoadData("stxBrain", type = "anterior1")

# 或者加载自己的Visium数据
# 需要以下文件:
# - spatial/tissue_positions_list.csv
# - spatial/scalefactors_json.json
# - spatial/tissue_lowres_image.png
# - filtered_feature_bc_matrix/ (表达矩阵)

brain <- Load10X_Spatial(data.dir = "path/to/visium/folder")

3. 数据预处理与质控

# 查看Seurat对象中的空间信息
brain@images

# 标准Seurat预处理流程
brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE)

# 降维和聚类
brain <- RunPCA(brain, verbose = FALSE)
brain <- FindNeighbors(brain, dims = 1:30)
brain <- FindClusters(brain, resolution = 0.8)

# 运行UMAP
brain <- RunUMAP(brain, dims = 1:30)

💡 SCTransform vs NormalizeData: 对于空间转录组数据,推荐使用SCTransform进行标准化,因为它能够更好地处理技术噪音。

4. 空间可视化

# 基础空间可视化 - 组织切片图
SpatialDimPlot(brain,
    pt.size.factor = 1.5,  # 点的大小
    stroke = 0,           # 描边宽度
    alpha = 0.8            # 透明度
)

# 按聚类着色
SpatialDimPlot(brain,
    group.by = "seurat_clusters",
    pt.size.factor = 1.5,
    label = TRUE,          # 显示聚类标签
    label.size = 3
)

# 按特定基因表达着色
SpatialFeaturePlot(brain,
    features = c("PCNA", "CXCL12"),  # 基因名
    ncol = 2
)

📌 SpatialDimPlot 参数说明

  • pt.size.factor:控制点的显示大小
  • stroke:点的边框宽度,0表示无边框
  • alpha:透明度,适合密集区域
  • crop:TRUE则只显示组织区域

5. 与单细胞数据整合分析

# 假设有一个匹配的单细胞数据集
# 可以用于细胞类型注释和整合分析

# 1. 使用单细胞作为参考进行注释
library(SingleR)

# 提取空间数据表达矩阵
spatial.data <- GetAssayData(brain, slot = "data")

# 使用SingleR注释 (假设有sc.ref参考集)
pred.sc <- SingleR(
    test = spatial.data,
    ref = sc.ref,
    labels = sc.ref$cell_type
)
brain$cell_type <- pred.sc$labels

# 2. 空间可视化细胞类型
SpatialDimPlot(brain, group.by = "cell_type", label = TRUE)

💡 整合分析优势: 将空间转录组与单细胞数据结合,可以: (1) 精确注释每个spot的细胞类型 (2) 识别空间特异性表达的基因 (3) 发现细胞间的空间相互作用关系

6. 识别空间变量基因

# 使用SpatialDecon或SPARKX识别空间模式基因
# 这里展示Seurat内置方法

# 计算空间变异基因
brain <- FindSpatiallyVariableFeatures(
    brain,
    features = VariableFeatures(brain),
    selection.method = "moransi"  # Moran's I统计量
)

# 查看空间变量基因
spatial_vf <- SpatiallyVariableFeatures(brain, selection.method = "moransi")
head(spatial_vf)

# 可视化前几个空间变量基因
SpatialFeaturePlot(brain, features = head(spatial_vf, 4), ncol = 2)

📌 Moran's I: 是衡量空间自相关的统计量,值接近+1表示基因表达呈现空间聚集模式, 值接近0表示随机分布,负值表示离散分布。

7. 空间细胞通讯分析

# 使用CellChat分析空间细胞通讯
# 需要先将每个spot注释为细胞类型

library(CellChat)

# 创建CellChat对象
cellchat <- createCellChat(
    object = brain,
    group.by = "cell_type"
)

# 添加空间信息作为约束
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- identifyCommunicationPatterns(cellchat)

# 可视化通讯网络
netVisual_aggregate(cellchat, layout = "circle")

⚠️ 空间约束通讯: 空间转录组的优势在于可以考虑物理距离约束通讯, 只有相邻的细胞/spot之间才可能发生直接的配体-受体相互作用。

8. 三维空间重建

# 如果有连续切片数据,可以进行3D重建
# 1. 对齐切片
# 2. 合并Seurat对象

# 示例:合并两个相邻切片
brain.list <- list(slice1, slice2)
brain.combined <- merge(
    x = brain.list[[1]],
    y = brain.list[[2]],
    add.cell.ids = c("slice1_", "slice2_"),
    project = "brain_3d"
)

# 3D可视化 (使用rgl包)
library(rgl)
plot3d(
    x = brain.combined$spatial.row,
    y = brain.combined$spatial.col,
    z = brain.combined$slice,
    col = rainbow(10)[brain.combined$seurat_clusters]
)

📝 空间转录组分析流程总结

1 数据加载

Load10X_Spatial 加载Visium数据

2 预处理

SCTransform → PCA → 聚类

3 空间可视化

SpatialDimPlot/FeturePlot

4 高级分析

变量基因、细胞通讯、3D重建