Frage:
Gibt es eine einfache Möglichkeit, eine Zusammenfassung einer VCF-Datei (v4.1) mit strukturellen Variationen zu erstellen?
Kamil S Jaron
2017-05-29 02:40:14 UTC
view on stackexchange narkive permalink

Ich habe eine Reihe von VCF-Dateien (v4.1) mit strukturellen Variationen einer Reihe von Nichtmodellorganismen erhalten (d. h. es sind keine Varianten bekannt). Ich fand heraus, dass es einige Tools gibt, mit denen man VCF-Dateien wie VCFtools, R-Paket vcfR oder Python-Bibliothek PyVCF bearbeiten kann. Keiner von ihnen scheint jedoch eine kurze Zusammenfassung zu liefern, etwa (vorzugsweise auch nach Größe kategorisiert):

  Typ countDEL xINS yINV z ....  

Gibt es ein Tool oder eine Funktion, die ich übersehen habe und die Zusammenfassungen dieses Stils erstellt?

Ich weiß, dass die VCF-Datei nur eine Nur-Text-Datei ist und ob ich REF und sezieren werde ALT -Spalten Ich sollte in der Lage sein, ein Skript zu schreiben, das die Arbeit erledigt, aber ich hoffte, dass ich es vermeiden könnte, meinen eigenen Parser zu schreiben.

--- edit ---

Bisher scheint es, dass nur das Tool, das Zusammenfassungen erstellen soll (@ gringer-Antwort), nicht mit vcf v4.1 funktioniert. Andere Tools bieten nur eine Teillösung, indem sie bestimmte Variantentypen filtern. Daher akzeptiere ich meine eigenen Parser-Perl / R-Lösungen, bis es ein funktionierendes Tool für Statistiken von vcf mit Strukturvarianten gibt. P. >

Welche Art von Zusammenfassung suchen Sie? Nur Rohzählungen (Anzahl der Einfügungen / Löschungen)? Ich bin nur neugierig, da ich persönlich denke, dass es mich interessieren würde, wie sich diese Variation tatsächlich räumlich entlang eines Genoms / Contigs / einer Sequenz ausbreitet. Wäre das für Sie von Interesse?
Ich vergleiche einige relative Arten. Ich habe jedoch noch keine homologen Regionen identifiziert (die Annotation befindet sich derzeit im Aufbau), daher ist die Positionierung von SVs derzeit nicht sehr relevant. Was ich jedoch bereits tun kann, ist einen Blick darauf zu werfen, ob es mindestens einen Unterschied in der Anzahl / Größe der SVs zwischen den Arten gibt.
Vielleicht wäre es sogar besser als eine Zusammenfassung, den SV-Typ und seine Größe für jeden SV-Anruf zu ermitteln. Dann könnte ich eine Zusammenfassung in R trivial machen.
Sie haben dies wahrscheinlich bereits gesehen, aber "vcftools" hat ein Geschwister namens "bcftools", das [eine Abfragefunktion, mit der Benutzer eine VCF / BCF abfragen können, um Felder und Informationen abzurufen und ihr eigenes Format auszugeben] (https) : //samtools.github.io/bcftools/bcftools-man.html#query). Es macht möglicherweise nicht genau das, was Sie wollen, bringt Sie aber möglicherweise sehr nahe (genug, um möglicherweise nur eine kleine Nachbearbeitung in R zu benötigen?).
Großartig, das klingt vielversprechend. Ich werde mal schauen.
Fünf antworten:
#1
+8
gringer
2017-05-29 10:16:36 UTC
view on stackexchange narkive permalink

Laut der Manpage bcftools können Statistiken mit dem Befehl bcftools stats erstellt werden. Wenn Sie dies selbst ausführen, sehen die Statistiken wie folgt aus:

  # Diese Datei wurde von bcftools stats (1.2-187-g1a55e45 + htslib-1.2.1-256-ga356746) erstellt. und kann mit plot-vcfstats geplottet werden. # Die Befehlszeile lautete: bcftools stats OVLNormalised_STARout_KCCG_called.vcf.gz , Zusammenfassungsnummern: # SN [2] id [3] key [4] valueSN 0 Anzahl der Abtastwerte: 108SN 0 Anzahl der Datensätze: 333SN 0 Anzahl der No-ALTs: 0SN 0 Anzahl der SNPs: 313SN 0 Anzahl der MNPs: 0SN 0 Anzahl Indels: 20SN 0 Anzahl anderer: 0SN 0 Anzahl Multiallel-Sites: 0SN 0 Anzahl Multiallel-SNP-Sites: 0 # TSTV, Übergänge / Transversionen: # TSTV [2] id [3] ts [4] tv [5 ] ts / tv [6] ts (1. ALT) [7] tv (1. ALT) [8] ts / tv (1. ALT) TSTV 0 302 11 27,45 302 11 27,45 # SiS, Singleton-Statistiken: ... # IDD, InDel-Verteilung: # IDD [2] id [3] Länge (deleti ons negativ) [4] countIDD 0 -9 1IDD 0 -2 4IDD 0 -1 6IDD 0 1 4IDD 0 2 1IDD 0 3 3IDD 0 4 1 # ST, Substitutionstypen: # ST [2] id [3] Typ [4] countST 0 A>C 2ST 0 A>G 78ST 0 A>T 2ST 0 C>A 5ST 0 C>G 0ST 0 C>T 66ST 0 G>A 67ST 0 G>C 0ST 0 G>T 1ST 0 T>A 1ST 0 T>C 91ST 0 T>G 0 # DP, DP Tiefenverteilung # [2] ID [3 ] bin [4] Anzahl der Genotypen [5] Anteil der Genotypen (%) [6] Anzahl der Stellen [7] Anteil der Stellen (%) DP 0 >500 0 0,000000 333 100,000000  
Ich mache fast genau das, was ich gerne sehen würde. Aber es ist anscheinend nicht für SNVs gemacht, SVs. Haltepunkte wurden falsch als Indels bezeichnet.
Es kommentiert, was explizit in der VCF-Datei enthalten ist, und das sind SNVs (und INDELs). Wenn Sie eine Strukturvariantenanalyse wünschen (d. H. In größerem Maßstab als einzelne Nukleotide), müssen Sie etwas verwenden, das mehr als eine Zusammenfassung der VCF-Datei bewirkt. Inversionen, groß angelegte Löschvorgänge und Haltepunkte gehören nicht zum "Standard" -VCF-Format.
Sie sind Teil von 4.1. Es wird in der Dokumentation beschrieben: https://samtools.github.io/hts-specs/VCFv4.1.pdf
Richtig, ich verstehe. Ich denke, das macht es dann zu einem bcftools-Fehler: https: //github.com/samtools/bcftools/issues
Ok, bestätigt: bcftools unterstützt KEINE Strukturvarianten https://github.com/samtools/bcftools/issues/623
#2
+6
Kamil S Jaron
2017-05-29 11:22:59 UTC
view on stackexchange narkive permalink

Die "mein eigener Parser" -Lösungen. Die Informationen, nach denen ich in einem Teil der Spalte INFO gesucht habe, nämlich in den Variablen SVLEN und SVTYPE .

sehr schnelle SV Typen + Anzahl (von @ user172818 in commnent):

  zcat var.vcf.gz | perl -ne 'print "$ 1 \ n" if / [; \ t] SVTYPE = ([^; \ t] +) /' | sortieren | uniq -c  

ziemlich langsame SV-Typen + Anzahl + Größen:

  SV_colnames <c ('CHROM', 'POS', 'ID', 'REF', 'ALT', 'QUAL', 'FILTER', 'INFO', 'FORMAT', 'SAMPLE1') ssplit <- Funktion (s, split = '=') {unlist (strsplit (s, split =) split))} # Hinweis: Großbuchstaben berücksichtigen nur die ursprünglichen Namenskonventionen der VCF-FilegetSVTYPE-<-Funktion (info) {ssplit (grep ("SVTYPE", info, value = T)) [2]} getSVLEN <-Funktion (info ) {SVLEN <-ssplit (grep ("SVLEN", info, value = T)) ifelse (Länge (SVLEN) == 0, NA, as.numeric (SVLEN [2]))} load_sv <-Funktion (Datei) {vcf_sv_table <- read.table (Datei, stringsAsFactors = F) COLNAMES (vcf_sv_table) <- SV_colnames # möglich Filterung # vcf_sv_table <- vcf_sv_table [vcf_sv_table $ FILTER == 'PASS'] vcf_sv_table_info <- strsplit (vcf_sv_table $ INFO " ; ') vcf_sv_table $ SVTYPE <-unlist (lapply (vcf_sv_table_info, getSVTYP) E)) vcf_sv_table $ SVLEN <-unlist (lapply (vcf_sv_table_info, getSVLEN)) return (vcf_sv_table)} sv_df <- load_sv ('my_sv_c)
Wenn Sie nur SVTYPE zählen möchten, ist diese Befehlszeile schneller: `zcat var.vcf.gz | perl -ne 'print "$ 1 \ n" if / [; \ t] SVTYPE = ([^; \ t] +) /' | sortieren | uniq -c`. SV-Dateien sind winzig, daher ist Ihr Rscript in Ordnung, aber im Allgemeinen ist R für die Textverarbeitung sehr langsam. Perl / Python / etc wird bevorzugt, wenn Sie mit großen VCFs arbeiten.
Die R-Lösung lässt Türen offen für zusätzliches Spielen mit Länge / Position / SV-Typ, aber Sie haben definitiv Recht mit der Leistung.
#3
+2
eastafri
2017-05-29 10:23:32 UTC
view on stackexchange narkive permalink

Vielleicht möchten Sie Bio-VCF ausprobieren. Aus der Beschreibung des Autors

Bio-vcf ist ein VCF-Parser, Filter und Konverter der neuen Generation. Bio-vcf ist nicht nur sehr schnell für genomweite (WGS) Daten, es verfügt auch über eine wirklich schöne Filter-, Auswertungs- und Umschreibesprache und kann jede Art von Textdaten ausgeben, einschließlich VCF-Header und Inhalt in RDF und JSON.

Außerdem ist es ein sehr schneller Parser. Das Umschreiben von DSL kann Ihnen dabei helfen, Ihre Filterung und Anforderungen anzupassen.

Hat Bio-vcf eine Funktionalität für strukturelle Variationen, wie vom OP angefordert? Ein schneller Scan der GitHub-Seite zeigt nichts. Während viele dieser Tools zum Filtern von SNVs und kurzen Indels nützlich sind, können die meisten für SVs nichts Wertvolles tun.
#4
+2
Medhat Helmy
2019-09-17 01:19:02 UTC
view on stackexchange narkive permalink

Für strukturelle Varianten können Sie SURVIVOR wie SURVIVOR-Statistiken verwenden, die speziell für diesen Zweck entwickelt wurden (Statistiken zur SV-Datei).

#5
+1
Panwen Wang
2019-10-22 04:01:05 UTC
view on stackexchange narkive permalink

Angenommen, Sie haben ein INFO-Feld mit dem Namen SVTYPE , um den Typ der Strukturvariante anzugeben.

So erhalten Sie die Statistiken auf einfache Weise:

  1. vcfstats installieren: pip install vcfstats
  2. Definieren Sie ein Makro, um die SVTYPE -Informationen zu extrahieren, z. B. in svtype.py :
  3. ol>
      aus vcfstats.macros importiere cat @ catdef SVTYPE (Variante): return varian.INFO [ 'SVTYPE']  
    1. Generieren Sie die Statistiken:
    2. ol>
        vcfstats --vcf <your vcf file> \ --outdir <the Ausgabeverzeichnis> \ --macro svtype.py \ --formula 'COUNT (1) ~ SVTYPE [DEL, INS, INV ...]' \ # Titel 'Anzahl der SV-Typen'  

      Dann haben Sie im Ausgabeverzeichnis die Statistikdatei mit dem Namen Number_of_SV_Types.txt und einen Plot dafür.

      Überprüfen Sie die Details unter https: // git hub.com/pwwang/vcfstats

Der Vorteil dieser Lösung besteht darin, dass ein Standardparser verwendet wird. Der Nachteil ist, dass mehrere Schritte erforderlich sind (im Gegensatz zu "zcat var.vcf.gz | perl -ne" wird "$ 1 \ n" gedruckt, wenn / [; \ t] SVTYPE = ([^; \ t] +) / '| sort | uniq -c`, das die Zusammenfassung auf einmal erstellt).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...