10x Visium 공간 전사체 데이터 분석과 시각화

서론

이 글에서는 공간 해상도를 가진 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"))

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

투명도 조정 시각화

태그: Seurat 10x Visium 공간 전사체 sctransform 단일 세포 RNA 시퀀싱

7월 3일 17:40에 게시됨