许多大佬的软件想要构建一个大而美的生态,从 monocle2 开始就能做单细胞的质控、降维、分群、注释这一系列的分析,但不幸的是我们只知道 monocle 系列还是主要做拟时序分析,一方面是因为 Seurat 有先发优势,出名要趁早,生态太过强大,另一方面 monocle2 和monocle3 软件有自身的问题,很难安装或者有很多 bug,远没有 Seurat 稳定。

在这里插入图片描述

什么是Monocle3?

不过怎么样Monocle3 还是最常用的单细胞轨迹分析工具之一,它能够通过算法学习细胞在动态生物学过程中基因表达变化的序列,从而构建出细胞状态转变的轨迹。与传统实验方法不同,Monocle3无需纯化处于中间状态的细胞,就能让我们清晰地看到细胞从一种功能“状态”向另一种状态的过渡。

当细胞过程存在多种结果时,Monocle3会构建出“分支”轨迹,这些分支对应着细胞的“决策”过程。它还提供了强大的工具来识别受这些决策影响以及参与决策的基因,帮助我们深入理解细胞命运决定的分子机制。

Monocle3核心思想

无需通过实验将细胞提纯为离散状态,而是借助算法学习细胞在动态生物学过程中必然经历的基因表达变化序列,进而掌握基因表达变化的整体 “轨迹”,并确定每个细胞在该轨迹中的准确位置。

核心工作流程

Monocle3的轨迹重建工作流程与聚类分析流程相似,但增加了几个关键步骤。下面我们详细介绍其核心流程:

安装

注意 linux、mac 安装都需要编译,那么就需要 gcc、gfortran等编译软件,确保已经安装

sudo apt install build-essential pkg-config libgdal-dev -y
BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats','limma', 'lme4', 'S4Vectors', 'SingleCellExperiment','SummarizedExperiment', 'batchelor', 'HDF5Array','ggrastr'))
BiocManager::install("bnprks/BPCells/r")
BiocManager::install('cole-trapnell-lab/monocle3')
library(monocle3)

1. 数据准备与初始化

首先,需要将数据加载到Monocle3的cell_data_set(CDS)对象中,这是Monocle3处理数据的基本单位。CDS对象包含三个关键部分:表达矩阵、细胞元数据和基因注释。

官网示例

library(monocle3)
# 加载数据
expression_matrix <- readRDS(url("https://depts.washington.edu:/trapnell-lab/software/monocle3/celegans/data/packer_embryo_expression.rds"))
cell_metadata <- readRDS(url("https://depts.washington.edu:/trapnell-lab/software/monocle3/celegans/data/packer_embryo_colData.rds"))
gene_annotation <- readRDS(url("https://depts.washington.edu:/trapnell-lab/software/monocle3/celegans/data/packer_embryo_rowData.rds"))# 创建CDS对象
cds <- new_cell_data_set(expression_matrix,cell_metadata = cell_metadata,gene_metadata = gene_annotation)

但是更多时候我们是从已经处理好的 Seurat 对象构建CDS对象

# srt是之前注释好的Seurat 对象
cds <- monocle3::new_cell_data_set(expression_data = SeuratObject::GetAssayData(srt, assay = "RNA", layer = "counts"),cell_metadata = srt@meta.data,gene_metadata = data.frame(gene_short_name = rownames(srt), row.names = rownames(srt))
)

2. 数据预处理

预处理步骤与聚类分析完全相同,包括数据标准化和批次效应校正等。在批次校正中,可以使用align_cds()函数,并通过alignment_group指定批次分组

# 数据预处理
cds <- preprocess_cds(cds, num_dim = 50)
# 批次校正
cds <- align_cds(cds, alignment_group = "batch")

3. 降维与可视化

接下来进行数据降维,对于轨迹分析,强烈建议使用UMAP方法(默认方法)。降维后可以使用plot_cells()函数可视化结果,通过不同的颜色编码展示细胞类型等信息。

# 降维
cds <- reduce_dimension(cds)

用 Seurat 对象中的 UMAP 替换 CDS 中的

cds.embed <- cds@int_colData$reducedDims$UMAP
int.embed <- Embeddings(srt, reduction = "umap")
int.embed <- int.embed[rownames(cds.embed), ]
cds@int_colData$reducedDims$UMAP <- int.embed

可视化 UMAP 图

plot_cells(cds, label_groups_by_cluster = FALSE, color_cells_by = "cell.type")

通过这一步骤,我们可以初步观察到数据中存在的轨迹结构,以及不同细胞类型在轨迹上的分布。

4. 细胞聚类

与聚类分析类似,使用cluster_cells()函数对细胞进行聚类。在轨迹分析中,每个细胞不仅被分配到一个聚类,还会被分配到一个分区(partition),每个分区最终会形成一个独立的轨迹。

不同的分区可以有不同的分化起始点,这也符合现实情况,因为很可能这些细胞是多起源的。

# 细胞聚类
cds <- cluster_cells(cds)
# 按分区可视化
plot_cells(cds, color_cells_by = "partition")

5. 学习轨迹图

使用learn_graph()函数在每个分区内拟合主图(principal graph),该图将用于后续的分支分析和差异表达分析等下游步骤。

# 学习轨迹图
cds <- learn_graph(cds)
# 可视化轨迹图
plot_cells(cds, color_cells_by = "cell.type", label_groups_by_cluster = FALSE, label_leaves = FALSE, label_branch_points = FALSE)

轨迹图的构建是Monocle3轨迹分析的核心步骤之一,它能够捕捉细胞状态之间的连续过渡关系。

6. 以伪时间(Pseudotime)排序细胞

伪时间是衡量单个细胞在细胞分化等过程中进展程度的指标。通过order_cells()函数,我们可以根据细胞在轨迹上的进展对其进行排序。

  • 什么是伪时间? 伪时间是一个抽象的进展单位,它表示细胞沿着学习到的轨迹从起始状态到结束状态所经历的距离。在许多生物学过程中,细胞的发育并不同步,伪时间很好地解决了这种不同步发育带来的分析难题。
# 按伪时间排序细胞
cds <- order_cells(cds)
# 按伪时间可视化
plot_cells(cds, color_cells_by = "pseudotime", ...)

在排序过程中,需要指定轨迹图的根节点(root nodes),可以通过图形界面手动选择,也可以通过编程方式指定。例如,可根据最早时间点的细胞分布来自动确定根节点:

下边这个函数可以帮助我们选择发育起点,比如我们可以修改为从某一类细胞发育作为 root,只需要修改embryo.time.bin 为 cell.type 和time_bin 为我们想要设定的细胞类型

# 编程方式指定根节点
get_earliest_principal_node <- function(cds, time_bin="130-170"){cell_ids <- which(colData(cds)[, "embryo.time.bin"] == time_bin)closest_vertex <-cds@principal_graph_aux[["UMAP"]]$pr_graph_cell_proj_closest_vertexclosest_vertex <- as.matrix(closest_vertex[colnames(cds), ])root_pr_nodes <-igraph::V(principal_graph(cds)[["UMAP"]])$name[as.numeric(names(which.max(table(closest_vertex[cell_ids,]))))]root_pr_nodes
}
cds <- order_cells(cds, root_pr_nodes = get_earliest_principal_node(cds))

值得注意的是,未从根节点可达的细胞会被分配无限伪时间(显示为灰色),因此通常应为每个分区至少选择一个根节点。

7. 时序相关差异表达分析

Monocle3提供了强大的差异表达分析工具,可用于寻找随着伪时间变化或在不同分支中表达发生变化的基因。例如:

可以选择前 10 个基因展示,官网教程是自己选择的与研究相关的基因

genes <- monocle3::graph_test(cds, neighbor_graph = "principal_graph", reduction_method = "UMAP", cores = 32)
top10 <- genes %>%top_n(n = 10, morans_I) %>%pull(gene_short_name) %>%as.character()

展示AFD_genes 基因随时间变化图

AFD_genes <- c("gcy-8", "dac-1", "oig-8")
AFD_lineage_cds <- cds[rowData(cds)$gene_short_name %in% AFD_genes,colData(cds)$cell.type %in% c("AFD")]
AFD_lineage_cds <- order_cells(AFD_lineage_cds)plot_genes_in_pseudotime(AFD_lineage_cds,color_cells_by="embryo.time.bin",min_expr=0.5)

8. 拟时序基因热图

这里演示下选择 50 个基因画热图用 junjun 老师的 R 包ClusterGVis绘制,虽然 monocle3 有自己的分模块热图,感觉没啥用也不好看,不如这个更醒目一些。

top50 <- genes %>%top_n(n = 10, morans_I) %>%pull(gene_short_name) %>%as.character()

绘制热图,cluster.num 分 5 个 cluster 需要自己设置,markGenes 随机选择 30 个展示,可以自己设置标注哪些基因

library(ClusterGVis)# kmeans
ck <- clusterData(mat,cluster.method = "kmeans",cluster.num = 5)# add line annotation
pdf('monocle3.pdf',height = 10,width = 8,onefile = F)
visCluster(object = ck,plot.type = "both",add.sampleanno = F,markGenes = sample(rownames(mat),30,replace = F))
dev.off()

注意:本图为示例图,并非上边代码执行结果

Reference

https://cole-trapnell-lab.github.io/monocle3/docs/differential/
https://mp.weixin.qq.com/s/7sYTrHlhnHj5490RyrdBug

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spark入门-helloword

我们学习编程语言的时候&#xff0c;第一个程序就是打印一下 “hello world” &#xff0c;对于大数据领域的第一个任务则是wordcount。那我们就开始我们的第一个spark任务吧&#xff01; 下载spark 官方下载地址&#xff1a;Apache Download Mirrors 下载完毕以后&#xff0c…

雷达系统设计学习:自制6GHz FMCW Radar

国外大神自制6GHZ FMCW Radar开源项目: https://github.com/Ttl/fmcw3 引言 之前我做过一个简单的调频连续波&#xff08;FMCW&#xff09;雷达&#xff0c;能够探测到100米范围内人体大小的物体。虽然它确实能用&#xff0c;但由于预算有限&#xff0c;还有很大的改进空间。 …

系统选择菜单(ubuntu grub)介绍

好的&#xff0c;我们来详细解释一下什么是Ubuntu的GRUB菜单。 简单来说&#xff0c;GRUB菜单是您电脑启动时看到的第一个交互界面&#xff0c;它就像一个“系统选择”菜单&#xff0c;让您决定接下来要启动哪个操作系统或进入哪种模式。详细解释 1. GRUB是什么&#xff1f; GR…

方案C,version2

实现一个简单的Helloworld网页,并通过GitHub Actions自动构建并推送到公开仓库的gh-pages分支。同时,使用PAT进行认证,确保源码在私有仓库中,构建后的静态文件在公开仓库中。 重新设计deploy.yml内容如下(针对纯静态文件,无需构建过程): 步骤: 检出私有仓库源码。 由于…

R 语言科研绘图 --- 其他绘图-汇总1

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

webpack 原理及使用

【点赞收藏加关注,前端技术不迷路~】 一、webpack基础 1.核心概念 1)entry:定义入口,webpack构建的第一步 module.exports ={entry:./src/xxx.js } 2)output:出口(输出) 3)loader:模块加载器,用户将模块的原内容按照需求加载成新内容 比如文本加载器raw-loade…

「日拱一码」039 机器学习-训练时间VS精确度

目录 时间-精度权衡曲线&#xff08;不同模型复杂度&#xff09; 训练与验证损失对比 帕累托前沿分析&#xff08;3D&#xff09; 在机器学习实践中&#xff0c;理解模型收敛所需时间及其与精度的关系至关重要。下面介绍如何分析模型收敛时间与精度之间的权衡&#xff0c;并…

面试刷题平台项目总结

项目简介&#xff1a; 面试刷题平台是一款基于 Spring Boot Redis MySQL Elasticsearch 的 面试刷题平台&#xff0c;运用 Druid HotKey Sa-Token Sentinel 提高了系统的性能和安全性。 第一阶段&#xff0c;开发基础的刷题平台&#xff0c;带大家熟悉项目开发流程&#xff…

负载均衡、算法/策略

负载均衡一、负载均衡层级对比特性四层负载均衡 (L4)七层负载均衡 (L7)工作层级传输层 (TCP/UDP)应用层 (HTTP/HTTPS等)决策依据源/目标IP端口URL路径、Header、Cookie、内容等转发方式IP地址/端口替换重建连接并深度解析报文性能更高吞吐量&#xff0c;更低延迟需内容解析&…

StackingClassifier参数详解与示例

StackingClassifier参数详解与示例 StackingClassifier是一种集成学习方法&#xff0c;通过组合多个基分类器的预测结果作为元分类器的输入特征&#xff0c;从而提高整体模型性能。以下是关键参数的详细说明和示例&#xff1a; 1. classifiers&#xff08;基分类器&#xff09;…

嵌入式中间件-uorb解析

uORB系统详细解析 1. 系统概述 1.1 设计理念 uORB&#xff08;Micro Object Request Broker&#xff09;是一个专为嵌入式实时系统设计的发布-订阅式进程间通信框架。该系统借鉴了ROS中topic的概念&#xff0c;为无人机飞控系统提供了高效、可靠的数据传输机制。 1.2 核心特征 …

HTTP.Client 库对比与选择

HTTP.Client 库对比与选择在 Python 中&#xff0c;除了标准库 http.client&#xff0c;还有许多功能更强大、使用更便捷的 HTTP 库。以下是一些常用的库及其特点&#xff1a;1. Requests&#xff08;最流行&#xff09;特点&#xff1a;高层 API&#xff0c;简单易用&#xff…

RabbitMQ面试精讲 Day 5:Virtual Host与权限控制

【RabbitMQ面试精讲 Day 5】Virtual Host与权限控制 开篇 欢迎来到"RabbitMQ面试精讲"系列的第5天&#xff01;今天我们将深入探讨RabbitMQ中Virtual Host与权限控制的核心机制&#xff0c;这是构建安全、隔离的消息系统必须掌握的重要知识。在面试中&#xff0c;面…

【前端实战】纯HTML+CSS+JS实现蜡笔小新无尽冒险:从零打造网页版超级玛丽

摘要&#xff1a;本文将详细介绍一款完全由HTMLCSSJS实现的网页版横版闯关游戏——"蜡笔小新无尽冒险"。游戏采用纯前端技术实现&#xff0c;无需任何外部依赖&#xff0c;完美复刻了经典超级玛丽的核心玩法&#xff0c;并创新性地融入了蜡笔小新角色元素。通过本文&…

[工具类] 网络请求HttpUtils

引言在现代应用程序开发中&#xff0c;网络请求是必不可少的功能之一。无论是访问第三方API、微服务之间的通信&#xff0c;还是请求远程数据&#xff0c;都需要通过HTTP协议实现。在Java中&#xff0c;java.net.HttpURLConnection、Apache的HttpClient库以及OkHttp等库提供了丰…

基于Spring Boot的装饰工程管理系统(源码+论文)

一、 开发环境与技术 本章节对开发装饰工程管理系统------项目立项子系统需要搭建的开发环境&#xff0c;以及装饰工程管理系统------项目立项子系统开发中使用的编程技术等进行阐述。 1 开发环境 工具/环境描述操作系统Windows 10/11 或 Linux&#xff08;如 Ubuntu&#x…

【WebGPU学习杂记】数学基础拾遗(2)变换矩阵中的齐次坐标推导与几何理解

今天打算开始 3D 数学基础的复习&#xff0c;本文假设你了解以下概念&#xff1a;一次多项式、矩阵、向量&#xff0c;基于以上拓展的概念 归一化、2&#xff5e;3阶矩阵的几何意义。几何意义结论 齐次坐标是对三维的人工的特定的升维&#xff0c;它是一个工具而已。图形学中常…

JS前端压缩算法——WWDHCAPOF-算法导论论文——东方仙盟算法

代码function customCompressString(input) {// 第一步&#xff1a;将字符串转换为ANSI码数组并乘以位置序号let resultArray Array.from(input).map((char, index) > {const ansiCode char.charCodeAt(0);return ansiCode * (index 东方仙盟); // 位置序号从1开始});// …

linux命令less的实际应用

less 是 Linux/Unix 中交互式文件查看神器&#xff0c;相比 more 和 cat&#xff0c;它支持自由导航、搜索、高亮等强大功能&#xff0c;尤其适合处理大文件或实时日志。以下是深度应用指南&#xff1a;​一、核心优势​less large_file.log # 秒开GB级文件&#xff08…

DAY31 整数矩阵及其运算

DAY31 整数矩阵及其运算 本次代码通过IntMatrix类封装了二维整数矩阵的核心操作&#xff0c;思路如下&#xff1a;数据封装→基础操作&#xff08;修改和获取元素、获取维度&#xff0c;toString返回字符串表示&#xff0c;getData返回内部数组引用&#xff09;→矩阵运算&…