RNA velocity原理此前已經(jīng)介紹過遏佣,參考單細胞測序的軌跡推斷。
1. loom文件準備
由于RNA velocity分析的前提是要我們從單細胞RNA-seq的數(shù)據(jù)中區(qū)分出未成熟的mRNA(unspliced)和成熟的mRNA(spliced)腥光,所以需要從fastq文件開始,與基因組進行比對后得到sam文件,從sam文件轉(zhuǎn)成bam文件策幼,再從bam文件中提取spliced肺缕,unspliced和ambiguous信息左医。得到.loom為后綴的文件。
(loom是scanpy常用的保存單細胞數(shù)據(jù)的格式)
2. Velocyto.R的使用練習(基于PAGODA2)
本練習基于:教程
練習數(shù)據(jù)下載:SCG71.loom
The example below starts with a loom file produced by velocyto.py, uses pagoda2 to obtain cell clusters/embedding, and then estimate/visualize velocity.
1.加載數(shù)據(jù)
library(velocyto.R)
input_loom <- "SCG71.loom"
ldat <- read.loom.matrices(input_loom)
View(ldat)
2. 準備pagoda2的輸入數(shù)據(jù)
#使用剪切位點的表達量作為pagoda2的輸入
emat <- ldat$spliced
hist(log10(colSums(emat)),col='wheat',xlab='cell size') #做直方圖查看數(shù)據(jù)分布
emat <- emat[,colSums(emat)>=1e3]
#對數(shù)據(jù)進行過濾,濾掉剪切事件在1000以下的細胞洲尊,也就是上圖中橫軸小于3的細胞被濾掉了
#如果過濾了可以不進行
dim(emat)
# [1] 24421 2600
# 原先的6667個細胞只剩下2600個了
3. 使用Pagoda2 processing(標準化和細胞聚類)
PAGODA(pathway and gene set overdispersion analysis)是一個分析單細胞測序的方法远豺,主要特點是在已知的重要信號通路基礎(chǔ)上對細胞進行分類,以提高統(tǒng)計效力并揭示可能的功能性解釋坞嘀。pagoda2可以用來進行細胞聚類躯护,生成細胞-細胞距離矩陣等(其他軟件如Seurat2也可以進行同樣的操作)。
由于RNA速率分析velocyto.R是基于pagoda的cluster和tsne丽涩,因此有必要學一下pagoda棺滞。PAGODA的Nature Methods原文鏈接:characterizing transcriptional heterogeneity through pathway and gene set overdispersion analysis
3.1 讀入數(shù)據(jù),構(gòu)建pagoda對象并進行標準化
library(pagoda2) # 導入pagoda2包
# 構(gòu)建Pagoda2對象
r <- Pagoda2$new(emat,modelType='plain',trim=10,log.scale=T)
3.2 對表達量差異很大的基因?qū)ο掠畏治鏊急戎剡M行調(diào)整
r$adjustVariance(plot=T,do.par=T,gam.k=10)
3.3 對細胞進行降維聚類和細胞嵌合分析tsne
r$calculatePcaReduction(nPcs=100,n.odgenes=3e3,maxit=300)
r$makeKnnGraph(k=30,type='PCA',center=T,distance='cosine')
r$getKnnClusters(method=multilevel.community,type='PCA',name='multilevel')
r$getEmbedding(type='PCA',embeddingType='tSNE',perplexity=50,verbose=T)
聚類結(jié)果可視化
par(mfrow=c(1,2))
r$plotEmbedding(type='PCA',embeddingType='tSNE',show.legend=F,mark.clusters=T,min.group.size=10,shuffle.colors=F,mark.cluster.cex=1,alpha=0.3,main='cell clusters')
r$plotEmbedding(type='PCA',embeddingType='tSNE',colors=r$depth,main='depth')
#不能繪制標題矢渊,也不能設(shè)置mfrow是為什么检眯?
在tsne圖的基礎(chǔ)上觀察某些特異基因的表達情況
gene <-"Ccr2"
r$plotEmbedding(type='PCA',embeddingType='tSNE',colors=r$counts[,gene],shuffle.colors=F,mark.cluster.cex=1,alpha=0.8,main=gene)
計算每個cluster的差異基因并可視化,比如畫出cluster2中高表達基因的熱圖
r$getDifferentialGenes(type='PCA',verbose=T)
de=r$diffgenes$PCA$multilevel$`2`
r$plotGeneHeatmap(genes=rownames(de)[1:15],groups=r$clusters$PCA[[1]])
4. 速率估計
準備矩陣和聚類數(shù)據(jù)
emat <- ldat$spliced
nmat <- ldat$unspliced #忽略跨剪切位點的數(shù)據(jù)(數(shù)目太少)
#通過p2對細胞進行過濾
emat <- emat[,rownames(r$counts)]
nmat <- nmat[,rownames(r$counts)]
#對分類數(shù)據(jù)進行標記
cluster.label <- r$clusters$PCA$multilevel # take the cluster factor that was calculated by p2
library(sccore)
cell.colors <- fac2col(cluster.label)
# take embedding form p2
emb <- r$embeddings$PCA$tSNE
計算細胞間的距離(除了聚類和tSNE嵌合昆淡,在p2(pagoda2)過程中也可以得到一個細胞細胞距離矩陣锰瘸,而這個矩陣比velocyto.R中通常使用的全轉(zhuǎn)錄組相關(guān)距離矩陣要好。
cell.dist <- as.dist(1-armaCor(t(r$reductions$PCA)))
基于最小平均表達量篩選基因(至少在一個簇中)昂灵,輸出產(chǎn)生的有效基因數(shù)
emat <- filter.genes.by.cluster.expression(emat,cluster.label,min.max.cluster.average = 0.2)
nmat <- filter.genes.by.cluster.expression(nmat,cluster.label,min.max.cluster.average = 0.05)
length(intersect(rownames(emat),rownames(nmat)))
計算RNA速率(using gene-relative model with k=20 cell kNN pooling and using top/bottom 2% quantiles for gamma fit)
fit.quantile <- 0.02
rvel.cd <- gene.relative.velocity.estimates(emat,nmat,deltaT=1,kCells=25,cell.dist=cell.dist,fit.quantile=fit.quantile)
在tsne上可視化RNA速率結(jié)果
show.velocity.on.embedding.cor(emb,rvel.cd,n=200,scale='sqrt',cell.colors=ac(cell.colors,alpha=0.5),cex=0.8,arrow.scale=3,show.grid.flow=TRUE,min.grid.cell.mass=0.5,grid.n=40,arrow.lwd=1,do.par=F,cell.border.alpha = 0.1)
可視化特定的基因
gene <- "Camp"
gene.relative.velocity.estimates(emat,nmat,deltaT=1,kCells = 25,kGenes=1,fit.quantile=fit.quantile,cell.emb=emb,cell.colors=cell.colors,cell.dist=cell.dist,show.gene=gene,old.fit=rvel.cd,do.par=T)
增加k的數(shù)目
gene <- "Camp"
gene.relative.velocity.estimates(emat,nmat,deltaT=1,kCells = 100,kGenes=1,fit.quantile=fit.quantile,cell.emb=emb,cell.colors=cell.colors,cell.dist=cell.dist,show.gene=gene,do.par=T)
參考:http://pklab.med.harvard.edu/velocyto/notebooks/R/SCG71.nb.html