SynMut:设计同义词突变序列的工具

顾浩高,潘立明

香港大学公共卫生学院

2022-11-01


简介

同义突变指的是DNA/RNA序列突变导致没有翻译的氨基酸序列的修饰。大多数同义突变也是沉默突变,因为它们对生物体的表型没有可观察到的影响。设计具有同义突变的突变序列是许多生物学研究中常用的一种控制翻译氨基酸序列中一些不必要变化的方法。

密码子使用偏倚和二核苷酸使用偏倚是DNA/RNA序列中的两个基因组特征,即使是同义序列。表征具有不同密码子使用偏倚或二核苷酸使用偏倚的同义序列的功能,有助于研究其对各种生物学功能的影响。事实上,该方法已在病毒学的许多研究中得到应用。

SynMut提供了生成不同基因组特征的多个同义DNA序列的工具(特别是密码子/二核苷酸使用模式)。用户还可以指定序列中的可变区域(这是特别有用的,因为基因组中有一些我们不想修改的保守区域)。该工具最初设计用于在甲型流感病毒中生成重组病毒序列,以研究不同的二核苷酸使用和密码子使用的影响,但此包中提供的这些功能可以通用于各种其他生物学研究。

下面是一个流程图,说明这个包中的组件是如何一起工作的。

开始

安装

如果requireNamespace“BiocManager”))install.packages“BiocManager”如果requireNamespace“SynMut”))BiocManager::安装“SynMut”

输入数据

我们以包中的以下数据为例。

  • example.fasta: fasta文件包含DNA片段7和片段8的序列甲型流感/布里斯班/59/2007 (H1N1) (BR59)
  • target_regions.csv: csv格式的区域文件读作data.frame指定用户定义的可变位置(氨基酸位置)对应于DNA序列。
图书馆“SynMut”filepath。fasta < -执行“extdata”“example.fasta”包=“SynMut”filepath.csv < -执行“extdata”“target_regions.csv”包=“SynMut”地区< -read.csv(filepath.csv)

input_seq函数以system fasta文件或DNAStringSet对象作为输入,来构造regioned_dna对象中使用的SynMut包中。

重要的笔记:如果地区参数是在结果的regioned_dna对象中指定的,它将自动应用于突变的所有下游函数。突变将只在指定的可变区域中执行。

rgd.seq<-input_seq(filepath。fasta、地区)rgd.seqregioned_dna类的对象#>序列数:2

访问数据

各种各样的get_函数被用来获得一些有用的信息:

  • get_dna:获取DNA序列。这将返回一个DNAStringSet对象(从Biostrings包)。
get_dna(rgd.seq)长度为2的DNAStringSet对象:#> width seq names#> [1] 759 atgagtcttctaaccgaggtcga…TGCAGATGCAACGATTCAAGTGA /布里斯班/ 59/200……#> [2] 693 atggattcccacactgtgtcaag…GAACAACTAGGTCAGAAGTTTGA /布里斯班/ 59/200……
  • get_region:访问自定义可变区域。如果没有指定的区域,该函数将返回一个列表长度为0。
strget_region(rgd.seq))#> 2的列表#> $ M: logi [1:53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE…#> $ NS: logi [1:31] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE…get_regioninput_seq(filepath.fasta))# >列表()
  • get_cu:获取密码子使用情况
  • get_du:获取二核苷酸的使用情况
  • get_nu:获取核苷酸使用情况
get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 5 2 8 9 5 7 2 4 7 4 4 5 5 4 14 3 5 1#> [2,] 8 3 5 6 6 2 0 10 4 3 4 2 3 3 10 5 4 1#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 10 4 3 2 1 2 4 10 1 2 7 5 9 7 2 10 4#> [2,] 5 2 3 2 0 3 2 2 4 0 5 3 4 7 10 5 6 10#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 8 10 0 9 5 2 7 2 2 3 5 3 0 2 0 3 3 1#> [2,] 6 2 2 6 7 4 3 1 2 5 3 5 0 1 0 0 4 3#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 1 4 1 0 1 3 3 3 0 4#> [2,] 1 3 1 1 4 2 1 7 2 3get_du(rgd.seq)#> aa ac ag在ca cc CG ct ga gc gg gt ta tc tg tt#> [1,] 65 41 62 56 64 38 20 48 61 48 54 31 34 43 58 35#> [2,] 69 40 51 45 51 29 20 47 64 34 49 27 21 44 54 47get_nu(rgd.seq)#> a c g t#> [1,] 225 170 194 170#> [2,] 206 147 174 166
  • 我们还提供以下函数:
    • 获取同义密码子的密码子使用频率:get_freq
    • get同义密码子的rscu (Relative Synonymous Codon Usage):get_rscu

产生突变

随机同义突变体

生成随机同义突变(在特定区域,如果在input_seq),可选择保留或不保留原来的密码子使用偏差。

#随机同义突变无足轻重的人。seq < -codon_random(rgd.seq)#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 4 0 -4 1 -4 3 0 -5 -2 -3 2 -1 1 0 0 3 3#> [2,] -3 1 3 -1 -2 3 4 -5 -2 -1 -2 1 0 2 0 -2 2 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] -3 -3 0 1 0 -1 0 2 3 3 2 -1 -4 -3 4 1 -4 -1#> [2,] -2 0 -2 1 3 -2 2 -1 4 -2 1 1 -4 1 2 -1 -2 -2#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] -3 -2 7 -2 -1 3 -5 3 -1 0 0 1 0 0 0 0 0 2 -1#> [2,] -1 4 -2 -1 -4 -1 3 2 0 1 -1 0 0 0 0 0 0 -1 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 2 -3 0 1 0 -1 1 1 5 -1#> [2,] 1 0 0 1 0 -1 2 0 2 0 0 0#保持原来的密码子使用模式无足轻重的人。seq < -codon_random(rgd.seq保持=真正的#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0

我们还可以指定n参数控制密码子被突变的比例。

50%的密码子允许发生突变无足轻重的人。seq < -codon_random(rgd.seqn =0.5#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 1 0 -1 0 -3 3 0 -3 2 3 1 0 0 -1 -1 1#> [2,] 0 0 0 0 0 -1 4 -3 0 -2 2 4 -1 0 -3 -1 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 1 -1 0 1 0 -1 0 2 0 -1 1 1 0 -3 0 0 0 0 0 0 0 0 0#> [2,] 1 0 0 0 1 -1 3 -1 -1 1 -3 1 5 1 -1 -1 1#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] -1 0 3 -2 1 0 0 -1 0 1 -2 1 0 1 0 0 -1 0 0#> [2,] 0 -1 0 1 -3 -1 2 2 -1 0 1 0 0 0 0 0 0 0 0 1 -1#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] -1 0 0 0 0 0 0 1 1 -1#> [2,] -1 -1 0 0 0 0 -1 -2 -1 2

具有最大/最小使用特定密码子的同义突变体

在研究特定密码子的作用时,拥有最大/最小使用该密码子的突变体将是有用的。的codon_to函数会帮你完成这项工作。传递一串密码子给任意一个max.codonmin.codon参数,以最大化或最小化序列中某些密码子的使用。

#生成aac最大化的突变无足轻重的人。seq < -codon_to(rgd.seqmax.codon=“AAC格式”#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 8 0 -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 6 0 -6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0#生成aac最小化的突变无足轻重的人。seq < -codon_to(rgd.seqmin.codon =“AAC格式”#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 -2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 -3 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0

具有最大/最小使用特定二核苷酸的同义突变体

使用dinu_to以最大/最小限度使用特定二核苷酸来产生突变。这是由一个两步启发式贪婪算法完成的,细节可以在这里找到链接

另一种选择keep = TRUE参数允许保留原始密码子使用偏差。这在与codon_mimic下一节设计密码子使用偏向相似但二核苷酸使用不同的突变序列。

#最大化“CG”二核苷酸在预定义区域的使用无足轻重的人。seq < -dinu_to(rgd.seqmax。dinu =“重心”#检查突变体和原始体对二核苷酸的使用差异get_du(mut.seq)-get_du(rgd.seq)#> aa ac ag在ca cc CG ct ga gc gg gt ta tc tg tt#> [1,] -3 11 -34 -26 -12 8 96 -8 -11 35 -11 -26 30 -37 -23#> [2,] -16 8 -24 -20 -7 12 86 -9 -10 37 -4 3 -19 25 -32 -30#尽量减少“CA”的使用,并比较二核苷酸的使用情况。无足轻重的人。seq < -dinu_to(rgd.seqmin.dinu =“CA”get_du(mut.seq)-get_du(rgd.seq)#> aa ac ag在ca cc CG ct ga gc gg gt ta tc tg tt#> [1,] -16 -9 -22 -1 -40 -22 24 21 10 2 12 3 -2 12 13 15#> [2,] -24 -14 -14 8 -35 -17 16 11 10 9 16 2 5 -3 19 11#最大化“CG”的使用,同时保持原始密码子的使用无足轻重的人。seq < -dinu_to(rgd.seqmax。dinu =“重心”保持=真正的比较二核苷酸的使用情况get_du(mut.seq)-get_du(rgd.seq)#> aa ac ag在ca cc CG ct ga gc gg gt ta tc tg tt#> [1,] 6 -1 -5 0 -19 -4 26 -3 0 2 -2 0 13 3 -19 3#> [2,] 0 2 -4 2 -13 -6 23 -4 13 -5 1 12 1 -14#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0

模仿特定密码子使用模式的同义突变体

这个函数codon_mimic改变序列以模拟目标密码子的使用模式。给出了详细的算法链接

alt参数指定密码子使用向量中的目标密码子使用get_cu)或长度为1的DNAStringSet,表示所需的密码子用法。

#使用密码子使用向量作为目标目标< -get_cu(rgd.seq) [2,)无足轻重的人。seq < -codon_mimic(rgd.seqalt =目标)#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 3 2 -3 -2 1 -5 -1 5 -2 0 0 -3 -1 -1 0 2 2 1#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] -2 -1 0 0 0 0 0 -2 1 4 -1 4 -3 0 -1 4 0 -4 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 3 -7 3 1 3 2 -4 -1 0 1 -2 1 0 2 0 -2 2 2#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 -1 0 1 1 -2 2 2 -2#> [2,] 0 0 0 0 0 0 0 0 0 0#使用序列作为目标目标< -Biostrings::DNAStringSet“TTGAAAA-CTC-N——亚美大陆煤层气有限公司”无足轻重的人。seq < -codon_mimic(rgd.seqalt =目标)#比较密码子的使用get_cu(mut.seq)-get_cu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac#> [1,] 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC CTG CTT gaa gac gag gat#> [1,] 0 0 0 0 0 0 0 0 0 0 -1 -4 -5 -7 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 -5 -3 -4 -6 0 0 0 0 0#> gca GCC GCG GCT gga GGC GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> TCG ttct tga TGC TGG TGT tta TTC TTG TTT#> [1,] 0 0 0 0 0 0 -2 0 19 0#> [2,] 0 0 0 0 0 0 -1 0 19 0比较同义密码子的使用频率get_freq(mut.seq)-get_freq(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc#> [1,] 0.07692308 0 -0.07692308 0 0 0 0 0 0 0 0 0 0 0#> [2,] -0.07692308 0 0.07692308 0 0 0 0 0 0 0 0 0 0#> atg att caa cac cag cat cca CCC CCG CCT CGA CGC CGG CGT cta#>[1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.03846154 .使用实例#>[2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.22727273 .使用实例#> CTC CTG CTT gaa gac gag gat gca GCC GCG GCT gga GGC#> [1,] -0.1538462 -0.1923077 -0.2692308 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] -0.1363636 -0.1818182 -0.2727273 0 0 0 0 0 0 0 0 0 0 0 0 0#> GGG GGT gta GTC GTG GTT taa tac tag tat tca TCC TCG TCT tga TGC TGG TGT#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> tta TTC TTG TTT#> [1,] -0.07692308 0 0.7307692 0#>[2,] -0.04545455 0 0.8636364 0.使用实例比较相对同义密码子使用(RSCU)get_rscu(mut.seq)-get_rscu(rgd.seq)#> aaa aac aag aat aca acc acg act aga agc agg agt ata atc atg#> [1,] 0.1538462 0 -0.1538462 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] -0.1538462 0 0.1538462 0 0 0 0 0 0 0 0 0 0 0 0 0#> att caa cac cag cat cca CCC CCG CCT CGA CGC CGG CGT cta CTC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2307692 -0.9230769 . #> [1,#>[2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.3636364 -0.8181818 .使用实例#> CTG CTT gaa gac gag gat gca GCC GCG GCT gga GGC GGG GGT gta#> [1,] -1.153846 -1.615385 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> [2,] -1.090909 -1.636364 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0#> GTC GTG GTT taa tac tag tat tca TCC TCG TCT tga TGC TGG TGT tta TTC#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4615385 0#> [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2727273 0#> TTG TTT#> [1,] 4.384615 0#> [2,] 5.181818 0

输出结果

输出DNA突变序列

Biostrings::writeXStringSetget_dna(rgd.seq),“rgd.fasta”

会话信息

sessionInfo()#> R正在开发中(不稳定)(2022-10-25 r83175)#>平台:x86_64-pc-linux-gnu(64位)运行在Ubuntu 22.04.1 LTS下# >矩阵产品:默认值#> BLAS: /home/biocbuild/bbs-3.17-bioc/R/lib/libRblas.so#> LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK /liblapack.so.3.10.0# ># >语言环境:#> [1] LC_CTYPE=en_US。utf - 8 LC_NUMERIC = C#> [3] LC_TIME=en_GB LC_COLLATE=C#> [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。utf - 8#> [7] LC_PAPER=en_US。utf - 8 LC_NAME = C#> [9] lc_address = c lc_phone = c#> [11] LC_MEASUREMENT=en_US。utf - 8 LC_IDENTIFICATION = C# >#>附加基础包:#>[1]统计图形grDevices utils数据集方法基础# >#>其他附加包:#> [1] SynMut_1.15.0 . ## >#>通过命名空间加载(并且没有附加):#> [1] crayon_1.5.2 cli_3.4.1 knitr_1.40#> [4] rlang_1.0.6 xfun_0.34 stringi_1.7.8#> [7] seqinr_2 .2-16 jsonlite_1.8.3 S4Vectors_0.37.0#> [10] RCurl_1.98-1.9 Biostrings_2.67.0 htmltools_0.5.3#> [13] sass_0.4.2 stats4_4.3.0 rmarkdown_2.17#> [16] evaluate_0.17 jquerylib_0.1.4 prettydoc_0.4.1#> [19] MASS_7.3-58.1 bitops_1.0-7 fastmap_1.1.0#> [22] GenomeInfoDb_1.35.0 yaml_2.3.6 IRanges_2.33.0 . ##> [25] string_1 .4.1 compiler_4.3.0 XVector_0.39.0#> [28] digest_0.6.30 R6_2.5.1 GenomeInfoDbData_1.2.9#> [31] magrittr_2.0.3 bslib_0.4.0 tools_4.3.0#> [34] zlibbioc_1.45.0 ade4_1.7-19 BiocGenerics_0.45.0#> [37] cachem_1.0.6