Meta
Estoy tratando de obtener una distribución de exones y tamaños de intrones en el espinoso de tres espinas ( Gasterosteus aculeatus ) .
Datos descargados
Descargué algunos datos de Ensembl. Más precisamente, fui allí , seleccioné "estructura" en los "atributos" y seleccioné
- Ensembl Gene ID
- Exon Chr Start (bp)
- Exon Chr End (bp)
Hay dos problemas en estos datos:
El primer punto lo asumí debido a la reversión, así que simplemente invertí la posición inicial y final cuando hubo tal inversión. El segundo punto es más problemático ya que no sé qué podría significar tal superposición de manera realista.
¿Puedes ayudar a encontrar la distribución de los tamaños de exón e intrón en el espinoso de tres espinas?
Lo que hice con los datos anteriores
Preparación
# 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
Tamaños de exón -> Se ve bien
# Exon sizes
ExonSizes = d$end - d$start
hist(ExonSizes) # Cool, looks good!
Tamaños de intrones -> Se ve mal
# 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!
En la línea de comando:
wget ftp://ftp.ensembl.org/pub/release-84/gtf/gasterosteus_aculeatus/Gasterosteus_aculeatus.BROADS1.84.gtf.gz
gunzip Gasterosteus_aculeatus.BROADS1.84.gtf.gz
Luego en 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
Tenga en cuenta que es muy poco probable que algunos de los exones anotados (y los intrones entre ellos) sean correctos. Por ejemplo, hay exones e intrones de 1 base de longitud. No creo que nadie realmente crea que son correctos, pero la distribución probablemente sea aproximadamente correcta.
Editar : por lo que vale, no hay exones de tamaño negativo en el archivo GTF. Mi conjetura es que los exones superpuestos son de diferentes transcripciones (o genes en hebras opuestas).
Edit2 : si desea obtener sus intrones de un "modelo de gen de unión", use algo como reduce(exonsBy(txdb, by='gene'))
y luego lapply
gaps()
eso. Los resultados serán correctos y el proceso probablemente llevará menos tiempo del que ha estado intentando.
GenomicFeatures
es un paquete bioconductor y que con MAC OSX wget
debe ser reemplazado porcurl
Von Mises