一文掌握最新版本Monocle3單細胞軌跡(擬時序)分析

許多大佬的軟件想要構建一個大而美的生態,從 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;→矩陣運算&…