Soru:
Sekans kapsamını kontrol ederek NGS okumalarını nasıl simüle edebilirim?
SmallChess
2017-05-17 21:26:17 UTC
view on stackexchange narkive permalink

Bunun gibi 100'den fazla diziye sahip bir FASTA dosyam var:

  >Sequence1GTGCCTATTGCTACTAAAA ... >Sequence2GCAATGCAAGGAAGTGATGGCGGAAATAGCGTTA ......  

I de bunun gibi bir metin dosyası:

  Sequence1 40Sequence2 30 ......  

Tümü için yeni nesil çift uçlu okumaları simüle etmek istiyorum FASTA dosyamdaki diziler. Sıra1 için, 40x kapsama simülasyonu yapmak istiyorum. Sıra2 için 30x kapsama simülasyonu yapmak istiyorum. Diğer bir deyişle, simülasyonumdaki her sekans için sekans kapsamımı kontrol etmek istiyorum.

S: Bunu yapmanın en basit yolu nedir? Kullanmam gereken herhangi bir yazılım var mı? Biyoiletken mi?

[Bu inceleme] (http://www.nature.com/nrg/journal/v17/n8/abs/nrg.2016.57.html) iyi bir başlangıç ​​noktası olabilir. 23 NGS simülasyon aracını karşılaştırır ve ihtiyaçlarınıza göre uygun bir araç seçmek için bir karar ağacı sağlar.
Kullandığınız okuma uzunluğu nedir? Diziler ne kadar uzun? Kapsama hedefine tam olarak mı yoksa bir olasılıkla mı ulaşmanız gerekiyor?
Biopython modülü ile on veya yirmi satır python kodlayacağınız bir şeye benziyor.
Greg's'e birkaç soru daha eklerdim. Dosyadan şablon dizisinin sıralanmasını simüle etmek istediğinizi doğru anlıyor muyum? Öyleyse diziler genomları mı temsil ediyor? Amplifikasyon önyargısını düşünmek ister misiniz? Sıralama hataları? Hangi sıralama platformunu simüle etmek istersiniz?
Dokuz yanıtlar:
#1
+6
H. Gourlé
2017-05-30 12:06:03 UTC
view on stackexchange narkive permalink

Metagenomik için bir Illumina sıralama simülatörü üzerinde çalışıyorum: InSilicoSeq

Hala alfa sürümünde ve çok deneysel, ancak bir multi-fasta ve bir bolluk dosyası verildiğinde, giriş genomlarınızdan farklı kapsamlarla okumalar üretecektir.

Dokümantasyondan:

  iss oluştur --genomes genomes.fasta --abundance bolance_file.txt \ - model_file HiSeq2500 --output HiSeq_reads  

Nerede:

  # multi-fasta dosyası>genome_AATGC ... >genome_BCCGT ...... # bolluk dosyası (toplam bolluk 1 olmalı!) genom_A 0.2 genom_B 0.4 ...  

Ben onu kapsama alanıyla çalışacak şekilde tasarlamadım, daha ziyade bir metagenomdaki genom bolluğu, bu yüzden bir biraz matematik;)

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

Polyester biyoiletken paketi bunu yapabilir. RNA-seq okumalarını simüle ettiğini söylüyor, ancak bunun diğer NGS okumalarından gerçekten farklı olup olmadığını bilmiyorum.

Bir dizi hata ve önyargı modeli kullanabilir veya bunları bir veri kümesinden öğrenebilir.

Bunu biraz açabilir misin? OP bunu dosyalarında nasıl kullanır? Ne tür bir hata ve önyargı? Onları nasıl kullanacağız? Kullanmak için makul bir varsayılan ne olurdu? Belki asgari düzeyde çalışan bir örnek yardımcı olabilir.
#3
+4
Kamil S Jaron
2017-05-18 22:32:11 UTC
view on stackexchange narkive permalink

Bu python komut dosyası, bir fasta dosyasını ve sayımları olan tsv dosyasını alır ve fasta dosyalarındaki dizileri, tsv dosyasında belirtildiği gibi (sorudaki biçim varsayılarak) birçok kez yazdırır. Dolayısıyla, bar.tsv ve foo.fasta dosyalarınız olacaksa:

  Bio import SeqIOrepeat = {} açık satır için ( "bar.tsv"): seq_id, kapsam = line.split () tekrar [seq_id] = int (kapsam) SeqIO.parse (foo.fasta, "fasta") içinde seq_record için: aralıktaki i için (tekrar.get ( seq_record.name, 0)): print (">", seq_record.name, "_", i, sep = '') print (seq_record.seq)  
Bunun ne yaptığını ve nasıl çalıştığını açıklayabilir misiniz? Görünüşe göre orijinal dizisi $ kapsama sürelerini yazdıracaksınız ve bu doğru olamaz. OP'nin okumaları simüle etmesi gerekir, sadece aynı sırayı N kez tekrarlamaz.
Ouch, o zaman soruyu yanlış anladım. Dizilerin simüle edilmesi gereken okumalar olduğunu ve 40x'in yanlamasına olduğunu düşündüm, bu diziyi 40 kez yapmak istiyorum. En azından kafa karışıklığını önlemek için cevabı düzenledim.
Yanlış anladın mı bilmiyorum ya da ben yaptım. Ama birimiz yaptı :) Düzenleme için teşekkürler, en azından şimdi OP bunun ne yaptığını görebilir ve kendisi karar verebilir.
#4
+4
Daniel Standage
2017-05-23 00:13:50 UTC
view on stackexchange narkive permalink

Heng Li'nin (BWA ve samtools şöhretinden) wgsim paketi Illumina okumalarını simüle etmek için başvurduğum araç. Farklı diziler arasında farklı kapsamı simüle etmenin uygun bir yolunu sağlamaz, ancak wgsim'i birden çok kez çalıştırarak her ilgi dizisi için istenen kapsam düzeyini oluşturmak zor olmamalıdır.

I test dosyanızı bulandırmak için bir Python betiği uygular ve her sıra için wgsim'i ( alt işlem modülünü kullanarak) çağırır. Bu muhtemelen her diziyi ayrı bir dosyada bulundurmanızı gerektirecektir. :-(

Bir girdi fasta dosyasının nasıl alınacağını ve fastq'nin nasıl üretileceğini gösteren örnek bir komut ekleyerek bunu genişletebilir misiniz? Bu, bir cevaptan çok bir cevabın nerede bulunabileceğine dair (faydalı) talimatlar gibi geliyor.
#5
+2
Gabriel Renaud
2017-05-17 21:36:37 UTC
view on stackexchange narkive permalink

Bunu doğrudan yapabilen herhangi bir yazılımın farkında değilim, ancak fasta dosyasını dosya başına bir diziye bölerim, BASH'de bunların üzerinde döngü oluşturur ve her dizide sıra simülatörünü (veya başka) ART çalıştırırdım.

Bunu genişletebilir misin? Bu durumda bu gerçekten çok kullanışlı bir cevap değil. Sanat nedir? Nereden bulabilirim? Bunu nasıl kullanabilirim? İot nasıl çalışır? Hatalara neden olur mu? Hata oranını kontrol edebilir miyiz? Ayrıca, gerçekten multifasta dosyalarını almıyor mu? Değilse, bash'ta birkaç binden fazla dosyanın döngüsü çok, çok yavaş olacaktır. Daha iyi yollar olabilir.
> ART nedir? Tanımlamak zor, yazarın içini dışsallaştırmayı amaçlayan görsel ya da işitsel ürünler üretmeye yönelik çeşitli etkinlikler olduğunu söyleyebilirim ... Peki dizi simülatörünü mü kastediyorsunuz? Lütfen buradaki makalelerine bakın: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3278762/> Nerede bulabilirim? kağıda bakın> Nasıl kullanırım? kılavuzu okuyun> iot nasıl çalışır? kağıt okuyun.> Hatalara neden olur mu? kağıt / kılavuz okuyun Hata oranını kontrol edebilir miyiz? kağıt okuyun.
> Ayrıca, gerçekten multifasta dosyalarını almıyor mu? Değilse, bash'ta birkaç binden fazla dosyanın döngüsü çok, çok yavaş olacaktır. Daha iyi yollar olabilir Herhangi biri multifasta almadığını nerede söyledi? OP, fasta kaydı başına çok özel bir kapsam istedi.
Hayır, bunu bana açıklamak istemedim. Demek istediğim, lütfen yanıtınızı bu bilgiyi sağlayacak şekilde düzenleyin. Yığın Exchange sitelerinde harici referanslar olmadan tek başlarına ayakta kalabilmeleri için mümkün olduğunca kapsamlı ve yazılı yanıtlar almaya çalışıyoruz. Yorumların okunması zor, gözden kaçması kolay ve gerçek cevabın nerede olduğu hakkında hiçbir fikrinizin olmadığı korkunç bistar karmaşasıyla sonuçlanıyor. Lütfen açıklığa kavuşturmak için sorunuzu düzenleyin.
Cevabını kastettim. Afedersiniz.
#6
+2
Greg
2017-05-17 22:55:25 UTC
view on stackexchange narkive permalink

Biraz rastgelelikten memnunsanız, Poisson rasgele değişkeni kullanarak sıra dosyanızdan okumalar üretebilirsiniz. Okumanızdaki her bir baz çiftinde beklenen kapsamın metin dosyanızda belirlediğinizle eşleşmesini sağlamak için hangi lambda değerini kullanacağınızı bulmak için biraz matematik yapmanız gerekir.

Örneğin siz 1000 uzunluğunda bir S dizisine, 50 okuma uzunluğuna ve 100'lük bir ekleme boyutuna sahiptir. S'deki her b tabanı için bir Poisson rastgele değişkeni p üretir. Daha sonra b tabanından b + 50'ye kadar ped okumaları üreteceksiniz. Ardından, b + 50 + 100'den başlayarak eşleştirilmiş okumayı oluşturun.

Yine, hangi lambda'yı kullanacağınızı bulmak için onunla oynamak zorunda kalacaksınız, ancak bu, tam olarak hedeflediğiniz kapsama sahip olmadığınız sürece temelde size istediğiniz şeyi verecektir. her okuma için.

Ayrıca, Poisson benzeri dağılımdan ara mesafe simülasyonu yapmak daha gerçekçi olacaktır! Mesele şu ki, bu bir çevre parçasının yeniden icadı. Çok sayıda simülasyon aracı var.
Ekleme boyutu için normal bir dağılımdan çekmek daha iyi olmaz mıydı? Ve evet, çok sayıda araç olduğunu biliyorum, ancak ilgilenirseniz bunu kendiniz yapmanın bir yolu olurdu.
deneyimlerime göre, normal, uydurma için biraz daha az esnektir - yoğunluk çarpıktır, örneğin http://bioinformatics.ucdavis.edu/docs/2016-june-workshop/_images/picard-insertion-size-histogram.png. Muhtemelen Negatif Binom iyi bir seçim olacaktır, ancak onu gerçek kesici uç boyutu yoğunluklarına uydurmaya hiç çalışmadım ...
#7
+1
Karel Brinda
2017-06-21 19:46:49 UTC
view on stackexchange narkive permalink

Sekans kapsamını kontrol ederken NGS okumalarını simüle etmek, RNFtools (0.3.1 sürümünden itibaren) ile artık çok kolay. eğiticiye, özellikle Sıra çıkarma bölümüne bakın.

Ortama hazırlık

Önce, BioConda ve gerekli kanalları ekleyin. Sonra ya RNFtools'u varsayılan Conda ortamına kurun

  conda install rnftools  

veya ayrı bir Conda oluşturup etkinleştirin ortam (tercih edilir)

  conda create -n rnftools rnftoolssource enable rnftools  

Simülasyon

Bir referans dosyanız ref.fa ve sekmeyle ayrılmış bir kapsam dosyanız kapsam.tsv (örneğin, sizin örneğinizdekiler) olduğunu varsayalım . Ardından, aşağıdaki RNFtools Snakefile istediğiniz işi yapacaktır:

  rnftoolsimport csvrnftools.mishmash.sample ("simülasyon_with_coverage_control" , reads_in_tuple = 1) fa = "ref.fa" tsv = "kapsam.tsv", f: tablo = csv.reader (f, sınırlayıcı = '\ t') olarak open (tsv) ile sıra adı için, tablodaki cov: rnftools .mishmash.DwgSim (fasta = fa, sequences = [seqname], kapsama = float (cov), read_length_1 = 10, # supershort okuma ile hızlı test read_length_2 = 0,) include: rnftools.include () kural: girdi: rnftools. input ()  

Bu dosyayı ( Snakefile ) kaydedip snakemake 'i çalıştırdığınızda, RNFtools, tanımlanmış kapsamlarla DWGsim kullanarak okumaları simüle eder metin dosyanız ve tüm simüle edilmiş okumaları simulation_with_coverage_control.fq içine kaydedin.

Tüm parametrelerle oynayabilirsiniz. Özellikle, farklı bir simülatör kullanabilirsiniz (örneğin, rnftools.mishmash.ArtIllumina kullanarak Art-Illumina). Daha fazla bilgi için RNFtools belgelerine bakın.

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

Diğer bir yeni nesil okuma simülasyon aracı gemsim. Test etmedim, ancak bununla herhangi bir deneyimi olan biri olsaydı ilgilenirdim.

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

FAŞTA dosyanızı sırayla

  split -a 6 -p '^ >' your_file.fa seq_  
kullanarak bölebilirsiniz.

ve ardından kapsamı destekleyen mevcut herhangi bir okuma simülatörünü kullanın (ART, DWGsim, vb.). Tüm okumaların karıştırılmasını istiyorsanız (orijinal sıraya göre sıralanmamış), RNF araçlarını kullanabilirsiniz.

Edit 1:

As @terdon belirtildiği gibi, önceki komut yalnızca OS X'te çalışır. Linux için benzer bir tek satırlık (ancak harf yerine rakamların kullanıldığı biraz farklı bir adlandırma şemasına sahip)

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

Bu komutun OS X'te de çalışması için, coreutils'in yüklenmesi (ör. brew kullanılarak) ve ardından csplit yerine gcsplit kullanılması gerekir .

Düzenleme 2:

FAŞTA dizilere bölündüğünde simülasyon basitleşir ve birçok farklı yaklaşım kullanılabilir. Benim favorim GNU Parallel kullanıyor. Kaplamalarınızın ayrı satırlarda covs.txt adlı bir metin dosyasında ve your_file.fa dizileriyle aynı sırada, örneğin

4030...

Daha sonra DWGsim kullanarak orijinal dizilerden okumaların simülasyonunu

  ls -1 seq_ * | covs.txt yapıştır - \ | paralel -v --colsep '\ t' dwgsim -1 100-2 100 -C {1} {2} sim_ {2}  

ve elde edilen FASTQ dosyalarını kullanarak birleştirin:

  cat sim_seq _ *. bwa.read1.fastq > okur.1.fqcat sim_seq _ *. bwa.read2.fastq > okur.2.fq  

Bir olasılık Bu yaklaşımın tehlikesi, seq_ * dosyalarının sayısının covs.txt içindeki satır sayısıyla aynı olduğunu varsaymamızdır, bu doğru olmayabilir (yanlışlıkla). Bunu simülasyon adımından önce kontrol etmeliyiz, örneğin:

  [["$ (ls -1 seq_ * | wc -l)" == "$ (cat covs.txt | wc -l) "]] \ || echo "covs.txt'de yanlış satır sayısı"  

Diğer bir uyarı, simüle edilmiş okumaların rastgele bir sırada olmamasıdır (kaynak sıralarına göre gruplandırılmışlardır).

Korkarım soruyu cevaplamıyorsun. Her şeyden önce, standart olmayan "sıralama" seçeneklerini kullanıyorsunuz. Mac kullandığınızı varsayıyorum? "-P" yalnızca BSD'ye yönelik bir seçenektir ve diğer * nix sistemleri AFAIK'te mevcut değildir. Bununla birlikte, bu muhtemelen dosyayı bir MacOS sisteminde bölmek için çalışacak olsa da, bölmek önemsizdir ve bunu yapmanın birçok yolu vardır. İşin zor kısmı okumaları simüle etmektir ve aslında OP'nin bunu nasıl yapabileceğini açıklamıyorsunuz.
Düzenleme için teşekkürler. Ancak buradaki asıl mesele, cevabınızın sorulan soruyu cevaplamamasıdır. "Bir multifasta dosyasını birçok tek sıralı dosyaya nasıl bölebilirim" diye yanıtlıyorsunuz, ancak soru okumaları simüle etmekle ilgili. Dosyayı bölmek bir cevabın * parçası * olabilir ya da olmayabilir, ama kesinlikle bir cevap değildir.
Oh, ve bunun için pek çok özel araç kullanmadan taşınabilir bir yol için,'awk 'kullanabilirsiniz. ʻAwk -vRS = ">" -F '\ n' 'NR> 1 {baskı ">" $ 0 >> $ 1 ".fa"}' dosya.fa` gibi bir şey. "Csplit" (ve "bölünmüş") yaklaşımınız gerçekten de daha basit.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...