NanoRMS: 预测纳米孔RNA修饰计量学

NanoRMS: 预测纳米孔RNA修饰计量学

从直接RNA测序数据集中的每读信息预测和可视化RNA修饰计量学

目录

  • 一般描述
    1. RNA修饰位点的预测
    1. 使用Nanopolish重画波形图估计RNA修饰计量学(不推荐)
    1. 使用Tombo重画波形图估计RNA修饰计量学(推荐)
    1. 可视化个别位点的每读电流强度

依赖项和版本

  • 引用
  • 联系方式

一般描述

NanoRMS通过将读取分类为修饰/未修饰,基于它们的每读特征(电流强度、停留时间或追踪),来预测修饰计量学。

NanoRMS可以以单模式(1个样本)或配对模式(2个样本)运行。

NanoRMS可以运行无监督(例如K均值、聚合聚类、GMM)和有监督的机器学习算法(例如KNN、随机森林)。后者将需要成对样本,其中一个条件是敲除。

NanoRMS可以从Nanopolish重画波形图读取或从Tombo重画波形图读取中预测计量学。后者是推荐选项。

它的作用是什么?预测高度修饰和低度修饰RNA的计量学

NanoRMS可以使用无监督(K均值)或有监督(KNN)分类算法进行计量学预测。我们使用LC-MS/MS确认了伪尿嘧啶水平的合成分子来说明其定量能力。

NanoRMS将TRACE(TR)作为特征纳入预测每读修饰(从而计量学)。我们发现,将TRACE纳入极大地改善了RNA修饰计量学的预测。总体而言,我们发现最佳的特征组合是TRACE + 信号强度。

NanoRMS的计量学预测已在不同百分比修饰的RNA上的伪尿嘧啶和2-O-甲基化上进行了基准测试。

1. RNA修饰位点的预测

1.1. 使用Epinano-RMS提取基础呼叫特征

从参考fasta创建字典文件

请注意,我们使用的是专门为nanoRMS开发的EpiNano的修改版本(版本1.2)。EpiNano-RMS包括有关每种碱基(C_freq、A_freq、G_freq、T_freq)的不匹配比例的信息,以及总体不匹配频率。

首先,我们需要从参考fasta文件创建一个字典文件

java -jar epinano_RMS/picard.jar CreateSequenceDictionary REFERENCE=reference.fasta OUTPUT= reference.fasta.dict

运行Epinano-RMS

需要python3

python3 epinano_RMS/epinano_rms.py -R <reference_file> -b <bam_file> -s epinano_RMS/sam2tsv

使用测试数据的示例:

python3 epinano_RMS/epinano_rms.py -R test_data/yeast_rRNA_ref -b test_data/wt_sorted.bam -s epinano_RMS/sam2tsv

1.2. 预测RNA修饰

a) 单样本RNA修饰预测(即“de novo”预测)

单样本“de novo”RNA修饰预测已针对线粒体rRNA中的伪尿嘧啶RNA修饰进行了测试。使用基于CMC的探针测序(Nano-CMCseq)验证了新预测位点,所有3个生物重复中预测的2个位点均得到验证。

“de novo”伪尿嘧啶修饰位点的RNA修饰预测依赖于识别伪尿嘧啶基础呼叫错误的“签名”,这使我们能够在单个样本中de novo预测RNA修饰,只要修饰的计量学足够高(即能够与直接RNA测序的背景基础呼叫错误区分开来)。具体来说,伪尿嘧啶在修饰位置上引起强烈的不匹配签名,主要表现为C到U的不匹配(见下图)。

请注意,图5a和方法部分所示的阈值有错别字(但论文中的所有计算都是使用正确的阈值完成的)。正确的阈值如下:不匹配频率阈值:0.137,C频率阈值:0.578。

一般用法:

Rscript --vanilla Pseudou_prediction_singlecondition.R [options] -f <epinano_file1> (-s <epinano_file2> -t <epinano_file3>)

使用测试数据的示例(在线粒体核糖体RNA上预测伪尿嘧啶位点):

Rscript --vanilla Pseudou_prediction_singlecondition.R -f WT_rRNA_Epinano.csv -s sn34KO_rRNA_Epinano.csv -t sn36KO_rRNA_Epinano.csv

b) 配对样本RNA修饰预测(即基于“差异错误”的预测)

伪尿嘧啶并不总是在高计量学中存在(例如rRNAs),但也可以以低计量学存在(例如在mRNAs中)。请注意,由于背景纳米孔“错误”与伪尿嘧啶引起的“错误”过于相似,因此不能使用“de novo”模式准确预测mRNA中的伪尿嘧啶。

对于这种情况,我们可以通过识别两个条件之间显示伪尿嘧啶差异错误签名的位点来预测差异性伪尿嘧啶化位点,如下所示。这种成对比较可以用于WT-KO,或两个条件之间(例如正常-热应激)。下图中,展示了使用此脚本识别的一些热响应位点的示例。差异错误基础预测可以应用于任何类型的RNA(mRNA、snoRNAs、snRNAs、rRNA等)。

对于转录组映射读取(来自一个链的读取)

一般用法:

Rscript --vanilla Pseudou_prediction_pairedcondition_transcript.R [options] -f <epinano_file1> -s <epinano_file2>

使用测试数据的示例:

Rscript --vanilla Pseudou_prediction_pairedcondition_transcript.R -f WT_ncRNA_Normal_Rep1_Epinano.csv -s WT_ncRNA_HeatShock_Rep1_Epinano.csv

对于基因组映射读取(来自两个链的读取)

我们首先需要处理Epinano输出和GTF文件,将它们转换为BED文件。此外,我们将使用Bedtools的相交功能将两者相交。

将Epinano输出转换为BED

一般用法:

./Epinano_to_BED.sh <epinano_file1>

使用测试数据的示例:

./Epinano_to_BED.sh WT_mRNA_Normal_Epinano.csv

将GTF(仅限CDS)输出转换为BED

一般用法:

Rscript --vanilla GTF_to_BED.R <GTF_File>

使用测试数据的示例:

Rscript --vanilla GTF_to_BED.R Saccer64.gtf

相交Epinano_BED文件和GTF_BED文件

所需工具:bedtools intersect

一般用法:

bedtools intersect -a <Epinano_Bed> -b <GTF_Bed> -wa -wb > output.bed

使用测试数据的示例:

bedtools intersect -a WT_mRNA_Normal_Epinano.csv.bed -b Saccer3.bed -wa -wb > WT_mRNA_Normal_Epinano_final.bed

一般用法:

Rscript --vanilla Pseudou_prediction_pairedcondition_genome.R [options] -f <epinano_file1> -s <epinano_file2>

使用测试数据的示例:

Rscript --vanilla Pseudou_prediction_pairedcondition_genome.R -f WT_mRNA_Normal_Epinano.csv -s WT_mRNA_HeatShock_Epinano.csv

2. 使用Nanopolish重画波形图估计RNA修饰计量学

这个版本已经过时。如果您仍想使用它,可以在这里找到详细信息和代码

3. 使用Tombo重画波形图估计RNA修饰计量学

要使用这个版本,您可以在这里找到安装详细信息

首先下载测试数据

这个数据集在per_read目录中有更详细的描述。

(cd per_read && wget https://public-docs.crg.es/enovoa/public/lpryszcz/src/nanoRMS/per_read/guppy3.0.3.hac -q --show-progress -r -c -nc -np -nH --cut-dirs=6 --reject="index.html*")

从所有样本中检索每读特征。

ref=per_read/guppy3.0.3.hac/Saccharomyces_cerevisiae.R64-1-1_firstcolumn.ncrna.fa
per_read/get_features.py --rna -f $ref -t 6 -i per
_read/guppy3.0.3.hac/*WT??C/workspace/*.fast5

您的Fast5文件必须已经基础呼叫并包含FastQ条目,

移动和追踪表(这可以通过h5ls -r batch0.fast5 | less进行检查)。

注意,当通过MinKNOW执行基础呼叫时,默认情况下不存储移动和追踪表。

在这种情况下,您需要重新基础呼叫您的Fast5文件

指定guppy_basecaller的--fast5_out参数。

估计两个样本之间的修饰频率差异

注意,您需要提供可能被修饰的候选位置。这些之前已经确定过——请参阅上面的第1.2节。预测RNA修饰。所以我们这里只是从现有的候选文件生成BED文件。

# 准备 BED - 这不再是需要的步骤!

f=per_read/results/predictions_ncRNA_WT30C_WT45C.tsv.gz
zgrep -v X.Ref $f |awk -F'\t' 'BEGIN {OFS = FS} {print $1,$2-1,$2,".",100,"+"}' > $f.bed

# 计算对照组和样本之间的修饰频率差异

per_read/get_freq.py -f $ref -b $f.bed -o $f.bed.tsv.gz -1 per_read/guppy3.0.3.hac/WT30C/workspace/.fast5.bam -2 per_read/guppy3.0.3.hac/WT45C/workspace/.fast5.bam

注意,候选位置文件(-b $f.bed)必须仅引用一些读取对齐的参考位置——

否则get_freq.py将报告有关低覆盖率的警告。

您可以使用--mincov更改所需的最小读取数,但至少为5,由于KNN的要求。

请注意,KMEANS不准确分配计量学变化的方向性,而KNN则准确(因为KMEANS随机分配一个聚类为“修饰”,另一个为“未修饰”。因此,要知道KMEANS计量学预测的变化方向,您需要从该给定位置的不匹配错误的方向性推断。如果您不关心变化的方向性,而只是关心变化的大小,您可以直接取预测计量学变化的绝对值。

4. 可视化个别位点的每读电流强度

4.1. 数据预处理

首先,通过折叠所有对于同一位置的多个观察结果,生成一个折叠的Nanopolish事件对齐输出。

python3 per_read_mean.py <event_align_file>

使用测试数据的示例:

python3 per_read_mean.py test_data/data1_eventalign_output.txt

其次,创建以感兴趣位置为中心的每读电流强度的15-mer窗口

上一步生成的Nanopolish事件对齐的输出在此脚本中用作输入。

Rscript --vanilla nanopolish_window.R positions_file <input_table> <label>

使用测试数据的示例:

Rscript --vanilla nanopolish_window.R test_data/positions test_data/data1_eventalign_output.txt_processed_perpos_mean.csv data1

4.2. 可视化电流强度信息:

4.2.1 密度图

Rscript --vanilla density_nanopolish.R <window_file1> <window_file2> <window_file3(optional)> <window_file4(optional)>

使用测试数据的示例:

Rscript --vanilla nanopolish_density_plot.R test_data/sn34_window_file.tsv test_data/wt_window_file.tsv

4.2.2 以修饰位点为中心的平均电流强度图

Rscript --vanilla nanopolish_meanlineplot.R <window_file1> <window_file2> <window_file3(optional)> <window_file4(optional)>

使用测试数据的示例:

Rscript --vanilla nanopolish_meanlineplot.R test_data/sn34_window_file.tsv test_data/wt_window_file.tsv

4.2.3 以修饰位点为中心的每读电流强度图

Rscript --vanilla nanopolish_perreadlineplot.R <window_file1> <window_file2> <window_file3(optional)> <window_file4(optional)>

使用测试数据的示例:

Rscript --vanilla nanopolish_perreadlineplot.R test_data/sn34_window_file.tsv test_data/wt_window_file.tsv

4.2.4 来自每读15-mer电流强度数据的主成分分析图

Rscript --vanilla nanopolish_pca.R <window_file1.tsv> <window_file2.tsv> <window_file3.tsv(optional)> <window_file4.tsv(optional)>

使用测试数据的示例:

Rscript --vanilla nanopolish_pca.R test_data/sn34_window_file.tsv test_data/wt_window_file.tsv

依赖项和版本

软件 版本
matplotlib 3.1.2
numba 0.51.1
numpy 1.19.4
ont-fast5-api 3.1.6
ont-tombo 1.5.1
openpyxl 3.0.5
pandas 0.24.2
scipy 1.5.2
seaborn 0.11.0
sklearn 0.23.1

如果您遇到无法将浮点数NAN转换为整数的错误,

确保将numpy降级到1.20以下的版本

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

推荐阅读更多精彩内容