Verteilung von Exon- und Introngrößen

Ziel

Ich versuche, eine Verteilung der Exons- und Introngrößen beim Dreistachligen Stichling ( Gasterosteus aculeatus ) zu erhalten .

Daten heruntergeladen

Ich habe einige Daten von Ensemble heruntergeladen. Genauer gesagt bin ich dorthin gegangen , habe "Struktur" in den "Attributen" ausgewählt und ausgewählt

- Ensembl Gene ID
- Exon Chr Start (bp)
- Exon Chr End (bp)

Bei diesen Daten gibt es zwei Probleme:

  1. Einige Exons enden, bevor sie beginnen
  2. Einige Exons überlappen

Der erste Punkt ist, den ich aufgrund der Umkehrung angenommen habe, also habe ich einfach die Start- und Endposition umgekehrt, als es eine solche Umkehrung gab. Der zweite Punkt ist problematischer, da ich nicht weiß, was eine solche Überschneidung realistisch bedeuten könnte.

Können Sie helfen, die Verteilung der Exon- und Introngrößen beim Dreistachligen Stichling zu finden?


Was ich mit den obigen Daten gemacht habe

Vorbereitung

# read data

d = read.table(file.choose(), header=TRUE)
names(d)= c("ID", "start", "end")

# Reverse exons when needed

toReverse = which(d$start > d$end)
s = d$start[toReverse]
d$start[toReverse] = d$end[toReverse]
d$end[toReverse] = s

Exon-Größen -> Sieht gut aus

# Exon sizes

ExonSizes = d$end - d$start
hist(ExonSizes) # Cool, looks good!

Introns Größen -> Sieht schlecht aus

# Intron sizes
# This is a little slow. One might have better to switch to C++.
# The idea is to look at the distance between the end of an exon and the start of the next exon within each gene.

d$ID = paste(d$ID)
IntronSizes = c()
uniquegenes = unique(d$ID)
nbgenes = length(uniquegenes)
i=0
exon = 0
for (gene in uniquegenes)
{
    i=i+1
    cat(paste0(i," / ",nbgenes,"\n"))

    while (TRUE)
    {
        exon=exon+1
        if (d$ID[exon] == gene) {
			IntronSizes = append(IntronSizes, d[exon+1,]$start - d[exon,]$end)
        } else 
        {
            break
        }
    }
}
hist(IntronSizes) # There are negative values. I don't know how to interpret them. 

hist(log(abs(IntronSizes))) # That looks good but I doubt it makes much sense!
Wenn es so aussieht, als ob ein Exon endet, bevor es beginnt, liegt das daran, dass es sich auf dem Minusstrang befindet. Litzeninformationen sollten auch in Ihrer GTF-Datei enthalten sein, damit Sie diese für alle Fälle überprüfen können. Was die Überlappung betrifft, hat ein Exon manchmal mehrere Spleißstellen. Außerdem können Gene überlappen. Beide Fälle würden dazu führen, dass sich Exons überlappen. Da passiert nichts Seltsames, Sie können sie ohne Sorge einschließen

Antworten (1)

Auf der Kommandozeile:

wget ftp://ftp.ensembl.org/pub/release-84/gtf/gasterosteus_aculeatus/Gasterosteus_aculeatus.BROADS1.84.gtf.gz
gunzip Gasterosteus_aculeatus.BROADS1.84.gtf.gz

Dann in R:

library(GenomicFeatures)
txdb = makeTxDbFromGFF("Gasterosteus_aculeatus.BROADS1.84.gtf")
hist(log10(width(unique(exons(txdb))))) # exons
hist(log10(width(unique(unlist(intronsByTranscript(txdb)))))) # introns

Beachten Sie, dass es unglaublich unwahrscheinlich ist, dass einige der annotierten Exons (und die Introns dazwischen) korrekt sind. Beispielsweise gibt es 1 Base lange Exons und Introns. Ich glaube nicht, dass irgendjemand wirklich glaubt, dass diese richtig sind, aber die Verteilung ist wahrscheinlich ansonsten ungefähr richtig.

Bearbeiten : Für das, was es wert ist, gibt es in der GTF-Datei keine Exons mit negativer Größe. Meine Vermutung ist, dass die überlappenden Exons von verschiedenen Transkripten (oder Genen auf gegenüberliegenden Strängen) stammen.

Edit2 : Wenn Sie Ihre Introns aus einem "Union-Genmodell" erhalten möchten, verwenden Sie so etwas wie reduce(exonsBy(txdb, by='gene'))und dann lapply gaps()dazu. Die Ergebnisse werden korrekt sein und der Vorgang wird wahrscheinlich weniger Zeit in Anspruch nehmen als das, was Sie versucht haben.

Perfekt +1 Vielen Dank! Für zukünftige Benutzer beachten Sie bitte, dass es sich GenomicFeaturesum ein Bioleiterpaket handelt und das bei MAC OSX wgetersetzt werden musscurl
Darf ich Sie bitten, Ihre zweite Änderung näher zu erläutern? Was ist ein "Vereinigungsgenmodell"? Meinen Sie damit, dass ich vielleicht eine Verteilung der durchschnittlichen Exonlänge pro Gen erhalten möchte?
Die Erklärung eines gewerkschaftlichen Genmodells wird für einen Kommentar etwas lang. Sehen Sie sich hier den rechten Teil von Unterabbildung A an: nature.com/nbt/journal/v31/n1/images/nbt.2450-F1.jpg Das „Exon-Union-Modell“ ist dasselbe wie ein „Vereinigungs-Genmodell“. ". In diesem Fall erhalten Sie immer noch die Verteilung aller Introns im Genom, Sie definieren "Intron" nur neu, um etwas biologisch Korrektes zu sein (obwohl diese Neudefinition für einige Zwecke nützlich sein kann).
Oh sicher, ich habe es. Ich habe nichts davon. Ich muss für meinen Zweck ein Gewerkschaftsgenmodell verwenden. Ich werde versuchen, das zu bekommen, sobald ich verstehe, mit was für Objekten ich es zu tun habe!