Single cell RNA analysis _ #3 data integration 및 1차 분석
1. QC filtering
죽은 세포 혹은 데이터의 퀄리티가 좋지 않은 결과 값을 제외하고 하고자 진행
ht01 <- subset(ht01, subset = nFeature_RNA > 6000 & nFeature_RNA < 20000 & percent.mt < 20)
ht02 <- subset(ht02, subset = nFeature_RNA > 6000 & nFeature_RNA < 20000 & percent.mt < 25)
2. 데이터의 전처리
각 데이터는 count 값으로 구성되어있고, 이 count는 normalization이 되지 않는 raw data임. 이를 보정하여, 세포 간의 비교가 용이하도록 발현량의 차이를 보정하는 작업이 필요함.
ht01 <- NormalizeData(ht01)
ht02 <- NormalizeData(ht02)
single cell의 가장 큰 특징은 개별의 발현을 분석하여 cluster를 구분할 수 있는 것인데, 아래의 함수를 통해서 특정 feature (특징?)이 나타나는 것을 분석하는 작업으로 이해하면 됨.
ht01 <- FindVariableFeatures(ht01)
ht02 <- FindVariableFeatures(ht02)
3. 데이터 integration을 위한 개체 묶기
본 분석의 가장 큰 목적은 각 조건 별로 변화하는 클러스터를 분석하고 이해하는 것에 목적이 있기에 아래와 같이 묶어주는 작업을 먼저 한 이후에, 분석을 할 예정임.
seurat.list <- list(ht01, ht02)
4. 데이터 통합을 위한 anchor 찾기
ht01과 ht02를 분석하기 위해서 서로 간의 유사한 패턴이 나타나는 특징 및 이를 바탕으로 한 data integration을 진행하고자 함.
여기서 변화할 수 있는 것은 dims가 되는데 이는 차원 축소 값이라고 생각하면 됨. 즉 30개의 주성분 값을 이용하여 데이터를 통합하겠다는 의미임.
일반적을 dims는 20-50의 값을 사용하고, 최적의 값을 찾기 위해서는 여러 번의 분석을 수행해야 함.
dims는 너무 높게 설정하면 메모리를 많이 쓰기 때문에, 시간이 더 오래 걸릴 수 있고 꼭 높은 값을 사용한다고 해서 좋은 데이터가 도출되는 것은 아님.
seurat.anchors <- FindIntegrationAnchors(object.list = seurat.list, dims = 1:30)
seurat.integrated <- IntegrateData(anchorset = seurat.anchors, dims = 1:30)
5. PCA 차원 축소 수행
통합된 데이터를 이용하여 차원 축소를 진행함.
npcs = 차원 축소를 위해 사용하는 값을 의미함.
seurat.integrated <- ScaleData(seurat.integrated)
seurat.integrated <- RunPCA(seurat.integrated, npcs = 15)
6. 클러스터링 시각화
통합된 데이터를 이용하여, 서로 간의 유사성을 분석하고 이를 바탕으로 한 plot안에 표현하기 위한 방법임.
변환시킬 수 있는 데이터는 dims와 resolution이 있음.
dims = 앞서 PCA analysis를 통해 수행한 (분리한) 주성분의 값까지 만이 사용 가능함.
resolution = 클러스터의 크기와 개수에 직접적으로 영향을 미치는 함수로서, 낮은 resolution을 설정할 경우 클러스터의 개수는 더 적게, 모양은 더 크게 형성함.
높은 resolution은 데이터 내의 더 세밀한 표현이 가능함. 즉 많은 수의 클러스터 생성 및 모양도 작게 나타남
seurat.integrated <- FindNeighbors(seurat.integrated, dims = 1:15)
seurat.integrated <- FindClusters(seurat.integrated, resolution = 0.5)
seurat.integrated <- RunUMAP(seurat.integrated, dims = 1:8)
5. 데이터 수행의 적정 PCA 설정을 위한 분석
# Scree Plot 생성
ElbowPlot(seurat.integrated, ndims = 50)
# PCA 결과에서 누적 설명 변동성 비율 계산
pca_results <- seurat.integrated[["pca"]]
variance_explained <- pca_results@stdev^2 / sum(pca_results@stdev^2)
cumulative_variance <- cumsum(variance_explained)
# 누적 설명 변동성 비율 시각화
plot(cumulative_variance, type = "b", xlab = "Number of Principal Components", ylab = "Cumulative Variance Explained")
댓글
댓글 쓰기