单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作

news2024/11/28 6:46:48

Seurat

单细胞测序技术是在单个细胞水平上,对基因组、转录组和表观基因组水平进行分析测序技术。bulk RNA-seq获得的是组织或器官等大量细胞中表达信号的均值,无法获取细胞之间的差异信息(即丢失了细胞的异质性), 而单细胞测序技术可以很好的弥补bulk RNA-seq这一不足,即获取混合样本中细胞的异质性信息

文章 单细胞RNA测序(scRNA-seq)Seurat分析流程入门 中涉及Seurat对象的构建、访问和数据提取等操作,本文将对Seurat对象的结构进行深入解读。

1. 单细胞分析中Seurat对象的结构

Seurat R包,主要用于分析单细胞RNA测序数据。Seurat包实现了单细胞RNAseq数据分析的主要步骤,包括质控、归一化、可视化、聚类、差异表达等。Seurat对象用于存储单细胞RNA-seq元数据和分析结果,

Seurat 5.0官网: https://satijalab.org/seurat/

2. Seurat 包的主要功能

  1. 从原始gene表达矩阵构建AnnotatedChip对象,或从已有格式如SingleCellExperiment对象进行转换;

  2. 用于质控的功能,如过滤低质量细胞,检测高变基因等;

  3. 用于数据标准化的方法,如缩放,归一化等;

  4. 用于数据降维和可视化的工具,如PCA,tSNE,UMAP等;

  5. 用于数据聚类的方法,如Louvain算法,K-means等;

  6. 用于差异表达分析的功能;

  7. 支持进行GO/KEGG富集分析,蛋白质相互作用网络分析等;

  8. 提供丰富的绘图功能,如特征作图,等高线图,热图等;

  9. 支持对象的导出与共享, 便于重复分析或与他人交流。

3. Seurat 对象包含的主要域(slots)

Seurat 对象(实际称为AnnotatedChip对象)包含多个域(slots), 存储不同类型的信息,主要关注前4个slots,理解其含义。
##################################################

  1. assays: 存储数据集的表达矩阵及相关信息

这里只有一个RNA域,对应RNA表达数据。其包含:

  • counts:原始表达计数矩阵,行为基因,列为细胞

  • data: 与counts相同,用于兼容以前的seurat版本。 数据进行了VST变换后,存储在data域,而非scale_data域。

  • scale.data: 标准化后的表达矩阵

  • key:表达矩阵的标识符,此处为”rna_“。

  • assay.orig:原始表达矩阵,此处为空。

  • var_features:变异基因信息。如果进行筛选,例如选定了2000个变异基因,存储在var_features域

  • meta.features:包含每个特征的统计量,如平均值、方差、标准化方差等,用于过滤低变异特征。

  • misc:杂项,此处为空。

##################################################

  1. meta_data: 存储细胞元数据,如细胞类型,count数等

meta_data域包含更丰富的信息,如percent.mito,聚类标签等,包含具体信息如下:

  • orig.ident:样品的原始ID,此处全部为”SeuratProject”。

  • nCount_RNA:每个细胞的UMI计数,在RNA表达矩阵中

  • nFeature_RNA:每个细胞检测到的特征数,在RNA表达矩阵中

  • percent.mito:每个细胞线粒体特征的百分比,用于过滤低质量细胞

  • RNA_snn_res.0.5:构建RNA_snn网络图时resolution为0.5时的聚类结果。

  • seurat_clusters:Seurat的FindClusters命令产生的聚类结果,resolution同为0.5。

这个域汇总了样品和表达数据的基本信息,以及两种不同参数下的聚类结果。

##################################################

  1. active.assay: 设置当前使用的表达矩阵, 这里是RNA

  2. active.ident: 细胞ID,对应列名

##################################################

  1. graphs:网络图信息,用于存储PCA,tSNE等结果

  2. reductions:用于存储降维结果,如PCA,UMAP的模型对象

  3. images:存储绘图 Output,用于再现分析过程

  4. project.name:项目名称

  5. version:seurat对象的版本信息

##################################################

  1. commands:存储构建seurat对象使用的所有命令,以支持再现分析过程

每个命令都包含name、time.stamp 时间戳、assay.used、call.string和params等域,记录命令名称、运行时间、使用的表达矩阵、命令语句和参数等信息, 具体如下:

  • ScaleData:标准化表达矩阵。

  • NormalizeData:对表达矩阵进行归一化。

  • FindVariableFeatures:找到高变异特征。

  • RunPCA:进行PCA分析。

  • RunTSNE:进行tSNE分析。

  • RunUMAP:进行UMAP分析。

  • JackStraw:进行置换检验。

  • ScoreJackStraw:给置换检验结果打分。

  • FindNeighbors:构建邻居网络图。

  • FindClusters:进行聚类分析。

  1. tools:存储分析中使用的其他软件包版本信息

4. Seurat 对象基本操作

4.1 访问 Seurat 对象的域slot

Seurat 对象中assays用于存储表达矩阵, counts存储原始数据(稀疏矩阵),data存储Normalize()之后的数据,scale.data存储ScaleData()缩放后的数据,SCT存储标准化之后的数据, meta.data存储细胞注释信息(或称为临床信息), active.assay存储默认的矩阵名, active.ident存储默认的细胞注释信息(或称为临床信息)。

library(Seurat)

# 读取10X PBMC数据
pbmc.data <- Read10X(data.dir = "./pmbc")
sobj <- CreateSeuratObject(counts = pbmc.data)

###### 使用@或$访问第1层域slot ###### 
# 获取原始表达矩阵第一层slot 
counts <- sobj@assays

# 访问元数据
meta <- sobj@meta.data

###### 使用@ + $访问第3层域slot ###### 
# 提取counts域,获得原始表达矩阵
counts <- sobj$RNA@counts

###### 使用[[ ]] 访问域, 允许域名包含特殊字符(如.),和$作用类似###### 
counts <- sobj[["nCount_RNA"]]
counts <- sobj[["RNA"]]


###### GetAssayData获取表达矩阵 ###### 
# 一个Seurat对象可存储多个表达矩阵
counts.matrix <- as.matrix(GetAssayData(object = sobj@assays$RNA, layer = "counts"))[1:10, 1:10]

slotNames():列出所有域的名称。
VariableFeatures():提取高变异特征。

4.2 数据提取和转换

提取数据并转换为data.frame, 可使用@ / $ / [[ ]]对Seurat 对象取值

# 提取counts数据矩阵
expression_matrix <- sobj[["RNA"]]@counts

# 将矩阵转换为data.frame
expression_df <- as.data.frame(expression_matrix)

# 提取细胞元数据矩阵
expression_matrix <- sobj@meta.data

4.3 FetchData()函数提取数据

FetchData()函数可提取meta.datareductions数据框的数据, slot参数只能为 “data”, “scale.data”, “counts

FetchData(object = sobj, vars = 'PC_1',slot = "counts")

FetchData(object = sobj, vars = 'nCount_RNA')

FetchData(object = sobj, vars = 'groups')

FetchData(object = sobj, vars = 'PPBP')

FetchData(object = sobj, vars = c("tSNE_1","tSNE_2"),slot = "counts")

FetchData(object = sobj, vars = c("tSNE_1","tSNE_2"),slot = "data")

FetchData(object = sobj, vars = c("tSNE_1","tSNE_2"),slot = "scale.data")

4.4 subset()函数提取数据

使用subset()根据meta.data中因素对Seurat对象进行子集的选择(或过滤)。

# 提取MT-开头的基因的meta.data至percent.mito列中
sobj <- PercentageFeatureSet(sobj, pattern = "^MT-", col.name = "percent.mito")

# 提取每个细胞中检测特征数 大于200且小于2500,线粒体含量小于5%的数据
sobj <- subset(sobj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mito < 5)

4.5 为Seurat对象添加域

add.data <- data.frame(
   gene = c("gene1", "gene2", "gene3"),
   value = c(1.2, 3.4, 5.6))

# 将my_data添加到Seurat对象的misc slot中
sobj@misc$add_data <- add.data

# 查看misc slot中的my_data
sobj@misc$add_data 
##    gene value
## 1 gene1   1.2
## 2 gene2   3.4
## 3 gene3   5.6

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

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

相关文章

快速上手 GreatSQL 8.0.32-25 with openEuler 24.03 LTS

5 月底&#xff0c;openEuler 24.03 LTS 发布&#xff0c;详情戳&#xff1a; 恭喜&#xff01;openEuler 24.03 LTS 版本发布&#xff1a;首个AI原生开源操作系统 在诸多亮点特性中&#xff0c;有一条值得注意&#xff1a; 集成 GreatSQL 数据库&#xff0c;适用于金融级应用场…

JAVA面试题:Redis分布式锁

Redis分布式锁 分布式锁使用的场景 集群情况下的定时任务,抢单,幂等性等场景 抢券场景 查询库存 -> 扣减库存 多个并发线程同时查询库存,出现超卖问题 添加互斥锁 所有线程执行操作之前必须尝试获取锁 保证一次只有一个线程能走查询库存->扣减库存的流程 Redis分…

模糊控制器实现对某个对象追踪输入

MATLAB是一个十分便捷的软件&#xff0c;里面提供了许多集成的组件&#xff0c;本文利用simulink实现模糊控制器实现对某个对象追踪输入。 这里的对象根据自己的需求可以修改&#xff0c;那么搭建一个闭环控制系统并不是难事儿&#xff0c;主要是对于模糊控制器参数的设置&…

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…

【Linux】运维-Kubernetes(k8s)应用介绍及使用-了解

一、介绍 Kubernetes&#xff0c;也被称为K8s或Kube&#xff0c;是谷歌推出的业界最受欢迎的容器编排器。 K8s是一个架构良好的分布式系统的例子。它将集群中的所有机器都视为单个资源池的一部分。 K8s与其他成熟的分布式系统一样&#xff0c;有两层&#xff1a;头节点和工作节…

defer关键字

【1】defer关键字的作用&#xff1a; 在函数中&#xff0c;程序员经常需要创建资源&#xff0c;为了在函数执行完毕后&#xff0c;及时的释放资源&#xff0c;Go的设计者提供defer关键字 【2】案例展示&#xff1a; 【3】代码变动一下&#xff0c;再次看结果&#xff1a; 发…

Vue3【十九】自定义Hooks钩子 将数据和方法分组

Vue3【十九】自定义Hooks钩子 将数据和方法分组 Vue3【十九】自定义Hooks钩子 将数据和方法分组 每个分组都可以放置 各种生命周期钩子 分组和可以使用计算属性等 案例截图 目录结构 代码 person.vue <template><div class"person"><h2>Vue3自定…

Ecovadis认证准则

Ecovadis准则是一个国际性的企业社会责任(CSR)评估平台&#xff0c;旨在帮助企业、投资者、供应商和利益相关者等评估和管理其全球供应链的社会和环境影响。该准则涵盖了可持续性、人权、劳工权利、环境保护等方面的评估内容&#xff0c;为企业提供了全面的评估标准和管理工具&…

轻松连接远程服务器SecureCRT for Mac/Windows

SecureCRT是一款功能强大的终端仿真器和文件传输工具&#xff0c;专为网络管理员、开发人员和系统工程师设计。它支持SSH、Telnet、RDP和串口等多种协议&#xff0c;提供安全、高效的远程访问和管理体验。SecureCRT具有多窗口/多标签管理、自定义终端仿真、颜色方案优化等高级功…

GStreamer安装——Android

Android安装 支持所有从2.3.1Gingerbread开始的版本 先决条件 开发机器是您开发Android应用程序的地方&#xff0c;然后您将其部署在目标机器上&#xff0c;目标机器显然应该是Android设备。 开发机器可以是Linux、Mac OS X或Windows&#xff0c;并且需要安装&#xff1a; 最…

【机器学习】常用的分类算法代码实现

文章目录 任务&数据集一、基算法1.1 决策树&#xff08;Decision Tree&#xff09;1.2 逻辑回归&#xff08;Logistic Regression&#xff09;1.3 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 二、集成算法2.1 随机森林&#xff08;Random Forest&…

哪个牌子洗地机最好?四款甄选佳品安利,质量放心

作为一个熟悉智能清洁家电的行业者&#xff0c;洗地机可谓是实用性最高的地面清洁工具&#xff0c;这个实用性一方面是清洁力强&#xff0c;它集合了扫地和拖地能力&#xff0c;另一方面是操作方便&#xff0c;清洁速度快。可是面对市面上种类繁多的智能清洁家电&#xff0c;往…

【Python】已完美解决:(Python键盘中断报错问题) KeyboardInterrupt

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 已解决&#xff1a;Python中处理KeyboardInterrupt&#xff08;键盘中断&#xff09;报错问题 一、问题背景 在Python编程中&#xff0c;当我们运…

晨持绪科技:抖音网店怎么做有前景

在数字时代的浪潮中&#xff0c;抖音平台以其独特的魅力和庞大的用户基础成为电商的新阵地。开设一家有前景的抖音网店&#xff0c;不仅需要对市场脉搏有敏锐的洞察力&#xff0c;还需融合创新思维与数据驱动的营销策略。 明确定位是成功的先声。深入分析目标消费群体的需求与偏…

SpringCash

文章目录 简介引入依赖常用注解application.yml使用1. 启动类添加注解使用方法上添加注解 简介 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能底层可以使用EHCache、Caffeine、Redis实现缓存。 注解一般放在Controller的方法上&#xff0c;CachePut 注解一般有…

【Java面试】十九、并发篇(下):线程池

文章目录 1、为什么要使用线程池2、线程池的执行原理2.1 七个核心参数2.2 线程池的执行原理 3、线程池用到的常见的阻塞队列有哪些4、如何确定核心线程数开多少个&#xff1f;5、线程池的种类有哪些&#xff1f;6、为什么不建议用Executors封装好的静态方法创建线程池7、线程池…

虚拟化 之七 详解构造带有 jailhouse 的 openEuler 系统

构造一个默认带有 jailhouse 的 openEuler 系统实际上就是创建一个包含 jailhouse 软件包的 openEuler 发行版,创建的过程在 x86 和 嵌入式平台差距很大,因此,本文我们分别进行详细介绍。 x86_64 平台 对于 x86_64 平台,如果手动从头创建(参考 Linux From Scratch)一个自…

Kubernetes 集群架构

etcd 集群状态存储&#xff1a;etcd 存储所有 Kubernetes 对象的状态&#xff0c;例如部署、pod、服务、配置映射和机密。配置管理&#xff1a;集群配置的更改存储在 etcd 中&#xff0c;允许 Kubernetes 管理和维护集群的所需状态。 注意&#xff1a;etcd 可能位于 kube-syst…

【ARM Cache 与 MMU/MPU 系列文章 2.1 -- 什么是 Cache PoP 及 PoDP ?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 PoP 及 PoDPCache PoDPCache PoP应用和影响PoP 及 PoDP Cache PoDP 点对深度持久性(Point of Deep Persistence, PoDP)是内存系统中的一个点,在该点达到的任何写操作即使在系统供电…