Monocle3 基本流程复现

参考:单细胞之轨迹分析-3:monocle3 - 简书 (jianshu.com),教程中的方法是使用new_cell_data_set()函数创建了一个新的 cds对象,这个函数常用于从头开始创建一个新的rds对象。而本方法使是用as.cell_data_set()函数,直接读入经过Seurat上游处理(SCTransform、RunPCA、RunUMAP、FindNeighbors、FindClusters)后的obj创建rds对象。

  • new_cell_data_set ( ):从头创建CDS对象并预处理数据,创建了一个全新的对象,这样很繁琐,还要再做一次降维聚类分群。因为我们导入了seurat对象里的表达矩阵,meta信息和genelist,所以这个cds是没有进行降维聚类等操作,导致后面的拟时序分析是做不了的,官网上说拟时序分析是基于低维度,所以必须对cds进行降维聚类分群。
  • as.cell_data_set ( ): 直接读入经过Seurat上游处理(SCTransform、RunPCA、RunUMAP、FindNeighbors、FindClusters)后的obj创建rds对象,不用再进行预处理(preprocess_cds)和降维(reduce_dimension)步骤。

数据:PBMC 3K:Seurat - Guided Clustering Tutorial • Seurat (satijalab.org)

# 安装monocle3
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install(version = "3.10")
BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats',
                       'limma', 'S4Vectors', 'SingleCellExperiment',
                       'SummarizedExperiment', 'batchelor', 'Matrix.utils'))
install.packages("devtools")
devtools::install_github('cole-trapnell-lab/leidenbase')
devtools::install_github('cole-trapnell-lab/monocle3')
-------------------------------------------------------------------------------

library(Seurat)
library(monocle3)
library(tidyverse)
library(patchwork)
library(ggplot2)
library(dplyr)
library(SeuratWrappers)

dir.create("C:/Users/Bolin/Desktop/Monocle3")
setwd("C:/Users/Bolin/Desktop/Monocle3")

pbmc.data <- Read10X("C:/Users/Bolin/Desktop/hg19")
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
obj <- pbmc %>%
  SCTransform(verbose = FALSE, vars.to.regress = 'nCount_RNA') %>% 
  RunPCA(verbose = FALSE, npcs = 20) %>% 
  RunUMAP(verbose = FALSE,dims = 1:6) %>% 
  FindNeighbors(verbose = FALSE) %>% 
  FindClusters(verbose = FALSE)

# new_cell_data_set
-------------------------------------------------------------------------------
data <- GetAssayData(obj, assay = 'RNA', slot = 'counts') # data <- obj@assays$RNA@counts
cell_metadata <- obj@meta.data
gene_annotation <- data.frame(gene_short_name = rownames(data))
rownames(gene_annotation) <- rownames(data)
cds <- new_cell_data_set(data,
                          cell_metadata = cell_metadata,
                          gene_metadata = gene_annotation)
# 预处理:标准化和PCA降维                          
cds <- preprocess_cds(cds, num_dim = 50) # preprocess_cds函数相当于seurat中NormalizeData + ScaleData + RunPCA
plot_pc_variance_explained(cds)

# 可视化
cds <- reduce_dimension(cds,preprocess_method = "PCA") #preprocess_method默认是PCA
plot_cells(cds)                                    
-------------------------------------------------------------------------------

# as.cell_data_set

cds <- as.cell_data_set(obj) # SeuratWrappers这个包提供这个函数,需要从git下载
# 之前已经使用 Seurat 对数据进行了UMAP降维,并使用as.cell_data_set()函数将数据转换为cds 对象。cluster_cells() 函数基于 UMAP 降维结果,在 cds 对象中执行聚类操作
cds <- cluster_cells(cds, reduction_method = "UMAP")
cds <- learn_graph(cds, use_partition = TRUE) #轨迹学习Learn the trajectory graph

p1 <- plot_cells(cds, reduction_method="UMAP", color_cells_by="seurat_clusters") + ggtitle('cds.umap')


-----------------------------------------------------------------------------------
# 一、手动选择root
    cds <- order_cells(cds)

# 二、定义root
    ## 定义函数 get_earliest_principal_node :根据指定的细胞类型(celltype)名称,找到Seurat对象中对应细胞的主成分图(UMAP)上的最近顶点
    get_earliest_principal_node <- function(cds, time_bin=c('DEGC')){
      # 首先找到指定celltype的 ID
      cell_ids <- which(colData(cds)[, "celltype"] == time_bin)
      # 获取主成分图(UMAP)中细胞投影到最近分支结点的信息
      closest_vertex <- cds@principal_graph_aux[["UMAP"]]$pr_graph_cell_proj_closest_vertex
      closest_vertex <- as.matrix(closest_vertex[colnames(cds), ])
      # 找到在指定的celltype出现次数最多的分支节点
      root_pr_nodes <- igraph::V(principal_graph(cds)[["UMAP"]])$name[as.numeric(names(which.max(table(closest_vertex[cell_ids,]))))] # igraph::V()函数获取主成分图中的所有顶点信息
      root_pr_nodes
    }

nodes_vec <- c(get_earliest_principal_node(cds,"Endothelial cell"),get_earliest_principal_node(cds,"Muscle cell"))
cds = order_cells(cds, root_pr_nodes=nodes_vec,reduction_method = "UMAP")

-----------------------------------------------------------------------------------

p2 = plot_cells(
                cds = cds,
                color_cells_by = "pseudotime",
                show_trajectory_graph = TRUE,
                group_cells_by = 'cluster',cell_size = 1,label_leaves=FALSE) + scale_color_viridis(option = "D")

ggsave(plot=p2,file=paste0('monocle3.pdf'),width=5,height=4)

p2 = plot_cells(cds,
                color_cells_by = "celltype",
                label_groups_by_cluster=FALSE,
                label_leaves=FALSE,
                label_branch_points=FALSE,cell_size = 1, label_cell_groups=FALSE) + ggplot2::scale_color_manual(values=cor)

ggsave(plot=p2,file=paste0('Celltype.pdf'),width=5.5,height=4)



# 差异表达分析:寻找拟时轨迹差异基因
## graph_test分析最重要的结果是莫兰指数(morans_I),其值在-1至1之间,0代表此基因没有
## 空间共表达效应:1代表此基因在空间距离相近的细胞中表达值高度相似。
Track_genes <- graph_test(cds, neighbor_graph="principal_graph", cores=1)
Track_genes <- Track_genes[,c(2,3,4,5,6)] %>% filter(q_value < 1e-3)
write.csv(Track_genes, "Trajectory_genes.csv", row.names = F)


## top10 基因表达趋势图
gene_short_name = rownames(cds)
Track_genes_sig <- Track_genes %>% top_n(n=10, morans_I) %>% pull(gene_short_name) %>% as.character()
p3 <- plot_genes_in_pseudotime(cds[Track_genes_sig,], color_cells_by="seurat_clusters",min_expr=0.5, ncol = 2)
ggsave("Genes_Jitterplot.pdf", plot = p3, width = 8, height = 6)


## FeaturePlot图
p4 <- plot_cells(cds, genes=Track_genes_sig, show_trajectory_graph=T,label_cell_groups=T,label_leaves=F)
p4$facet$params$ncol <- 5
ggsave("Genes_Featureplot.pdf", plot = p4, width = 10, height = 8)


## 寻找共表达基因模块热图
Track_genes <- read.csv("Trajectory_genes.csv")
genelist <- pull(Track_genes, gene_short_name) %>% as.character()
gene_module <- find_gene_modules(cds[genelist,], resolution=1e-1, cores = 1)
write.csv(gene_module, "Genes_Module.csv", row.names = F)
cell_group <- tibble::tibble(cell=row.names(colData(cds)), cell_group=colData(cds)$seurat_clusters)
agg_mat <- aggregate_gene_expression(cds, gene_module, cell_group)
row.names(agg_mat) <- stringr::str_c("Module ", row.names(agg_mat))
p5 <- pheatmap::pheatmap(agg_mat, scale="column", clustering_method="ward.D2")
ggsave("Genes_Module.pdf", plot = p5, width = 10, height = 10)


## 提取拟时分析结果返回seurat对象
pseudotime <- pseudotime(cds, reduction_method = 'UMAP')
pseudotime <- pseudotime[rownames(obj@meta.data)]
obj$pseudotime <- pseudotime
p6 = FeaturePlot(obj, reduction = "umap", features = "pseudotime")

ggsave("Pseudotime_Seurat.pdf", plot = p6, width = 8, height = 6)
saveRDS(pbmc, file = "sco_pseudotime.rds")

pdf("Combined_Plots.pdf")
   print(p5)
   print(p1)
   print(p2)
   print(p3)
   print(p4)
   print(p6)
dev.off()

 

1.寻找拟时轨迹差异基因:

拟时轨迹是指在发育过程中细胞状态随时间(或类似指标)的变化。通过寻找拟时轨迹差异基因,我们可以找到在不同发育阶段或状态中表达水平有显著变化的基因。这些差异基因可能在细胞发育和分化过程中扮演重要的角色,例如调控特定发育途径或细胞类型的标志物。拟时轨迹差异基因的鉴定有助于理解细胞发育过程中的基因调控和细胞状态转换。

2.空间共表达效应:

空间共表达效应是指在空间中距离相近的细胞之间基因表达的相似性。在组织或器官中,相邻的细胞可能具有类似的功能和特性,因此它们的基因表达也可能有相似之处。通过研究空间共表达效应,我们可以揭示细胞在空间上的组织结构和相互作用模式。这有助于了解细胞在组织中的空间分布、细胞-细胞相互作用以及细胞特异性的功能。

通过寻找拟时轨迹差异基因和研究空间共表达效应,我们可以深入了解单细胞数据中的动态细胞状态和空间结构,为细胞发育和组织功能的研究提供重要线索。

要安装monocle3,您可以按照以下步骤进行操作: 1. 首先,您需要安装monocle3所需的依赖项。根据您的系统,您可以使用不同的命令来安装这些依赖项。例如,在CentOS 8.5系统上,您可以使用以下命令安装依赖库: ``` yum install gdal* ldconfig yum install udunits2-devel yum install proj yum install sql* yum install geos* ``` 2. 安装monocle3的依赖包。您可以使用BiocManager包来安装这些依赖项。请运行以下命令: ``` install.packages("BiocManager") BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats', 'limma', 'S4Vectors', 'SingleCellExperiment', 'SummarizedExperiment', 'batchelor', 'Matrix.utils')) ``` 3. 安装leidenbase和monocle3包。您可以使用devtools包来安装这些包。请运行以下命令: ``` install.packages("devtools") devtools::install_github('cole-trapnell-lab/leidenbase') devtools::install_github("cole-trapnell-lab/monocle3") ``` 4. 加载monocle3包并检查版本。请运行以下命令: ``` library(monocle3) packageVersion('monocle3') ``` 这样,您就可以成功安装并加载monocle3包了。您可以使用monocle3包中的函数和工具进行单细胞数据分析。 #### 引用[.reference_title] - *1* *3* [使用devtools安装monocle3](https://blog.csdn.net/weixin_45372694/article/details/128314463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [monocle3包的安装](https://blog.csdn.net/qq_27390023/article/details/121717460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值