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:
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!
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.
GenomicFeatures
um ein Bioleiterpaket handelt und das bei MAC OSX wget
ersetzt werden musscurl
von Mises