单细胞之轨迹分析-1:RNA velocity

RNA velocity原理此前已经介绍过,参考单细胞测序的轨迹推断

1. loom文件准备

由于RNA velocity分析的前提是要我们从单细胞RNA-seq的数据中区分出未成熟的mRNA(unspliced)和成熟的mRNA(spliced),所以需要从fastq文件开始,与基因组进行比对后得到sam文件,从sam文件转成bam文件,再从bam文件中提取spliced,unspliced和ambiguous信息。得到.loom为后缀的文件。
(loom是scanpy常用的保存单细胞数据的格式)

2. Velocyto.R的使用练习(基于PAGODA2)

本练习基于:教程
练习数据下载: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.加载数据

library(velocyto.R)
input_loom <- "SCG71.loom"
ldat <- read.loom.matrices(input_loom)
View(ldat)
loom文件是一个包含了spliced(不包含内含子),unspliced(包含内含子)和ambiguous(在分析中不会被使用)这三个elements的list。可以看到这个数据集包含24421个基因和6667个细胞

2. 准备pagoda2的输入数据

#使用剪切位点的表达量作为pagoda2的输入
emat <- ldat$spliced
hist(log10(colSums(emat)),col='wheat',xlab='cell size') #做直方图查看数据分布
colSums(emat)是每个细胞出现了剪切事件的基因数之和,这个图是出现不同剪切事件的细胞分布。
emat <- emat[,colSums(emat)>=1e3] 
#对数据进行过滤,滤掉剪切事件在1000以下的细胞,也就是上图中横轴小于3的细胞被滤掉了
#如果过滤了可以不进行
dim(emat)
# [1] 24421  2600
# 原先的6667个细胞只剩下2600个了

3. 使用Pagoda2 processing(标准化和细胞聚类)

PAGODA(pathway and gene set overdispersion analysis)是一个分析单细胞测序的方法,主要特点是在已知的重要信号通路基础上对细胞进行分类,以提高统计效力并揭示可能的功能性解释。pagoda2可以用来进行细胞聚类,生成细胞-细胞距离矩阵等(其他软件如Seurat2也可以进行同样的操作)。
由于RNA速率分析velocyto.R是基于pagoda的cluster和tsne,因此有必要学一下pagoda。

PAGODA的Nature Methods原文链接:characterizing transcriptional heterogeneity through pathway and gene set overdispersion analysis

3.1 读入数据,构建pagoda对象并进行标准化

library(pagoda2) # 导入pagoda2包
# 构建Pagoda2对象
r <- Pagoda2$new(emat,modelType='plain',trim=10,log.scale=T) 

3.2 对表达量差异很大的基因对下游分析所占比重进行调整

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)

聚类结果可视化

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') 
 #不能绘制标题,也不能设置mfrow是为什么?

在tsne图的基础上观察某些特异基因的表达情况

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. 速率估计

准备矩阵和聚类数据

emat <- ldat$spliced
nmat <- ldat$unspliced #忽略跨剪切位点的数据(数目太少)
#通过p2对细胞进行过滤
emat <- emat[,rownames(r$counts)]
nmat <- nmat[,rownames(r$counts)]
#对分类数据进行标记
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中通常使用的全转录组相关距离矩阵要好。

cell.dist <- as.dist(1-armaCor(t(r$reductions$PCA)))

基于最小平均表达量筛选基因(至少在一个簇中),输出产生的有效基因数

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速率结果

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的数目

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容