草庐IT

GenomeScope 2.0 评估基因组大小、杂合度和重复序列

生信师姐 2023-09-27 原文

GenomeScope 是2017年发表在 bioinformatic 的一个工具,这个工具的目的就是处理一些高复杂度的基因组,比如说高杂合度或者基因组非常大的物种。GenomeScope只能预测二倍体基因组,GenomeScope 2.0可以预测多倍体物种。

安装

$ git clone https://github.com/tbenavi1/genomescope2.0.git
$ cd genomescope2.0/
$ Rscript install.R

在软件的安装目录下,genomescopre.R文件是核心的运行脚本,用法如下

$ Rscript genomescope.R \
  -i histogram_file  \
  -o output_dir \
  -k k-mer_length

可选参数:
  -i input histogram_file (from KMC or jellyfish) ,如jellyfish软件产生的kmer频数分布数据
  -o output_dir
  -k kmer length used to calculate kmer spectra [default 21] ;

必选参数:
  -p PLOIDY, --ploidy PLOIDY ploidy (1, 2, 3, 4, 5, or 6) for model to use [default 2] ;
  -m MAX_KMERCOV, --max_kmercov MAX_KMERCOV optional maximum kmer coverage threshold (kmers with coverage greater than max_kmercov are ignored by the model) ;
  -n NAME_PREFIX, --name_prefix NAME_PREFIX optional name_prefix for output files ;
  -l LAMBDA, --lambda LAMBDA, --kcov LAMBDA, --kmercov LAMBDA optional initial kmercov estimate for model to use ;

示例:

/path/R/3.1.1/bin/Rscript   /path/genomescope2.0/genomescope.R 
  -i /home/liuliu/test/Survey//kmer_21/21mer.out.hist \
  -o /home/liuliu/test/Survey/kmer_21/output_p3  \
  -k 21  \
  -p 3  \
  -n 21.p3 \

在运行过程中,终端会输出如下信息

GenomeScope analyzing /home/liuliu/test/Survey/kmer_21/21mer.out.hist p=3 k=21 outdir=/home/liuliu/test/Survey//kmer_21/output_p3
aaa:98.4% aab:1.51% abc:0.14%
Model converged het:0.0165 kcov:18.4 err:0.00279 model fit:0.541 len:376278986

het表示杂合度,为1.65%;len表示基因组大小,为376M左右。

输出目录output_p3文件列表如下

|-- 21.p3_linear_plot.png
|-- 21.p3_log_plot.png
|-- 21.p3_model.txt
|-- 21.p3_progress.txt
|-- 21.p3_summary.txt
|-- 21.p3_transformed_linear_plot.png
`-- 21.p3_transformed_log_plot.png

0 directories, 7 files

通常关注summary.txt, transformed_linear_plot.png这2个文件。

1. summary.txt

内容如下:

$cat 21.p2_summary.txt
GenomeScope version 2.0
input file = /home/liuliu/test/Survey//kmer_21/21mer.out.hist
output directory = /home/liuliu/test/Survey/kmer_21/output_p3
p = 3
k = 21
name prefix = 21.p3

property                      min               max               
Homozygous (aaa)              98.3038%          98.4035%          
Heterozygous (not aaa)        1.5965%           1.69625%          
aab                           1.47668%          1.53603%          
abc                           0.119818%         0.160215%         
Genome Haploid Length         375,321,002 bp    376,278,986 bp    
Genome Repeat Length          124,068,954 bp    124,385,633 bp    
Genome Unique Length          251,252,048 bp    251,893,353 bp    
Model Fit                     72.9102%          97.1951%          
Read Error Rate               0.279346%         0.279346%

在该文件中,会给出杂合度,基因组大小,重复片段长度等详细信息。

结果分为三列:

  • 第一列为统计指标;
  • 第二列为对应指标预测的最小值;
  • 第三列为对应指标预测的最大值

有疑问,可以对照模型进行检验。

2. transformed_linear_plot.png

Occasionally, it is difficult to determine whether a peak in the kmer spectrum is a major peak. For this reason, GenomeScope 2.0 analyzes a transformed k-mer spectrum, in which the heights of higher-order peaks are increased.

K-mer覆盖度-频数分布图如下:

21.p3_transformed_linear_plot.png
  • 蓝色柱子是实际观测值;
  • 黑色拟合线是除去被认为是错误的部分(橙红色拟合线部分)之后剩下的所有k-mer,这些被认为是可靠的kmer数据,只拿这部分数据来评估基因组的大小;
  • 黄色拟合线被认为来自基因组非重复区域的K-mer分布;
  • 橙红色拟合线部分对应着深度过低的kmer,这些kmer被认为是测序错误引入的;
  • 垂直的黑色虚线为预测最低深度峰的整倍数覆盖度;

kcov指的是杂合峰的覆盖度。可以看到使用数据预测K-mer最低深度峰在18.4X处。一般情况下杂合度大于1%就会存在一个高于主峰的杂合峰。

基因组越大,杂合度也大,重复片段越大,该物种的组装难度就越大。

讨论:
  基因组预测大小和参数 Max kmer coverage 密切相关。GenomeScope默认会过滤掉出现10,000次以上的kmers,避免细胞器基因组的影响,如果你觉得基因组小了,那么就把数值调整的大一点。

基因组survey介绍了如何通过jellyfish统计k-mer然后绘制k-mer分布图研究基因组的方法。

对于不同的基因组杂合度,kmer分布如下

image

Smudgeplot【染色体倍性鉴定】

  1. 识别smudge的边界;
  2. smudge过滤;
  3. 单倍体覆盖率的估计;
  • 首先,将二维空间划分为bins,计算每个bin中k-mer对的数量。

  • 然后,每个smudge的中心被选择为对应于局部极大值的bin(以k-mer对的数量表示)。 所有其他bin中的k-mer pairs被聚合到相邻最近的bin ( 该bin被指定为smudge中心 )。

一旦确定了每个smudge的边界,就过滤那些少于0.5%数据集的smudge(包含少于0.5%的k-mer对),因为这些通常代表基因组的重复结构,并且通常会由于表示它们的k-mer太少而被放错位置。

对于第一次估计单倍体覆盖度,我们先计算每个smudge的覆盖度,然后计算一个总体覆盖度作为这些smudge的加权平均值,其中权重是每个smudge内k-mer对的数目。

为了计算单个smudge的覆盖度,我们首先根据其假定结构对smudge进行标记。 例如,在所有相对较小的覆盖范围接近0.5的污迹中,假定覆盖范围最低的污迹是AB,而其他污迹则以AB污迹作为参考。 这一过程是继续的所有相关的次要覆盖的识别污点,直到所有污点被标记。

For example, of all the smudges with a relative minor coverage near 0.5, the one with the lowest sum of coverages is assumed to be AB and others are labeled using the AB smudge as a reference. This process is continued for all relative minor coverages of the identified smudges until all smudges are labeled.

Finally, the estimate of monoploid coverage for an individual smudge is given by its sum of coverages divided by the number of k-mers that make up its labeled structure. For example, the estimate for an AAB smudge would be CovA+CovB since three k-mers make up the AAB structure.

https://github.com/tbenavi1/genomescope2.0
http://www.cbcb.umd.edu/software/quake/faq.html

有关GenomeScope 2.0 评估基因组大小、杂合度和重复序列的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  3. ruby-on-rails - Ruby 中意外的大小写行为 - 2

    我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。

  4. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  5. ruby - 在 Ruby 中的另一个上下文中评估潜在的相对 URI - 2

    我在Ruby程序中有两个URI。一个肯定是绝对URI,另一个可能是绝对URI或相对URI。我想在第一个的上下文中将第二个转换为绝对URI,所以如果第一个是http://pupeno.com/blog第二个是/about,结果应该是http://pupeno.com/about.有什么想法吗? 最佳答案 Ruby的内置URI和Addressablegem,做这个简短的工作。我更喜欢Addressable,因为它功能更全面,但URI是内置的。require'uri'URI.join('http://pupeno.com/blog','/

  6. ruby - block 内的实例评估 - 2

    我有一个Builder类,可让您添加到其中一个实例变量:classBuilderdefinitialize@lines=[]enddeflinesblock_given??yield(self):@linesenddefadd_line(text)@lines现在,我该如何改变它my_builder=Builder.newmy_builder.lines{|b|b.add_line"foo"b.add_line"bar"}pmy_builder.lines#=>["foo","bar"]进入这个?my_builder=Builder.newmy_builder.lines{add_li

  7. ruby - 使用 autoload 与 ruby​​ 中的 require 进行惰性评估? - 2

    在我的代码中,我使用自动加载进行惰性评估,这样我可以更快地加载程序并在需要时加载文件,我没有看到很多人使用它,但在Thin项目中我注意到自动加载已被广泛使用,反正只是想知道使用它是否有任何风险。 最佳答案 autoload是notthreadsafe并将在未来的Ruby版本中弃用。这是proofbyMatz(ruby的创造者)。 关于ruby-使用autoload与ruby​​中的require进行惰性评估?,我们在StackOverflow上找到一个类似的问题:

  8. ruby - Sinatra:哈希的未定义方法字节大小 - 2

    很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我正在创建一个Sinatra应用程序,它采用上传的CSV文件并将其内容放入哈希中。当我像这样在我的app.rb中引用这个散列时:hash=extract_values(path_to_filename)我不断收到此错误消息:undefinedmethod`bytesize'forHash:0x007fc5e28f2b90#object_idfile:utils.rblocation:bytesiz

  9. ruby - 使2个数组大小相同 - 2

    2个数组的数组:a=[[1,2],[22,11],[18,9]]b=[[1,81]]用[0,0]填充第二个的最佳方法是什么,以便它们具有相同的大小? 最佳答案 b.fill(b.size..a.size-1){[0,0]} 关于ruby-使2个数组大小相同,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/29725615/

  10. ruby - 数组大小太大 - ruby - 2

    我收到“ArgumentError:数组大小太大”消息,代码如下:MAX_NUMBER=600_000_000my_array=Array.new(MAX_NUMBER)问题。Array.new函数在Ruby中的最大值是多少? 最佳答案 具有5亿个元素的数组的大小为2GiBytes,这取决于您使用的特定操作系统,通常是一个进程可以处理的最大值。换句话说:您的数组大于您的地址空间。因此,解决方案很明显:要么缩小数组(例如,将其分成block),要么扩大地址空间(在Linux中,您可以修补内核以获得3、3.5甚至4GiByte地址空间,

随机推荐