Distribución de tamaños de exones e intrones

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:

  1. Algunos exones terminan antes de comenzar
  2. Algunos exones se superponen

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!
Cuando parece que un exón termina antes de comenzar, eso es porque está en el hilo negativo. La información de Strand también debe estar en su archivo gtf, por lo que puede verificar esto por si acaso. En cuanto a la superposición, a veces un exón tiene múltiples sitios de empalme. Además, los genes pueden superponerse. Ambos casos harían que los exones se superpusieran. No pasa nada raro allí, puedes incluirlos sin preocupaciones.

Respuestas (1)

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.

Perfecto +1 Muchas gracias! Para futuros usuarios, tenga en cuenta que GenomicFeatureses un paquete bioconductor y que con MAC OSX wgetdebe ser reemplazado porcurl
¿Puedo pedirle que explique más su segunda edición? ¿Qué es un "modelo de gen de unión"? ¿Quiere decir que podría querer obtener una distribución de la longitud de exón promedio por gen?
La explicación de un modelo de gen de unión termina siendo un poco larga para un comentario. Eche un vistazo a la parte derecha de la subfigura A aquí: nature.com/nbt/journal/v31/n1/images/nbt.2450-F1.jpg El "modelo de unión de exón" es lo mismo que un "modelo de gen de unión ". En este caso, todavía está obteniendo la distribución de todos los intrones en el genoma, simplemente está redefiniendo "intrón" para que no sea algo biológicamente correcto (aunque esta redefinición puede ser útil para algunos propósitos).
Oh, seguro que lo tengo. No pensé en eso. Tendré que ir con un modelo de gen de unión para mi propósito. ¡Intentaré obtener eso tan pronto como comprenda con qué tipo de objetos estoy tratando!