单细胞 RNA 测序(scRNA-seq)是过去几年增长最快的生命科学技术之一,Seurat 是目前最主流的分析 R 包。这篇把完整流程从原始计数矩阵到 UMAP 聚类每步都注释清楚,适合刚入门的人参考。
安装和加载
# 需要 R 4.1 及以上,Seurat v5
install.packages("Seurat")
library(Seurat)
library(ggplot2)
读入数据
# 10x Genomics 输出目录应包含:
# barcodes.tsv.gz, features.tsv.gz, matrix.mtx.gz
counts <- Read10X(data.dir = "data/sample1/")
seurat <- CreateSeuratObject(
counts = counts,
project = "my_project",
min.cells = 3, # 基因至少在 3 个细胞中表达,过滤噪声基因
min.features = 200 # 细胞至少表达 200 个基因,过滤空液滴
)
质量控制(QC)
# 计算线粒体基因比例(高比例通常表示细胞在裂解/凋亡)
seurat[["percent.mt"]] <- PercentageFeatureSet(seurat, pattern = "^MT-")
# 小鼠数据用 "^mt-"
# 可视化 QC 指标
VlnPlot(seurat, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
# 过滤(阈值根据实际数据分布调整,这里只是示例)
seurat <- subset(seurat,
nFeature_RNA > 200 & nFeature_RNA < 5000 & percent.mt < 20)
标准化、高变基因、归一化
seurat <- NormalizeData(seurat) # 每个细胞总 UMI 归一化到 10,000 再 log 变换
seurat <- FindVariableFeatures(seurat, nfeatures = 2000) # 找高变异基因
seurat <- ScaleData(seurat) # z-score 标准化,消除细胞间文库大小差异
降维和聚类
seurat <- RunPCA(seurat) # PCA 降维
ElbowPlot(seurat) # 看拐点,决定用几个 PC(通常 10-20)
seurat <- FindNeighbors(seurat, dims = 1:15) # 构建 KNN 图
seurat <- FindClusters(seurat, resolution = 0.5) # resolution 越高 cluster 越多
seurat <- RunUMAP(seurat, dims = 1:15) # UMAP 可视化
DimPlot(seurat, label = TRUE) # 绘制 UMAP,每个点是一个细胞
找 Marker 基因并注释细胞类型
# 找每个 cluster 的特异性高表达基因
markers <- FindAllMarkers(
seurat,
only.pos = TRUE, # 只找上调基因
min.pct = 0.25, # 至少在 25% 的细胞中表达
logfc.threshold = 0.25
)
# 查看 cluster 0 的 top 10 marker
head(subset(markers, cluster == 0), 10)
# 可视化已知 marker(T 细胞、单核细胞等)
FeaturePlot(seurat, features = c("CD3D", "CD14", "MS4A1"))
运行时间和内存参考
- 10,000 个细胞:普通笔记本,全流程约 10-15 分钟,内存 8GB 足够
- 50,000 个细胞:建议 32GB 以上内存,ScaleData 和 FindClusters 是瓶颈步骤,推荐在服务器跑
- 100,000+ 细胞:考虑使用 Seurat v5 的 sketch 工作流或切换到 AnnData/Scanpy(Python)
文章评论