RNA 速率学习笔记

最近学习画单细胞的拟时序轨迹图,有一些收获。大家经常使用的一般是monocle,DPT等;RNA velocity是一个比较复杂的方法,它通过细胞转录时细胞内成熟mRNA和mRNA前体的含量来计算细胞接下来生长分化的趋势。也就是说,它在计算细胞拟时序时考虑了细胞内在的结构,而非通过细胞中基因的表达量。所以它需要用到原始的bam文件。我们今天来解析一下这个方法的安装和使用。

一、安装指导

http://velocyto.org/velocyto.py/install/index.html

1、python环境下 velocyto.py

包括:

  1. 一个命令行工具,用于从mapping的bam文件中得到的loom文件【主要是得到spliced mRNA count矩阵和unspliced mRNA count矩阵】
  2. 一个分析工具,用于对loom文件做后续的RNA velocity分析

代码:
通过pip或者conda安装(如果出现错误类型:ImportError: dlopen: cannot load any more object with static TLS;有可能是导入包的顺序的问题,尝试退出,重新进入,然后首先导入sklearn包):

conda install numpy scipy cython numba matplotlib scikit-learn h5py click
pip install -U --no-deps velocyto
#或者:
git clone https://github.com/velocyto-team/velocyto.py.git
cd velocyto.py
pip install -e .  #注意后面的这个点

veocyto的安装成功与否和python版本有关,必须3.6.0以上的版本。R语言的velocyto不能独立使用,必须在python版本下生成loom文件,才可以使用。

2、R环境下 velocyto.R

包括:

R版本的velocyto没有办法根据bam文件计算得到成熟mRNA的spliced count矩阵和mRNA前体的unspliced count矩阵的loom文件。但是据说可以使用dropEst计算得到loom文件。
[不过本人并没有尝试过,如果今后有机会尝试成功了,一定回来告诉大家。]

  1. 一个分析工具,用于对loom文件做后续的RNA velocity分析

代码:

library(devtools)
install_github("velocyto-team/velocyto.R")

且需要安装其他的包作为辅助:

library(Seurat)
library(tidyverse)
library(SeuratWrappers)

3、scvelo

scVelo,是Volker Bergen团队2020年发表在NBT上的一个计算RNA velocity的工具,和velocyto相比,它的可视化结果更易解读且美观——scVelo安装指南地址。它除了基于steady-state的模型计算RNA velocity,还提供了基于dynamic模型计算RNA velocity。
但是,它也只能提供loom文件后续的计算,所以,还是需要先安装velocyto.py

安装代码:

#尽量先使用第一个方法安装
pip install -U scvelo
#开发者版本
#or
pip install git+https://github.com/theislab/scvelo@develop
#or
git clone https://github.com/theislab/scvelo && cd scvelo
git checkout --track origin/develop
pip install -e .

二、使用指南

(1)通过bam文件生成loom文件

1、10X

Usage: velocyto run10x [OPTIONS] SAMPLEFOLDER GTFFILE

          Runs the velocity analysis for a Chromium 10X Sample

          10XSAMPLEFOLDER specifies the cellranger sample folder

          GTFFILE genome annotation file

        Options:
          -s, --metadatatable FILE        Table containing metadata of the various samples (csv fortmated rows are samples and cols are entries)
          -m, --mask FILE                 .gtf file containing intervals to mask
          -l, --logic TEXT                The logic to use for the filtering (default: Default)
          -M, --multimap                  Consider not unique mappings (not reccomended)
          -@, --samtools-threads INTEGER  The number of threads to use to sort the bam by cellID file using samtools
          --samtools-memory INTEGER       The number of MB used for every thread by samtools to sort the bam file
          -t, --dtype TEXT                The dtype of the loom file layers - if more than 6000 molecules/reads per gene per cell are expected set uint32 to avoid truncation (default run_10x: uint16)
          -d, --dump TEXT                 For debugging purposes only: it will dump a molecular mapping report to hdf5. --dump N, saves a cell every N cells. If p is prepended a more complete (but huge) pickle report is printed (default: 0)
          -v, --verbose                   Set the vebosity level: -v (only warinings) -vv (warinings and info) -vvv (warinings, info and debug)
          --help                          Show this message and exit.

例子:

velocyto run10x  -m  mypath/GRCh38_rmsk.gtf  mypath2/Sample_01  somepath/refdata-gex-GRCh38-2020-A/genes/genes.gtf

其中:

  1. -m:是遮蔽指令,GRCh38_rmsk.gtf 是需要mark注释文件。
    可以从UCSA网站下载得到:hg38_rmsk.gtf(人类);
    可以直接点击链接:UCSC_hg38;然后点击get_output

    UCSC文件下载格式

  2. mypath2/Sample_01是cellranger 输出文件,Sample_01文件夹下包含一个outs文件夹,里面存储了bam文件。

  3. genes.gtf是cellranger用的基因组注释gtf文件,位于reference目录下的gene文件夹

注:

  1. 需要1.6以上版本的samtools,在命令行输入samtools --version 可以获取当前环境的版本信息。否则会出现以下错误提醒。
MemoryError: bam file #0 could not be sorted by cells.
                This is probably related to an old version of samtools, please install samtools >= 1.6.                
In alternative this could be a memory error, try to set the - your system.   Otherwise sort manually by samtools ``sort -l [compression] -m [mb_to_use]M -t [tagname] -O BAM -@ [threads_to_use] -o cellsorted_[bamfile] [bamfile]

输出:
在cellranger输出文件夹中,会出现一个velocyto文件夹,里面存储了该样本的loom文件:Sample_01.loom

(2)loom文件读取、输出、整合

1、python

#合并loom文件;
#somepath代表文件所存储的路径
import loompy as loompy
files = ["somepath/Sample_01.loom","somepath2/Sample_02.loom"]
loompy.combine(files, 'somepath/merge.loom',key="Accession")
#读取loom文件
import velocyto as vcy
vlm = vcy.VelocytoLoom("somepath/merge.loom")
2、R

读取:

library(velocyto.R)
library(Seurat)
library(SeuratWrappers)
#读取loom文件
input_loom <- "/velocyto/merge.loom"
sample.loom <- read.loom.matrices(input_loom,engine = "hdf5r")

可以将loom文件整合到seurat文件中,接下来直接在R中利用seurat对象分析

#'一定要注意,seurat对象中的细胞和基因一定要和loom文件中一致
seurat.obj[["spliced"]] <- CreateAssayObject(counts = sample.loom$spliced)
seurat.obj[["unspliced"]] <- CreateAssayObject(counts = sample.loom$unspliced)
seurat.obj[["ambiguous"]] <- CreateAssayObject(counts = sample.loom$ambiguous) 

输出:转化为H5格式输出

#
library(SeuratDisk)
SaveH5Seurat(seurat.obj, filename = "/velocyto/seurat_loom.h5Seurat")
Convert("/velocyto/seurat_loom.h5Seurat", dest = "h5ad")

(3)计算RNA速率

1、python

这里展示直接通过scvelo软件的分析

scvelo

import sklearn; sklearn.show_versions()
import scvelo as scv
adata = scv.read("/velocyto/seurat_loom.h5ad")
adata
#数据统计
scv.pl.proportions(adata, groupby='cellType',  highlight='unspliced',  show=True, save="/merge_data_statistics.pdf")
#对数据进行过滤
scv.pp.filter_and_normalize(adata, min_shared_counts=20, n_top_genes=2000)
scv.pp.moments(adata, n_pcs=30, n_neighbors=30)
scv.tl.velocity(adata)
scv.tl.velocity_graph(adata)
#流形
scv.pl.velocity_embedding_stream(adata, basis="umap",figsize = (14,10),color="cellType",show = True,save = "/merge_data_velo_stream.pdf")
#arrow
scv.pl.velocity_embedding(adata,arrow_length = 3,color="cellType",arrow_size = 2,dpi = 120,save = "/merge_data_velo_arrow.pdf")

2、R

#输入,前面生成的seurat_loom文件 
#速率分析
velo <- RunVelocity(seurat.obj, deltaT = 1, kCells = 25, fit.quantile = 0.02, 
                    spliced.average = 0.2, unspliced.average = 0.05, ncores = 18)
#全局速率可视化
emb = Embeddings(velo, reduction = "umap")
vel = Tool(velo, slot = "RunVelocity")
#可视化结果
show.velocity.on.embedding.cor(emb = emb, vel = vel, 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 = FALSE, cell.border.alpha = 0.1)

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

推荐阅读更多精彩内容