Wie führt man SNP-Daten mit einem Referenzgenom zusammen?

Meine Daten

Ich habe eine 23andMe-Datei, die SNPs in der Form auflistet:

rsid chromosome position genotype rsXXXXX 1 PPPPPP CT rsXXXXX 1 PPPPPP GG

Die Felder sind TAB-getrennt und jede Zeile entspricht einem einzelnen SNP. Für jeden SNP werden vier Datenfelder bereitgestellt.

  1. Eine Kennung (eine rsid oder eine interne ID)
  2. Seine Position auf dem Referenzgenom.
    • Das Chromosom, auf dem es sich befindet.
    • Die Position innerhalb des Chromosoms ist befindet sich auf.
  3. Der Genotyp nennt sich orientiert in Bezug auf den Plus-Strang an der menschlichen Referenzsequenz.

Das Referenzgenom ist das Human Assembly Build 37 (auch bekannt als Annotation Release 104).

Meine Frage

Wie füge ich die SNPs in das Referenzgenom ein?

Nehmen Sie zum Beispiel die erste Zeile in meiner SNP-Datei:

rsXXXXX 1 PPPPPP CT

Teil 1

Ich sehe, dass ich das Nukleotid an Position PPPPPP auf Chromosom 1 des Referenzgenoms durch ein Nukleotid aus dem Genotypfeld ersetzen muss, aber welches Nukleotid soll ich verwenden? C oder T? Und warum?

Teil 2

Ab wann soll ich mit dem Referenzgenom rechnen? Betrachtet man Chromosom 1 der menschlichen Versammlung Build 37, sind die ersten ~10.000 Zeichen (ohne die Beschreibung der ersten Zeile) N. Ist das erste N die Zahl 1? z.B. Wenn PPPPPP 100.000 wäre, würde ich das 100.000ste Zeichen im Referenzgenom durch das richtige Nukleotid aus Teil 1 dieser Frage ersetzen? Oder sollte ich mit dem Zählen ab dem ersten Nicht-N-Zeichen in der Fasta-Datei beginnen?

Antworten (3)

Zunächst müssen Sie wissen, auf welche Genomsequenz sich die SNP-Datei bezieht. Sie müssen die von ihnen verwendete Referenzsequenz erwähnt haben.

Wie andere bereits erwähnt haben, handelt es sich um CTHeterozygotie. Wenn Sie nur die Änderungen markieren möchten, verwerfen Sie den Rest, der bereits im Referenzgenom vorhanden ist, und verwenden Sie das andere Allel. Wenn Sie jedoch den Haplotyp im Auge behalten möchten, müssen Sie sicherstellen, dass ein Satz von SNPs von derselben Chromatide stammt. Dies ist schwierig - Sie können es möglicherweise immer noch für SNPs erkennen, die nahe genug sind, um durch einen einzigen Lesevorgang zugeordnet zu werden, aber es ist fast unmöglich für SNPs, die gut genug getrennt sind.

Wie Endre sagte, muss man beim ersten Nukleotid beginnen. Allerdings scheint es zweifelhaft, dass Sie bekommen   ( N N N N ) n am Anfang von Chromosom 1. Vollständig zusammengesetzte Chromosomen haben solche Strecken nicht. Unten sind die ersten 10 Zeilen der Chromosom 1 Fasta-Datei. Überzeugen Sie sich selbst.

>gi|568815364|ref|NT_077402.3| Homo sapiens chromosome 1 genomic scaffold, GRCh38 Primary Assembly HSCHR1_CTG1
TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC
CCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCAACCCTAACCCTAACCCTAACCCTAACCCTAA
CCCTAACCCCTAACCCTAACCCTAACCCTAACCCTAACCTAACCCTAACCCTAACCCTAACCCTAACCCT
AACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAAACCCTAAACCCTAACCCTAACCCTAACCCTA
ACCCTAACCCCAACCCCAACCCCAACCCCAACCCCAACCCCAACCCTAACCCCTAACCCTAACCCTAACC
CTACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCCTAACCCCTAACCCTAACCCTAACCCTA
ACCCTAACCCTAACCCTAACCCCTAACCCTAACCCTAACCCTAACCCTCGCGGTACCCTCAGCCGGCCCG
CCCGCCCGGGTCTGACCTGAGGAGAACTGTGCTCCGCCTTCAGAGTACCACCGAAATCTGTGCAGAGGAC
AACGCAGCTCCGCCCTCGCGGTGCTCTCCGGGTCTGTGCTGAGGAGAACGCAACTCCGCCGTTGCAAAGG

Wie zu ersetzen N t h Rückstand ist eine ziemlich einfache Aufgabe. Aber das ist eine Programmierfrage und nicht Gegenstand dieses Forums. Angenommen, Sie haben das Problem von Teil 1 gelöst und haben eine tabulatorgetrennte sortierte Datei wie diese:

chromosome  position    residue
 1           79989           G
 1           100232          T
 3           341342          A

Dieses Skript ist vielleicht nicht das beste, würde aber in einem Linux/*nix/Cygwin-Terminal funktionieren, um die Reste zu ersetzen (stellen Sie sicher, dass Sie Folgendes haben gawk version >=4.0):

gawk -F "\t" '(FNR==1){x++} (x==1){a[$1][$2]=$3;next} (x==2){if($0~/>/){h=$0;sub(/^.*chromosome /,"",h);sub(/ .*/,"",h)} else{seq[h]=seq[h]$0}} END{for(i in a){s=0; for(j in a[i]){m=m substr(seq[i],s,j-1) a[i][j];s=j+1} m=m substr(seq[i],s); print ">Chr"i"\n"m}}' SNP_file Genome.fa | fold -w 60
Leider kann ich in diesem Forum nicht erklären, wie das Skript funktioniert
"TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC" bläst laut UCSC auf Position 10.000. Und sieh es dir an, wie ich schon sagte, es wiederholt sich und ist schrecklich. Das OP hat nur eine maskierte Sequenz.
Hmm.. ja.. ist mir nicht aufgefallen.. trotzdem ist der Start vom Rest#1..

Genetik 101, Sie haben 2 Kopien Ihrer gesamten DNA an jeder Position, eine Kopie von Ihrer Mutter, eine von Ihrem Vater. Für das "CT" haben Sie also eine Kopie mit einem C und eine mit einem T.

Und ja, es ist normal, dass die ersten mehreren tausend oder Millionen Buchstaben Ns sind. Das Genom ist dort repetitiv und eklig, aber es wird trotzdem zu Nummerierungszwecken gezählt.

Ehrlich gesagt würde ich das nicht mit einer riesigen Textdatei des Genoms machen. Suchen Sie einfach in ensembl.org mit der rs-Nummer nach Ihrem SNP, und Sie erhalten den SNP, einige flankierende Sequenzen und etwas Kontext. Suchen Sie es in PubMed, wenn Sie sehen möchten, ob es jemals in einer Veröffentlichung aufgetaucht ist

Teil 1:

Laut Lior Pachter werden die Daten von 23andme nicht phasenweise bereitgestellt. Das bedeutet, dass Sie bei jedem Eintrag im Genotyp-Feld nicht wissen, von welcher Chromosomenkopie er stammt. Dies geschieht, da moderne Microarray-Plattformen nicht erkennen können, von welcher der beiden Kopien eines Chromosoms ein snp stammt.

Sie können dieses Problem für die meisten snps lösen, indem Sie Ihre Allele mit dem Referenzgenom vergleichen, aber dies würde einige Programmierarbeit erfordern. Sie könnten https://github.com/endrebak/qc_gwas als Beispiel verwenden , was dasselbe tut, aber für Plink-Dateien.

Teil 2:

Ich gehe davon aus, dass Sie dies programmatisch tun möchten und nicht durch Kopieren und Einfügen der snps in das Referenzgenom.

Die kurze Antwort ist, dass das erste N das erste Nukleotid ist. Aber Sie sollten lieber ein Paket wie Biopython verwenden , um das Zählen für Sie zu übernehmen, es könnte kniffliger sein, als Sie denken (Sie müssen zum Beispiel Zeilenenden in der Fasta-Datei anpassen).