題:
如何模擬NGS讀取,控制序列覆蓋率?
SmallChess
2017-05-17 21:26:17 UTC
view on stackexchange narkive permalink

我有一個包含100多個序列的FASTA文件,如下所示:

  >Sequence1GTGCCTATTGCTACTAAAA ... >Sequence2GCAATGCAAGGAAGTGTGATGGCGGAAATAGCGTTA ......  

我也有像這樣的文本文件:

  Sequence1 40Sequence2 30 ......  

我想模擬所有的下一代配對末端讀取我的FASTA文件中的序列。對於 Sequence1 ,我想模擬40倍的覆蓋率。對於 Sequence2 ,我想模擬30倍的覆蓋率。換句話說,我想控制仿真中每個序列的序列覆蓋率。

問::最簡單的方法是什麼?我應該使用任何軟件嗎?生物導體?

[此評論](http://www.nature.com/nrg/journal/v17/n8/abs/nrg.2016.57.html)可能是一個很好的起點。它比較了23種NGS仿真工具,並提供了一個決策樹,用於根據您的需求選擇合適的工具。
您使用的讀取長度是多少?序列多長時間?您是否需要準確或有可能達到覆蓋目標?
聽起來就像您只需要使用Biopython模塊在十或二十行python中編寫代碼。
我會在greg的問題上再添加幾個問題。我知道您想模擬文件中模板序列的排序嗎?那麼序列代表基因組嗎?您想考慮放大偏差嗎?排序錯誤?您想模擬哪種測序平台?
九 答案:
H. Gourlé
2017-05-30 12:06:03 UTC
view on stackexchange narkive permalink

我正在開髮用於宏基因組學的Illumina測序模擬器: InSilicoSeq

它仍處於alpha發行階段,並且仍處於實驗階段,但考慮到它具有多個Fasta和一個豐度文件,

從文檔起:

  iss generate --genomes基因組.fasta-豐度abundance_file.txt \- model_file HiSeq2500-輸出HiSeq_reads  

其中:

 #多fasta文件>genome_AATGC ... >genome_BCCGT ......#冗余文件必須為1!)genome_A 0.2genome_B 0.4 ...  

我設計的功能不是覆蓋範圍大,而是元基因組中的基因組豐富,因此您可能需要做一個一點數學;)

Ian Sudbery
2017-05-18 13:57:06 UTC
view on stackexchange narkive permalink

聚酯生物導體包裝可以做到這一點。它說它模擬RNA-seq讀取,但是我不知道這是否與其他NGS讀取真正不同。

它可以使用一系列誤差和偏差模型,或者從數據集中學習它們。

您能對此進行一點擴展嗎? OP將如何在其文件上使用它?誤差和偏差範圍是多少?我們將如何使用它們?使用合理的默認值是什麼?也許一個最小的工作示例會有所幫助。
Kamil S Jaron
2017-05-18 22:32:11 UTC
view on stackexchange narkive permalink

此python腳本採用帶計數的fasta文件和tsv文件,並在fasta文件中打印序列,次數是tsv文件中指定的次數(假設問題的格式)。因此,如果 bar.tsv foo.fasta 將是您的文件:

 來自Bio import SeqIOrepeat = {},用於打開行( “ bar.tsv”):seq_id,coverage = line.split()repeat [seq_id] = int(coverage)for SeqIO.parse(foo.fasta,“ fasta”)中的seq_record:適用於範圍內的我(repeat.get( seq_record.name,0)):print(“ >”,seq_record.name,“ _”,i,sep ='')print(seq_record.seq) 
您能解釋一下它的作用和作用嗎?看來您將只是打印原始序列$ coverage時間,而這是不正確的。 OP需要模擬讀取,而不僅僅是重複相同的序列N次。
哎呀,那我誤解了這個問題。雖然該序列是應該模擬的讀取,並且橫向為40x,但我希望此序列具有40次。我編輯了答案,至少避免了混淆。
我不知道你是不是誤會了,還是我誤會了。但是我們中的一個做到了:)感謝您的編輯,至少現在OP可以看到它的作用並自行決定。
Daniel Standage
2017-05-23 00:13:50 UTC
view on stackexchange narkive permalink

Heng Li(BWA和samtools出名)的 wgsim軟件包是我用來模擬Illumina讀取的工具。它沒有提供任何方便的方法來模擬不同序列之間的差異覆蓋,但是,應該不難多次運行wgsim,從而為每個感興趣的序列生成所需的覆蓋水平。

I會實現一個Python腳本來處理您的測試文件,並為每個序列調用wgsim(使用 subprocess 模塊)。這可能需要您將每個序列放在單獨的文件中。 :-(

您能否通過添加一個示例命令來擴展此功能,該示例命令顯示如何獲取輸入的fasta文件並生成fastq?感覺比找到答案更像(有用的)指導,可以找到答案。
Gabriel Renaud
2017-05-17 21:36:37 UTC
view on stackexchange narkive permalink

我不知道有任何軟件可以直接執行此操作,但是我會將fasta文件拆分為每個文件一個序列,在BASH中對其進行循環,然後在每個序列上調用ART(或另一個)序列模擬器。

您能對此進行擴展嗎?在這種狀態下,這確實不是一個非常有用的答案。什麼是藝術?在哪裡可以找到它?如何使用?物聯網如何工作?它會引入錯誤嗎?我們可以控制錯誤率嗎?另外,它真的不佔用multifasta文件嗎?如果沒有,在bash中循環數千個文件將非常非常慢。可能有更好的方法。
>什麼是藝術?很難定義,我想說這是與視覺或聽覺產品作品有關的各種活動,旨在外部化作者的內心...哦,您是說序列模擬器嗎?請在這裡查看他們的論文:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3278762/>我在哪裡可以找到它?參見論文>如何使用?閱讀手冊>物聯網如何工作?閱讀論文。>它會引入錯誤嗎?閱讀紙張/手冊我們可以控制錯誤率嗎?看紙。
>此外,它真的不接受multifasta文件嗎?如果沒有,在bash中循環數千個文件將非常非常慢。可能會有更好的方法在哪裡有人指出不需要多齋戒? OP希望每個Fasta記錄都有非常具體的覆蓋範圍。
不,我不是要向我解釋。我的意思是請編輯您的答案,以便它提供此信息。我們嘗試使答案盡可能完整和書面,以使它們可以獨立存在,而無需外部注意在Stack Exchange網站上。評論很難閱讀,容易遺漏,導致生物之星陷入混亂,您根本不知道實際答案在哪裡。請編輯您的問題以澄清。
你的回答,我的意思是。抱歉。
Greg
2017-05-17 22:55:25 UTC
view on stackexchange narkive permalink

如果可以接受某些隨機性,則可以使用Poisson隨機變量從序列文件中生成讀數。您需要做一些數學運算以確定要使用的lambda值,以使讀取的每個鹼基對的預期覆蓋率與您在文本文件中設置的值相匹配。

例如序列S的長度為1,000,讀取長度為50,插入大小為100。對於S中的每個鹼基b,都產生一個Poisson隨機變量p。然後,您將從基數b到b + 50生成p個讀數。然後,從b + 50 + 100開始生成配對的讀數。

同樣,您必須使用它來弄清楚要使用的lambda,但這將基本為您提供所需的內容,只要您可以確定要定位的範圍是否完全正確每次閱讀。

而且,從類似泊松分佈的分佈中模擬插入距離也將更加現實!問題是這是自行車的重塑。有很多模擬工具。
從正態分佈中拉出來的插入大小會更好嗎?是的,我知道有很多工具,但是如果您有興趣的話,這將是您自己做的一種方法。
根據我的經驗,法線貼合不太靈活-密度偏斜,例如http://bioinformatics.ucdavis.edu/docs/2016-june-workshop/_images/picard-insertion-size-histogram.png。因此,負二項式可能是一個不錯的選擇,但我從未嘗試過使其適合實際的刀片尺寸密度...
Karel Brinda
2017-06-21 19:46:49 UTC
view on stackexchange narkive permalink

使用 RNFtools(版本0.3.1起),可以輕鬆地在控制序列覆蓋率的同時模擬NGS讀數。請參閱指南,特別是序列提取部分。

環境準備

首先,安裝 BioConda並添加所需的頻道。然後要么在默認的Conda環境中安裝RNFtools

  conda install rnftools  

,要么創建並激活一個單獨的Conda環境(首選)

  conda create -n rnftools rnftoolssource激活rnftools  

模擬

假設您有一個參考文件 ref.fa 和一個製表符分隔的覆蓋文件 coverage.tsv (例如,您示例中的參考文件) 。然後,以下RNFtools 將完成您想要的工作:

  import rnftoolsimport csvrnftools.mishmash.sample(“ simulation_with_coverage_control” ,reads_in_tuple = 1)fa =“ ref.fa” tsv =“ coverage.tsv”,其中open(tsv)為f:seqname的表= csv.reader(f,delimiter ='\ t'),表中的cov:rnftools .mishmash.DwgSim(fasta = fa,sequence = [seqname],coverage = float(cov),read_length_1 = 10,#使用超短讀取的快速測試read_length_2 = 0,)包括:rnftools.include()規則:輸入:rnftools。 input() 

保存此文件()並運行 snakemake 時,RNFtools將使用DWGsim模擬讀取,並定義覆蓋範圍您的文本文件,並將所有模擬的讀數保存在 simulation_with_coverage_control.fq 中。

您可以使用所有參數。特別是,您可以使用其他模擬器(例如,使用 rnftools.mishmash.ArtIllumina 的Art-Illumina)。有關更多信息,請參見 RNFtools文檔

winni2k
2017-06-12 01:27:23 UTC
view on stackexchange narkive permalink

另一種下一代讀取模擬工具是 gemsim。我還沒有測試過,但是如果有人有任何經驗,我會很感興趣。

Karel Brinda
2017-05-30 00:46:25 UTC
view on stackexchange narkive permalink

您可以使用

  split -a 6 -p'^ >'your_file.fa seq _  

來按順序拆分FASTA文件。然後使用支持覆蓋率的任何現有讀取模擬器(ART,DWGsim等)。如果要混合所有讀取(而不是按原始順序排序),則可以使用RNFtools。

編輯1:

為@terdon指出,先前的命令僅適用於OSX。一個類似的Linux襯板(但使用數字而不是字母的命名方案略有不同)可以

  csplit -f seq_ -n 6 your_file.fa'/ ^ > /'{* }  

要使此命令也能在OS X上運行,需要安裝coreutils(例如,使用brew),然後使用 gcsplit 而不是 csplit

編輯2:

一旦FASTA被序列分割,模擬變得簡單明了,可以使用許多不同的方法。我最喜歡的是使用GNU Parallel。想像一下,您將覆蓋範圍放在名為 covs.txt 的文本文件中的不同行上,並且其順序與 your_file.fa 中的序列相同,例如

  4030 ...  

然後,您可以使用DWGsim通過以下方式模擬原始序列的讀取:

  ls -1 seq_ * |粘貼covs.txt-\ |並行-v --colsep'\ t'dwgsim -1 100 -2 100 -C {1} {2} sim_ {2}  

並使用以下命令合併獲得的FASTQ文件:

  cat sim_seq _ *。bwa.read1.fastq >讀取1.fqcat sim_seq _ *。bwa.read2.fastq >讀取2.fq  

一個可能這種方法的危險在於,我們假設seq_ *文件的數量與 covs.txt 中的行數相同,這可能不是正確的(錯誤地)。我們應該在仿真步驟之前進行檢查,例如:

  [[“” $(ls -1 seq_ * | wc -l)“ ==”“ $(cat covs.txt | wc -l)“]] \ ||迴聲“ covs.txt中的行數不正確”  

另一個需要注意的是,模擬讀段不是隨機排列的(按源序列分組)。

恐怕您沒有回答這個問題。首先,您正在使用非標準的“ sort”選項。我假設您使用的是Mac? -p是僅BSD選項,在其他* nix系統AFAIK中不可用。話雖如此,雖然這可能會在MacOS系統上分割文件,但分割起來很簡單,並且有很多很多方法可以這樣做。困難的是模擬讀取,您實際上並沒有在解釋OP如何做到這一點。
感謝您的修改。但是,這裡的主要問題是您的答案沒有回答所提出的問題。您正在回答“如何將multifasta文件拆分為許多單序列文件”,但問題是關於模擬讀取。分割文件可能是答案的一部分,也可能不是答案,但這當然不是答案。
哦,以一種可移植的方式而無需使用任何專門的工具,您可以使用`awk`。類似於`awk -vRS =“>” -F'\ n''NR> 1 {print“>” $ 0 >> $ 1“ .fa”}'file.fa`。不過,您的`csplit`(和`split`)方法確實更簡單。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...