RNA速率分析的深入解析

RNA速率分析是一个非常重要的分析内容,我们这里来深入解析一下这个分析内容(python版本,个人喜欢python),参考网址在Velocyto
安装velocyto其实很简单,直接pip安装

pip install velocyto
至于用法:

velocyto --help
Usage: velocyto [OPTIONS] COMMAND [ARGS]...

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  run            Runs the velocity analysis outputting a loom file
  run10x         Runs the velocity analysis for a Chromium Sample
  run-dropest    Runs the velocity analysis on DropEst preprocessed data
  run-smartseq2  Runs the velocity analysis on SmartSeq2 data (independent bam file per cell)
  tools          helper tools for velocyto

其实做velocyto分析使用的是转录组的可变剪切,那么对于转录组的要求当然是越长越好,最好是全长,也就是说用smartseq2的数据做这个分析最为合适,但是10X数据最多最火,也可以尝试。

velocyto run10x --help
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 repeat_msk.gtf mypath/sample01 somepath/refdata-cellranger-mm10-1.2.0/genes/genes.gtf

产生的loom文件将用于下游的分析。
我们这里详细看看这个文件及分析是怎样的。(这里还是python为例,R也可以R读loom需要hdf5r,非常难装,装成功了一定要记录,这也是我讨厌R的原因之一

首先第一步,我们来看看生成的loom文件里面都有什么

import scvelo as scv
scv.set_figure_params()##设置可视化的一些参数
data = scv.read('TH_possorted_genome_bam_YHVE5.loom', cache=True)  ###读取loom文件

当然我们这里也可以读取h5ad格式的文件(由python分析软件scanpy生成)。

data = scv.read(filename, cache=True)

我们来看看loom文件里面有什么:

 data
AnnData object with n_obs × n_vars = 70668 × 27998
    var: 'Accession', 'Chromosome', 'End', 'Start', 'Strand'
    layers: 'matrix', 'ambiguous', 'spliced', 'unspliced'

data.var
                  Accession Chromosome       End     Start Strand
Xkr4     ENSMUSG00000051951          1   3671498   3205901      -
Gm37381  ENSMUSG00000102343          1   3986215   3905739      -
Rp1      ENSMUSG00000025900          1   4409241   3999557      -
Rp1      ENSMUSG00000109048          1   4409187   4292981      -
Sox17    ENSMUSG00000025902          1   4497354   4490931      -
...                     ...        ...       ...       ...    ...
Gm28672  ENSMUSG00000100492          Y  89225296  89222067      +
Gm28670  ENSMUSG00000099982          Y  89394761  89391528      +
Gm29504  ENSMUSG00000100533          Y  90277501  90275224      +
Gm20837  ENSMUSG00000096178          Y  90433263  90401248      +
Erdr1    ENSMUSG00000096768          Y  90816464  90784738      +
###var里面是一些基因的信息

ldata.layers
Layers with keys: matrix, ambiguous, spliced, unspliced

###layer下面的东西有点多,包括矩阵信息,以及基因是否是可变剪切等信息矩阵。

可以看出这个地方只有关于可变剪切的信息,没有我们单细胞聚类得到的信息,所有我们需要将聚类结果与该loom文件的内容进行整合(merge),注意这里是python,需要读取scanpy的分析结果h5ad文件.但这里我们没有h5ad文件,只好读取Seurat的单独结果进行赋值,这里我们只需要聚类信息和二维坐标信息

import pandas as pd
import numpy as np
cluster  =  pd.read_csv(file)
adata.obs['clusters'] = cluster['Cluster']
tsne_axis=open(file,'r')
for i in all_tsne[1:]:
tsne_axis_dict={}
all_tsne=tsne_axis.readlines()
...     key=i.strip().split(',')[0]
...     tsne_axis_dict[key]=[]
...     tsne_axis_dict[key].append(i.strip().split(',')[1])
...     tsne_axis_dict[key].append(i.strip().split(',')[2])
...     tsne_axis_dict[key]=np.array(tsne_axis_dict[key],dtype='float32')
tsne_axis_list=[]
for i in Barcode:
        tsne_axis_list.append(tsne_axis_dict[i])
adata.obsm['X_tsne']=np.array(tsne_axis_list)
###UMAP的赋值也是一样的,这样我们就得到了可以直接分析的无缝衔接的文件。

接下来就是可视化了,就相对简单了

scv.pl.proportions(adata)
图片.png

这个图展示的是每个cluster可变切剪的比例值,这个地方我们需要注意,跟聚类结果严格相关,也就是说我们必须确保聚类结果相对完美的情况下做这个分析。
接下来我们要进行RNA速率分析,这里我们要注意,我们嫁接了Seurat 的结果,不要再进行过滤等操作

scv.tl.velocity(adata)
###The computed velocities are stored in adata.layers just like the count matrices.
scv.tl.velocity_graph(adata)
###For a variety of applications, the velocity graph can be converted to a transition matrix by applying a Gaussian kernel to transform the cosine correlations into actual transition probabilities. You can access the Markov transition matrix via scv.utils.get_transition_matrix.
接下来就是一些展示了,很简单
scv.pl.velocity_embedding_stream(adata, basis='umap')
图片.png
scv.pl.velocity_embedding(adata, arrow_length=3, arrow_size=2, dpi=120)
图片.png

marker gene的展示

scv.pl.velocity(adata, ['Cpe',  'Gnao1', 'Ins2', 'Adk'], ncols=2)
图片.png

Identify important genes

We need a systematic way to identify genes that may help explain the resulting vector field and inferred lineages. To do so, we can test which genes have cluster-specific differential velocity expression, being siginificantly higher/lower compared to the remaining population. The module scv.tl.rank_velocity_genes runs a differential velocity t-test and outpus a gene ranking for each cluster. Thresholds can be set (e.g. min_corr) to restrict the test on a selection of gene candidates.

scv.tl.rank_velocity_genes(adata, groupby='clusters', min_corr=.3)
df = scv.DataFrame(adata.uns['rank_velocity_genes']['names'])
df.head()
kwargs = dict(frameon=False, size=10, linewidth=1.5,
              add_outline='Ngn3 high EP, Pre-endocrine, Beta')

scv.pl.scatter(adata, df['Ngn3 high EP'][:5], ylabel='Ngn3 high EP', **kwargs)
scv.pl.scatter(adata, df['Pre-endocrine'][:5], ylabel='Pre-endocrine', **kwargs)
图片.png

接下来的可视化分析都很简单,我就不多说了,大家赶紧去试试吧
请保持愤怒,让王多鱼倾家荡产

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

推荐阅读更多精彩内容