서론
이 글에서는 공간 해상도를 가진 RNA 시퀀싱 데이터를 Seurat를 활용해 분석하는 방법을 다룹니다. 핵심은 공간 정보와 분자 데이터를 결합하는 데 있으며, 여기에는 공간 데이터 분석에서 흔히 수행되는 다음 작업들이 포함됩니다:
- 데이터 정규화
- 차원 축소 및 데이터 클러스터링
- 공간 변이 특성 발견
- 단일 세포 RNA 시퀀싱 데이터와의 통합
- 여러 조직 절편 처리
먼저 Seurat와 튜토리얼에 필요한 기타 패키지를 로드하겠습니다.
library(Seurat)
library(SeuratData)
library(ggplot2)
library(patchwork)
library(dplyr)
데이터셋
이 글에서는 Visium v1 화학법으로 생성된 최신 마우스 뇌 시상면 절편 데이터셋을 소개합니다. 이 데이터셋은 연속적인 두 개의 전뇌 절편과 (쌍을 이룬) 두 개의 후뇌 절편으로 구성됩니다.
Load10X_Spatial() 함수를 사용해 데이터를 Seurat로 가져올 수 있습니다. 이 함수는 SpaceRanger 파이프라인의 출력 결과를 읽어 점별 발현 데이터와 해당 조직 절편 이미지를 포함하는 Seurat 객체를 생성합니다.
또한 아래 예시처럼 SeuratData 패키지를 통해 데이터를 쉽게 내려받을 수 있습니다. 데이터셋을 설치한 후 ?stxBrain 명령어를 입력하면 더 자세한 정보를 확인할 수 있습니다.
InstallData("stxBrain")
brain <- LoadData("stxBrain", type = "anterior1")
데이터 전처리
유전자 발현 데이터의 초기 처리는 일반적인 단일 세포 RNA 시퀀싱 실험과 유사합니다. 먼저 데이터 포인트 간 시퀀싱 깊이 차이를 보정하기 위해 정규화 과정이 필요합니다. 공간 데이터셋에서는 분자 카운트나 점 간 변동이 매우 클 수 있으며, 특히 조직 내 세포 밀도가 다를 때 두드러집니다. 여기서 상당한 이질성이 관찰되므로 효과적인 데이터 정규화가 필요합니다.
plot1 <- VlnPlot(brain, features = "nCount_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(brain, features = "nCount_Spatial") + theme(legend.position = "right")
wrap_plots(plot1, plot2)
이 그래프들은 분자 카운트의 변동이 단순한 기술적 문제가 아니라 조직 구조와 관련이 있음을 보여줍니다. 예를 들어, 뇌 피질의 백질처럼 뉴런이 적은 영역은 일반적으로 분자 카운트가 낮게 나타납니다. 따라서 LogNormalize()처럼 각 데이터 포인트가 정규화 후 동일한 "총합"을 가지도록 요구하는 일반적인 방법은 문제를 일으킬 수 있습니다.
대신 sctransform 방법(Hafemeister & Satija, 2019, Genome Biology)을 사용할 것을 권장합니다. 이 방법은 유전자 발현에 대한 정규화된 음이항 모델을 구축하여 기술적 오차를 제거하면서 생물학적 변동은 보존합니다. sctransform은 데이터를 정규화하고 변동성이 큰 특성을 식별한 후 이 정보를 SCT 검정 항목에 저장합니다.
brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE)
유전자 발현 시각화
Seurat의 SpatialFeaturePlot() 함수는 FeaturePlot()을 확장하여 조직학적 이미지 위에 분자 데이터를 중첩할 수 있게 해줍니다. 예를 들어, 이 마우스 뇌 데이터셋에서 Hpca 유전자는 해마 영역의 강력한 지표이고, Ttr 유전자는 맥락총의 지표입니다.
SpatialFeaturePlot(brain, features = c("Hpca", "Ttr"))
library(ggplot2)
plot <- SpatialFeaturePlot(brain, features = c("Ttr")) + theme(legend.text = element_text(size = 0),
legend.title = element_text(size = 20), legend.key.size = unit(1, "cm"))
jpeg(filename = "../output/images/spatial_vignette_ttr.jpg", height = 700, width = 1200, quality = 50)
print(plot)
dev.off()
## agg_png
## 2
Seurat의 기본 설정은 분자 데이터 시각화에 중점을 둡니다. 그러나 일부 파라미터를 조정하여 점의 크기(및 투명도)를 변경함으로써 조직학적 이미지의 가시성을 높일 수 있습니다:
pt.size.factor파라미터는 점의 크기를 조정하며 기본값은 1.6입니다.alpha파라미터는 점의 투명도 범위를 설정하며 기본값은 c(1, 1)로 완전 불투명에서 완전 투명까지입니다.
alpha를 c(0.1, 1)로 설정하면 발현량이 낮은 점의 투명도를 낮춰 시각화 효과를 더욱 두드러지게 할 수 있습니다.
p1 <- SpatialFeaturePlot(brain, features = "Ttr", pt.size.factor = 1)
p2 <- SpatialFeaturePlot(brain, features = "Ttr", alpha = c(0.1, 1))
p1 + p2