
生信小记:使用Seurat包处理多模态数据
在一次实验中,我们可以对同一个细胞测量不同分子层面的数据(如基因表达、蛋白质表达、表观遗传修饰、空间分布等等),所测得的数据我们称之为多模态数据(multimodal data)。例如,CITE-seq可以同时检测单细胞的转录组RNA和表面蛋白表达水平;10X Multiome可以同时测量单细胞的转录组RNA和ATAC(染色质可及性)。本篇文章将以一个包括8617个脐带血单个核细胞(CBMC)的CITE-seq结果(包含转录组RNA测序和表面蛋白丰度估计值)的数据集,介绍如何使用Seurat包对多模态数据进行分析。
导入数据,创建Seurat对象,并加入RNA和表面蛋白数据
官方教程中介绍的方法如下:
1 | library(Seurat) |
然而,由于官方所给的下载链接为ftp协议(需要进行一系列复杂的设置才能正常下载……然鹅我到现在也没有下载成,伟大如Deepseek也在ftp面前落败),本文章改用下述方法直接下载并加载Seurat数据集。
1 | library(Seurat) |
- 运行结果:
1 | Assays(cbmc) |
对于导入好的数据,我们可以:
1 | # 用`rownames()`函数查看我们所测定的特征(基因)列表: |
- 运行结果:
1 | > Assays(cbmc) |
根据转录组测序结果进行细胞聚类
这一步和《Seurat的常见分析工作流程:以PBMC_3K数据集为例》这篇文章中所提到的其实是一样的,但要记得先把上一步被我们切走的默认Assay值切回来(欸嘿!)。
1 | DefaultAssay(cbmc) <- "RNA" |

多模态数据的并排可视化
如果想研究某一个基因在不同细胞中的转录水平和蛋白质表达水平的对应关系(或者相互验证某一基因的表达情况),我们可以通过将多模态数据并排可视化。
1 | cbmc <- NormalizeData(cbmc, normalization.method = "CLR", margin = 2, assay = "ADT") |

- 标记了一处问题:为什么ADT数据使用CLR进行标准化?(查了很多资料没有搞懂,先放放)
在不同的Assay中,特征名可能重名。比如,在RNA和ADT这两个Assay中都有一列CD19的数据,那么可能会冲突而影响分析。为了避免这种情况,每一个Assay均有其唯一标识符,称为“Key”。默认情况下,RNA的Key为“rna_”,ADT的Key为“adt_”。我们也可以通过key()查询不同Assay的唯一标识符,在后续过程中通过明确key参数来指定对哪一个Assay的数据进行处理,而不用频繁地切换默认Assay。
1 | Key(cbmc[["RNA"]]) |
- 运行结果:
1 | > Key(cbmc[["RNA"]]) |
1 | p1 <- FeaturePlot(cbmc, "adt_CD19", cols = c("lightgrey", "darkgreen")) + ggtitle("CD19 protein") |
输出的图象同上,这里不再重复。
鉴定不同细胞集群的表面蛋白标记
我们知道,CD19是B细胞的标志,通过绘制小提琴图我们可以识别B细胞集群(细胞集群6)。
1 | VlnPlot(cbmc, "adt_CD19") |

通过FindMarkers()函数,我们可以找出该细胞簇中差异表达的RNA和蛋白质。
1 | adt_markers <- FindMarkers(cbmc, ident.1 = 6, assay = "ADT") |
- 运行结果:
1 | > head(adt_markers) |
多模态数据的其他可视化方法
我们可以通过绘制散点图来可视化不同表面蛋白之间、RNA和蛋白质之间的表达关系。
1 | FeatureScatter(cbmc, feature1 = "adt_CD19", feature2 = "adt_CD3") |

1 | FeatureScatter(cbmc, feature1 = "adt_CD3", feature2 = "rna_CD3E") |

1 | FeatureScatter(cbmc, feature1 = "adt_CD4", feature2 = "adt_CD8") |

由于蛋白质的数量和RNA相比超级无敌巨多,所以如果没有标准化……横纵轴的数量级会变得很恐怖:
1 | FeatureScatter(cbmc, feature1 = "adt_CD4", feature2 = "adt_CD8", slot = "counts") |

加载通过10X Multiome获得的多模态数据
这里我们利用10X Multiome提供的PBMC数据集进行演示。需要下载的文件为Feature / cell matrix (filtered)。我们下载的多模态数据中包含以下两种数据:
- Gene Expression:转录组RNA测序数据。
- Antibody Capture:ADT数据。
1 | # 加载数据 |

1 | plot <- FeatureScatter(cbmc, feature1 = "adt_CD19", feature2 = "adt_CD3") + NoLegend() + theme(axis.title = |

官方教程中还利用ggsave()进行了保存。
1 | ggsave(filename = "../output/images/citeseq_plot.jpg", height = 7, width = 12, plot = plot, quality = 50) |
完整代码
1 | library(Seurat) |