使用 Seurat 处理多模态数据

news2024/9/25 11:15:16

文章目录

  • 前言
  • 一、Multimodal analysis有什么用?
  • 二、代码复现
    • 1.数据的导入
    • 2.构建seurat对象,并添加RNA和protein数据
    • 3.根据其单细胞 RNA 测序(scRNA-seq)图谱对细胞进行聚类
    • 4.并排可视化多种模态
      • 4.1.1可视化RNA和蛋白质水平,这里检测的基因CD19在蛋白质和RNA中均有表达
      • 4.1.2 我们可以使用特定的检测键来指定特定的模式 确定 RNA 和蛋白质检测的键
    • 5.确定用于单细胞 RNA 测序(scRNA-seq)簇的细胞表面标志物
    • 6.多模态数据的附加可视化
    • 7.从 10X 多模态实验加载数据
  • 总结(数据领取处)


前言

“Multimodal analysis”(多模态分析)指的是同时整合和分析多种不同类型的数据模式。这可能包括但不限于以下几种组合:

  • 基因表达数据(如 RNA 测序数据)与蛋白质表达数据的结合分析。
  • 基因表达数据与细胞表面标志物数据(如通过抗体检测得到的数据)的联合分析。
  • 不同组学数据(如转录组学和蛋白质组学数据)的综合考量。

通过多模态分析,可以更全面、综合地了解细胞的特征和状态,发现不同数据模式之间的关联和协同关系,从而获得更深入、更全面的生物学见解。


一、Multimodal analysis有什么用?

Seurat v5中的多模式分析可以更全面地理解和解释单细胞转录组和蛋白质组数据,从而提供对细胞类型、基因-蛋白网络、信号通路和功能注释的更深入理解。主要有以下用处?

  1. 细胞类型识别:多模式分析可以结合转录组和蛋白质组数据,帮助确定单个细胞的类型。通过比较转录组和蛋白质组之间的差异,可以更准确地确定细胞群的身份。

  2. 基因-蛋白互作网络分析:多模式分析可以帮助研究人员探索基因和蛋白之间的相互作用。通过将转录组和蛋白质组数据整合在一起,可以建立细胞内基因-蛋白网络,并分析其在细胞功能和疾病发展中的作用。

  3. 信号通路分析:多模式分析有助于研究细胞信号通路的活动。通过分析蛋白质组数据,可以确定不同信号通路的活性水平,并与转录组数据相结合,了解细胞信号传导的动态变化。

  4. 功能注释:多模式分析可以帮助研究人员对细胞功能进行注释。通过整合转录组和蛋白质组数据,可以更全面地了解细胞功能、代谢途径和细胞功能的潜在机制。

二、代码复现

以下代码来自于seuratv5官网,有兴趣的朋友们可以去官网更加详细的了解一下

1.数据的导入

代码如下(示例):

library(Seurat)
library(ggplot2)
library(patchwork)

# 请注意,此数据集还包含约 5%的小鼠细胞,我们可以将其用作蛋白质测量的阴性对照。因此,基因表达矩阵在每个基因的开头都附加了“HUMAN_”或“MOUSE_”
# RNA测量
cbmc.rna <- as.sparse(read.csv(file = "G:/R/multi-modal_data/GSE100866_CBMC_8K_13AB_10X-RNA_umi.csv.gz",
                               sep = ",", header = TRUE, row.names = 1)) # 函数将读取的数据转换为稀疏矩阵形式

# 舍弃除前 100 个表达量最高的小鼠基因之外的所有基因,并且从 CITE-seq 前缀中移除“HUMAN_”
cbmc.rna <- CollapseSpeciesExpressionMatrix(cbmc.rna)

# ADK -- 抗体衍生标签
cbmc.adt <- as.sparse(read.csv(file = "G:/R/multi-modal_data/GSE100866_CBMC_8K_13AB_10X-ADT_umi.csv.gz",
                               sep = ",", header = TRUE, row.names = 1))
# 注意: 由于测量是在相同的细胞中进行的,所有稀疏矩阵具有相同的列名
all.equal(colnames(cbmc.rna), colnames(cbmc.adt))

# 最后的结果是两个稀疏矩阵

2.构建seurat对象,并添加RNA和protein数据

代码如下(示例):

cbmc <- CreateSeuratObject(counts = cbmc.rna)

# 我们可以看到,默认情况下,cbmc 对象包含一个用于存储 RNA 测量值的检测。
Assays(cbmc)

# 创建一个新的检测来存储 ADT 信息
adt_assay <- CreateAssay5Object(counts = cbmc.adt)
cbmc[['ADT']] <- adt_assay
# 验证该对象现在包含多个检测分析
Assays(cbmc)
# 提取在 ADT 检测中测量的特征列表 
rownames(cbmc[['ADT']])

# 我们可以在这两种测定之间轻松地来回切换,以指定用于可视化和分析的默认值
DefaultAssay(cbmc)

# Switch the default to ADT
DefaultAssay(cbmc) <- "ADT"
DefaultAssay(cbmc)

3.根据其单细胞 RNA 测序(scRNA-seq)图谱对细胞进行聚类

代码如下(示例):

# 注意以下所有操作均在 RNA 检测集上执行,并验证默认检测为 RNA
cbmc <- NormalizeData(cbmc)
cbmc <- FindVariableFeatures(cbmc)
cbmc <- ScaleData(cbmc)
cbmc <- RunPCA(cbmc, verbose = FALSE)
cbmc <- FindNeighbors(cbmc, dims = 1:30)
cbmc <- FindClusters(cbmc, resolution = 0.8, verbose = FALSE)
cbmc <- RunUMAP(cbmc, dims = 1:30)
DimPlot(cbmc, label = TRUE)

请添加图片描述

4.并排可视化多种模态

代码如下(示例):

# 注意在某些情况下,相同的特征可能存在于多种模式中——例如,此数据集包含 B 细胞标志物 CD19 的独立测量值(包括蛋白质和 RNA 水平)
DefaultAssay(cbmc) <- 'ADT'
cbmc <- NormalizeData(cbmc,normalization.method = 'CLR', # 表示使用“中心对数比(Centered Log Ratio)”方法进行归一化
                      margin = 2) # 表示沿着矩阵的列(即基因维度)进行归一化操作。通过这种归一化,可以使数据在一定程度上标准化,以便后续更好地进行分析和比较

# DefaultAssay(cbmc) <- 'RNA'
# 这是归一化的另一种方法,得到的结果是相同的
# cbmc <- NormalizeData(cbmc, normalization.method = "CLR", margin = 2, assay = "ADT") # 这里只针对ADT进行归一化

4.1.1可视化RNA和蛋白质水平,这里检测的基因CD19在蛋白质和RNA中均有表达

DefaultAssay(cbmc) <- "ADT"
p1 <- FeaturePlot(cbmc, "CD19", cols = c("lightgrey", "darkgreen")) + ggtitle("CD19 protein")
DefaultAssay(cbmc) <- "RNA"
p2 <- FeaturePlot(cbmc, "CD19") + ggtitle("CD19 RNA")
p1 | p2

4.1.2 我们可以使用特定的检测键来指定特定的模式 确定 RNA 和蛋白质检测的键

Key(cbmc[["RNA"]])
Key(cbmc[["ADT"]])
p1 <- FeaturePlot(cbmc, "adt_CD19", cols = c("lightgrey", "darkgreen")) + ggtitle("CD19 protein")
p2 <- FeaturePlot(cbmc, "rna_CD19") + ggtitle("CD19 RNA")
p1 | p2

请添加图片描述

5.确定用于单细胞 RNA 测序(scRNA-seq)簇的细胞表面标志物

# 我们可以利用我们成对的 CITE-seq 测量来帮助注释源自 scRNA-seq 的簇,并识别蛋白质和 RNA 标记
# 正如我们所知,CD19 是 B 细胞标志物,我们可以确定第 6 簇在表面表达 CD19
VlnPlot(cbmc,'adt_CD19')

# 我们还可以通过差异表达为这个簇识别替代的蛋白质和 RNA 标记物
adt_markers <- FindMarkers(cbmc, ident.1 = 6, assay = "ADT")
rna_markers <- FindMarkers(cbmc, ident.1 = 6, assay = "RNA")

请添加图片描述

head(adt_markers)
               p_val avg_log2FC pct.1 pct.2     p_val_adj
CD19   2.067533e-215  2.5741873     1     1 2.687793e-214
CD45RA 8.106076e-109  0.5300346     1     1 1.053790e-107
CD4    1.123162e-107 -1.6707420     1     1 1.460110e-106
CD14   7.212876e-106 -1.0332070     1     1 9.376739e-105
CD3     1.639633e-87 -1.5823056     1     1  2.131523e-86
CCR5    2.552859e-63  0.3753989     1     1  3.318716e-62
head(rna_markers)
      p_val avg_log2FC pct.1 pct.2 p_val_adj
IGHM      0   6.660187 0.977 0.044         0
CD79A     0   6.748356 0.965 0.045         0
TCL1A     0   7.428099 0.904 0.028         0
CD79B     0   5.525568 0.944 0.089         0
IGHD      0   7.811884 0.857 0.015         0
MS4A1     0   7.523215 0.851 0.016         0

6.多模态数据的附加可视化

# 绘制 ADT 散点图(例如用于流式细胞术的双轴图)
FeatureScatter(cbmc,feature1 = 'adt_CD19',feature2 = 'adt_CD3')

请添加图片描述

# 查看蛋白质和RNA之间的关系
FeatureScatter(cbmc,feature1 = 'adt_CD3',feature2 = 'rna_CD3E')

请添加图片描述

# 让我们看一下原始(未标准化的)ADT 计数。您可以看到这些值相当高,特别是与 RNA 值相比。这是由于细胞中蛋白质的拷贝数显著更高,这显著减少了 ADT 数据中的“缺失值”
FeatureScatter(cbmc, feature1 = "adt_CD4", feature2 = "adt_CD8")|
  FeatureScatter(cbmc, feature1 = "adt_CD4", feature2 = "adt_CD8", slot = "counts")

请添加图片描述

7.从 10X 多模态实验加载数据

# Seurat 还能够分析使用 CellRanger v3 处理的多模态 10X 实验的数据;例如,我们使用一个 7900 个外周血单个核细胞(PBMC)的数据集重新创建上述图表,该数据集可从 10X Genomics 在此处免费获取
pbmc10k.data <- Read10X(data.dir = "/pbmc10k/filtered_feature_bc_matrix/")
rownames(x = pbmc10k.data[["Antibody Capture"]]) <- gsub(pattern = "_[control_]*TotalSeqB", replacement = "",
                                                         x = rownames(x = pbmc10k.data[["Antibody Capture"]]))

pbmc10k <- CreateSeuratObject(counts = pbmc10k.data[["Gene Expression"]], min.cells = 3, min.features = 200)
pbmc10k <- NormalizeData(pbmc10k)
pbmc10k[["ADT"]] <- CreateAssayObject(pbmc10k.data[["Antibody Capture"]][, colnames(x = pbmc10k)])
pbmc10k <- NormalizeData(pbmc10k, assay = "ADT", normalization.method = "CLR")

plot1 <- FeatureScatter(pbmc10k, feature1 = "adt_CD19", feature2 = "adt_CD3", pt.size = 1)
plot2 <- FeatureScatter(pbmc10k, feature1 = "adt_CD4", feature2 = "adt_CD8a", pt.size = 1)
plot3 <- FeatureScatter(pbmc10k, feature1 = "adt_CD3", feature2 = "CD3E", pt.size = 1)
(plot1 + plot2 + plot3) & NoLegend()

plot <- FeatureScatter(cbmc, feature1 = "adt_CD19", feature2 = "adt_CD3") + NoLegend() + theme(axis.title = element_text(size = 18),
                                                                                               legend.text = element_text(size = 18))
ggsave(filename = "../output/images/citeseq_plot.jpg", height = 7, width = 12, plot = plot, quality = 50)

总结(数据领取处)

链接:百度网盘
提取码:bui1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【博客搭建 第二篇章】项目中怎么引入其他的 icon

一、注册账号并将图标添加到自己的项目中 1、网站地址&#xff1a;https://www.iconfont.cn/ 2、注册 iconfont 账号 3、登录 iconfont 网站中 4、添加图标到购物车中 5、添加图标到项目中 6、生成在线连接 7、复制连接 二、项目中配置连接地址 找到项目中的 them…

嵌入式初学-C语言-十九

指针的引入 为函数修改实参提供支持为动态内存管理提供支持为动态数据及结构提供支持为内存访问提供另一种途径 指针的概述 内存地址&#xff1a; 系统为了内存管理的方便将内存划分为一个个内存单元&#xff08;一个内存单元占一个字节&#xff09;&#xff0c;并为每一个…

YARN 调度器的配置与使用

YARN 调度器的配置与使用 一、启动公平调度器1.1 配置 yarn-site.xml创建 fail-scheduler.xml 文件 二、同步配置文件三、重启启动 YARN 集群四、提交作业五、运行结果 一、启动公平调度器 公平调度器的使用由属性yarn.resourcemanager.scheduler.class的设置所决定。YARN默认…

Effective Java学习笔记第27、28条原生态类型和非受检警告

目录 什么是泛型 泛型与编译器 不要轻易使用原生态类型 可以通过通配符类型来替代原生态类型 几个适合原生态类型的场景 消除非受检的警告 什么是非受检警告 如果无法消除警告 本书27-33条主要介绍泛型。首先介绍什么是泛型&#xff0c;它的应用场景是什么。然后重点介…

微信小程序项目-宠物商城项目uniapp源码和代码讲解

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;大前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我…

3D渲染优化:视锥体剔除算法

现在我们知道如何创建场景图并在场景中组织对象&#xff0c;我们将了解如何通过技术“视锥剔除”来限制 GPU 的使用。 这种技术很容易理解。你无需将所有信息发送到 GPU&#xff0c;而是对可见和不可见元素进行排序&#xff0c;并仅渲染可见元素。借助这种技术&#xff0c;你将…

Matlab|考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第四章《考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合…

Baklib:强大的知识库创建工具

Baklib&#xff1a;强大的知识库创建工具 在信息管理和知识分享的数字化时代&#xff0c;Baklib 作为一款功能强大的知识库创建工具&#xff0c;为用户提供了全面的解决方案。本文将介绍 Baklib 的基本信息、特点&#xff0c;以及如何快速部署和使用。 软件简介 Baklib 是一款…

第二十节、有限状态机和抽象类多态

一、抽象类 挂载到动画器上的就是继承抽象类代码 1、使用onenable周期函数启用 2、在每一个周期函数中对抽象类进行调用 3、隐藏公开的变量

[Python学习日记-4] Python中的变量

[Python学习日记-4] Python中的变量 简介 变量的运行原理 变量的使用规则 简介 在Python中&#xff0c;变量是一个具有名称的存储位置&#xff0c;用于存储数据。它们被用来在程序中引用和操作数据。变量在使用前需要先进行声明或赋值&#xff0c;Python是一种动态类型语言&…

Linux应用层开发(7):网络编程

互联网对人类社会产生的巨大变革&#xff0c;大家是有目共睹的&#xff0c;它几乎改变了人类生活的方方面面。互联网通信的本质是数字通信&#xff0c;任何数字通信都离不开通信协议的制定&#xff0c;通信设备只有按照约定的、统一的方式去封装和解析信息&#xff0c;才能实现…

043字符串相乘

题意 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 1 < num1.length, num2.length < 200 难度 中…

Python Dash 一个可以玩转AI的可视化利器

很多人提到Tableau、Power BI等老牌可视化工具&#xff0c;这些工具确实引领了可视化的风潮&#xff0c;有开疆拓土之功。 但这次我要提名一个有黑马潜质的可视化工具-Dash&#xff0c;在某些地方比Tableau、PowerBI更胜一筹。 Dash是一个基于web的Python工具包&#xff0c;所…

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a; 信号处理函数 参数&#xff1a; signum&#xff1a;要处理的信号 handler&#xff1a;信号处理方式 SIG_IGN&#xff1a;忽略信号 SIG_DFL&#xff1a;执行默认操作 handler&#xff1a;捕捉信 …

mysql数据存储问题

目录 MySQL数据存储基础 MySQL数据存放位置 InnoDB存储引擎介绍 Mermaid图表&#xff1a;InnoDB存储引擎数据文件结构 表空间结构详解 组成要素 组织方式 页内组织 性能影响 Mermaid图表&#xff1a;表空间的层次化结构和页内组织 InnoDB行格式详解 行格式类型 Co…

Linux 操作系统:基于环形队列的生产者消费者模型

Linux 操作系统&#xff1a;基于环形队列的生产者消费者模型 一、前言二、大致框架二、P操作、V操作三、生产者生产数据四、生产者获取数据五、代码测试六、所有代码 一、前言 环形队列采用数组模拟&#xff0c;用模运算来模拟环状特性。和基于阻塞队列的生产者消费者模型不同的…

WPF篇(11)-ToolTip控件(提示工具)+Popup弹出窗口

ToolTip控件 ToolTip控件继承于ContentControl&#xff0c;它不能有逻辑或视觉父级&#xff0c;意思是说它不能以控件的形式实例化&#xff0c;它必须依附于某个控件。因为它的功能被设计成提示信息&#xff0c;当鼠标移动到某个控件上方时&#xff0c;悬停一会儿&#xff0c;…

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)

【云存储】SDS软件定义存储&#xff0c;数据存储的类型与技术方案&#xff08;块/文件/对象&#xff0c;Ceph、RBD等&#xff09; 文章目录 1、分布式存储架构&#xff08;软件定义存储SDS&#xff0c;超融合基础架构HCI&#xff09;2、存储类型&#xff08;块存储&#xff0c;…

SQL面试题练习 —— 用户行为路径分析

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;拼多多。 1 题目 有一张用户行为日志表 ods_usr_log, 包含用户id&#xff08;user_id&#xff09;和页面id&#xff08;page_id&#xff09;以及进入页面时间&#xff08;in_ts&#xff09; 问题&#xff1a;统计每天进入A页…

【SpringMVC】SpringMVC实现文件上传和下载

目录 1.文件上传 2.文件下载 1.文件上传 大概的图如下所示&#xff1a; 客户端&#xff1a; 文件上传就是把客户端的文件上传到服务端进行保存。在文件上传时文件和其他请求参数是在 请求体中进行传递。所以不支持 GET 类型请求。实现文件上传&#xff0c;需要提供一个上传的…