# Monocle 3 (Single-cell RNA-seq) 백과사전
Monocle 3은 단일세포 RNA 시퀀싱(scRNA-seq) 데이터에서 세포군 간의 이행 경로(trajectory)를 추정하고, 세포의 발현 패턴 변화를 시간 또는 분화 경로에 따라 해석하는 데 사용되는 R 패키지이다. Monocle 3은 차원 축소, 그래프 학습, 순서 지정(pseudotime) 및 차등 발현 분석을 한 플랫폼에서 수행할 수 있도록 설계되었다. 연구자들은 이를 통해 세포 분화의 분기점(branch points)과 다양한 세포 상태 간의 연결 관계를 해석할 수 있다.
---
## 개요 및 주요 특징
- Trajectory Inference: 세포들이 시간 축이나 분화 경로상에서 어떤 순서로 분화하는지 추정한다.
- Pseudotime: 실제 시간과 무관하게 세포의 분화 단계에 따른 상대적 위치를 수치로 표현하는 척도.
- Graph-based 학습: 학습된 그래프(neighbor graph) 위에 분화 경로를 구성하고 분기점을 식별한다.
- 차원 축소 및 시각화: UMAP, PCA 등의 방법으로 시각화하고, 색상으로 pseudotime이나 클러스터를 표현한다.
- 배치 보정 및 데이터 정합성: align_cds를 통해 서로 다른 샘플 또는 배치 간의 정합성을 높일 수 있다.
- 모듈 기반 차등 발현: 그래프-기반 테스트(graph_test)와 모듈(found gene_modules) 기능으로 경로상 중요한 유전자 모듈을 탐색한다.
- 데이터 구조: cell_data_set(CDS) 객체를 중심으로 데이터 관리, 메타데이터, 유전자 메타데이터를 함께 다룬다.
---
## 역사적 배경
- Monocle는 2014년경부터 단일세포 전사체 데이터를 이용한 분화 경로 분석 도구로 개발되어 왔으며, Monocle 2에서의 알고리즘과 인터페이스를 기반으로 Monocle 3이 발전했다.
- Monocle 3은 그래프 기반의 차원 축소, 분기점 인식, 루트 셀(root cell) 선정의 유연성을 강화하고 대규모 데이터에 대한 확장성을 개선하였다.
- Monocle 3의 도입 이후, 동일 샘플 내외의 배치 차이를 보정하기 위한 align_cds 기능이 주류 워크플로우에 통합되었다.
---
## 핵심 용어 해설
- Monocle 3: 단일세포 RNA-seq 데이터를 분석하는 R 패키지로, trajectory inference와 pseudotime 분석에 특화되어 있다.
- cell_data_set (CDS): Monocle 3의 기본 데이터 구조로, counts 행렬, Cell metadata, Gene metadata를 포함하는 S4 객체이다.
- pseudotime: 분화 경로 상의 순서를 수치화한 상대적 시간 척도.
- trajectory: 세포가 가질 수 있는 분화 경로의 그래프적 구조를 의미.
- root_cells: 분화 경로의 시작점으로 간주되는 세포들. pseudotime의 기준점 설정에 사용된다.
- learn_graph: CDS에 내재된 그래프를 학습하여 분화 경로의 구조를 구축하는 과정.
- reduce_dimension: 차원 축소를 통해 고차원 데이터를 2D/3D 공간으로 표현하는 단계(예: UMAP, PCA).
- align_cds: 서로 다른 샘플/배치를 정렬하고 정합시키는 기능.
- graph_test: 그래프 구조와 유전자 발현의 연관성을 검정하여 경로와 관련된 유전자를 찾는 분석.
- find_gene_modules: 유전자 발현 패턴에 따른 모듈(군)을 식별하는 기능.
- plot_cells, plot_genes_in_pseudotime: 시각화를 위한 주요 함수들.
---
## 소프트웨어 구성 및 아키텍처
- 데이터 구조
- cell_data_set(CDS): counts 매트릭스, colData(세포 메타데이터), rowData(유전자 메타데이터)를 한 객체로 관리.
- assays, colData, rowData 등의 슬롯으로 구성되어 데이터와 메타데이터를 함께 저장한다.
- 주요 기능 모듈
- 데이터 준비 및 전처리: new_cell_data_set, preprocess_cds
- 차원 축소: reduce_dimension (주로 "UMAP" 사용)
- 클러스터링: cluster_cells
- 그래프 학습 및 순서 지정: learn_graph, order_cells
- 시각화: plot_cells, plot_genes_in_pseudotime
- 배치 정합: align_cds
- 차등 발현 및 모듈 분석: graph_test, find_gene_modules, plot_genes_in_pseudotime
- 워크플로우의 흐름
1) CDS 생성: counts, cell_metadata, gene_metadata 준비
2) 전처리: normalize, feature selection, 차원 축소 준비
3) 차원 축소 및 클러스터링
4) 그래프 학습 및 순서 지정
5) 시각화 및 해석
6) 배치 보정 및 재정렬(필요 시)
7) 차등 발현 및 유전자 모듈 분석
---
## 워크플로우(일반적인 분석 파이프라인)
- 데이터 준비 및 CDS 생성
```
# 설치 예: Monocle 3
# 주의: 최신 R 및 의존 패키지가 필요
install.packages("devtools")
devtools::install_github("cole-trapnell-lab/monocle3")
library(monocle3)
# 예시 데이터 로딩(실제 데이터에 맞춰 수정)
counts <- readRDS("counts_matrix.rds") # 유전자 x 세포 행렬
cell_metadata <- read.csv("cell_metadata.csv", row.names = 1)
gene_metadata <- read.csv("gene_metadata.csv", row.names = 1)
cds <- new_cell_data_set(counts,
cell_metadata = cell_metadata,
gene_metadata = gene_metadata)
```
- 전처리 및 차원 축소
```
cds <- preprocess_cds(cds, num_dim = 50) # 차원 축소 전 특징 선택 및 정규화
cds <- reduce_dimension(cds, reduction_method = "UMAP") # 또는 "PCA" 후 "UMAP"
```
- 클러스터링, 그래프 학습, 순서 지정
```
cds <- cluster_cells(cds) # 클러스터링
cds <- learn_graph(cds) # 분화 경로의 그래프 학습
cds <- order_cells(cds) # pseudotime 순서 지정
```
- 루트 셀 지정 및 시각화
```
# 루트 셀 지정 예시(필요 시)
# root_cells <- colnames(subset(cell_metadata_df, cluster == "0"))
# cds <- order_cells(cds, root_cells = root_cells)
plot_cells(cds, color_cells_by = "pseudotime")
```
- 배치 정합(선택적)
```
cds <- align_cds(cds, alignment_group = "batch") # 샘플/배치 간 정합
```
- 차등 발현 및 유전자 모듈 분석
```
# 그래프 기반 유전자 테스트
graph_test_res <- graph_test(cds, neighbor_graph = "learned_graph", cores = 4)
# 유전자 모듈 식별
gene_modules <- find_gene_modules(cds)
# pseudotime에 따른 유전자 시각화 예시
# 상위 유전자 찾기 및 시각화
top_genes <- head(graph_test_res[order(graph_test_res$p_value), ], 50)
plot_genes_in_pseudotime(cds, genes = top_genes$gene_id)
```
- 시각화 예시
```
# 전체 경로 및 분기점 시각화
plot_cells(cds, color_cells_by = "cluster")
plot_cells(cds, color_cells_by = "pseudotime")
```
---
## 실무 고려사항
- 배치 효과 및 데이터 통합
- align_cds를 이용해 서로 다른 배치의 세포들을 동일한 분화 축으로 정렬할 수 있다.
- 배치 효과가 큰 데이터의 경우, 사전 정합 실험 설계와 교차 검증이 필요하다.
- 루트 셀(시작점) 선정
- 분화의 시작점이 명확한 경우 root_cells를 지정하면 pseudotime 해석이 직관적이다.
- 명확한 시작점이 없으면 기본 설정으로 pseudotime이 산출되며, 해석에 주의가 필요하다.
- 다중 비교 및 통계적 유의성
- graph_test 및 차등 발현 분석에서 p-value와 q-value를 적절히 보정하고 다중 비교 문제를 고려한다.
- 샘플 크기 및 분포
- 분화 경로의 다양성은 샘플 수와 세포 수에 따라 달라질 수 있다.
- 희귀한 상태의 세포를 충분히 포착하기 위해서는 샘플링 설계가 중요하다.
- 모듈 해석
- find_gene_modules로 얻은 모듈을 생물학적 해석에 연결하기 위해서는 GO/ KEGG 경로 분석 등 보조 분석이 필요하다.
- 시각화 해석의 주의점
- 그래프 기반 시각화는 데이터의 구조를 반영하므로, 클러스터 경계가 애매한 경우 해석에 주의가 필요하다.
---
## 고급 주제
- 배치 보정의 한계
- align_cds는 배치를 보정하는 강력한 도구이지만, 배치 간 생물학적 차이가 큰 경우에는 추가적인 보정 전략이 필요할 수 있다.
- 다중 샘플 및 시퀀싱 플랫폼 간 비교
- 서로 다른 플랫폼에서 얻은 데이터는 기술적 차이로 인해 차이가 생길 수 있어, 비교 전처리 및 정합 방법의 선택이 중요하다.
- 분기점 해석
- 분기점(branch points)은 경로의 갈림길을 나타낸다. 각 분기점에서의 유전자 발현 변화 패턴을 분석하여 분지의 생물학적 의미를 탐구한다.
- 모듈과 기능적 해석의 연결
- 특정 모듈의 발현 패턴이 어떤 분화 방향성에 기여하는지 확인하기 위해 기능적 주석(annotate) 및 경로 분석이 필요하다.
---
## 한계와 참고사항
- Monocle 3은 강력한 도구이지만, 데이터의 품질(노이즈, 드문 세포형의 존재, 배치 차이)과 해석의 복잡성에 따라 분석 결과가 달라질 수 있다.
- 사전에 적절한 품질 관리(QC)와 필터링이 필요하며, 필요시 보조 도구(Seurat, scran 등)와의 결합 사용이 일반적이다.
- 최신 버전의 Monocle 3 문서와 예제 코드를 확인하는 것이 좋다. 커뮤니티의 이슈와 업데이트를 통해 함수 시그니처나 추천 워크플로우가 바뀔 수 있다.
---
## 예제 코드 스니펫(간단 풀 파이프라인)
- 전체 파이프라인의 간략한 예시를 제시한다. 데이터 경로와 객체 이름은 실제 데이터에 맞게 조정한다.
```
# 설치 및 로딩
install.packages("devtools")
devtools::install_github("cole-trapnell-lab/monocle3")
library(monocle3)
# CDS 생성
counts <- readRDS("counts_matrix.rds") # 유전자 x 세포
cell_metadata <- read.csv("cell_metadata.csv", row.names = 1)
gene_metadata <- read.csv("gene_metadata.csv", row.names = 1)
cds <- new_cell_data_set(counts,
cell_metadata = cell_metadata,
gene_metadata = gene_metadata)
# 전처리 및 차원 축소
cds <- preprocess_cds(cds, num_dim = 50)
cds <- reduce_dimension(cds, reduction_method = "UMAP")
# 클러스터링 및 그래프 학습
cds <- cluster_cells(cds)
cds <- learn_graph(cds)
# 순서 지정 및 시각화
cds <- order_cells(cds)
plot_cells(cds, color_cells_by = "pseudotime")
# 배치 정합(선택적)
cds <- align_cds(cds, alignment_group = "batch")
plot_cells(cds, color_cells_by = "batch")
# 차등 발현 및 모듈 분석
graph_test_res <- graph_test(cds, neighbor_graph = "learned_graph", cores = 4)
gene_modules <- find_gene_modules(cds)
top_genes <- head(graph_test_res[order(graph_test_res$p_value), ], 50)
plot_genes_in_pseudotime(cds, genes = top_genes$gene_id)
```
---
## 관련 문서 제안
- Monocle 3과 Monocle 2의 비교
- 배치 정합(batch alignment) 및 데이터 통합
---
최근 연구 및 참고문헌에 기반한 학술적 맥락과 더불어, Monocle 3의 워크플로우는 실험 설계, 데이터 품질 관리, 그리고 해석의 명확성을 함께 고려해야 한다. 필요에 따라 더 구체적인 예제 데이터셋이나 실제 분석 사례를 추가로 다루는 보충 문서를 작성할 수 있다.
---
관련 문서: [[Monocle 3과 Monocle 2의 비교]], [[pseudotime (scRNA)]]