1. Introducción a los entornos de trabajo UNIX

1.17. Ejemplo práctico 1: Analizando el genoma humano

1.17.3. Análisis de los genes humanos

El análisis del catálogo de genes de una especie es un ejemplo perfecto de la utilidad de los comandos del terminal en este capítulo. Un gen es una secuencia de ADN que contiene información para crear una molécula biológica. Los genes de los organismos eucariotas se componen de exones. Muchos genes humanos tienen combinaciones plausibles de exones, lo que resulta en transcritos alternativos.

Para codificar la ubicación de los genes, se utilizan ficheros tabulados que contienen información como la localización y las características del transcrito del gen, como el número de exones y las coordenadas exactas.

En este ejercicio, se utiliza la anotación del consorcio RefSeq para obtener información sobre el genoma humano, en un primer momento, pero también se utilizará información del genoma de ratón (mouse). La información se encuentra en un fichero llamado refGene.txt y se puede obtener en la página web del navegador genómico de UCSC mediante el enlace Annotation. La dirección de descargas se muestra en la tabla 19.

Tabla 19. Páginas de descarga de los ficheros refGene.txt en función de la especie.

Acceso Dirección
Página descarga human https://hgdownload.soe.ucsc.edu/goldenPath/hg38/database/
Página descarga mouse https://hgdownload.soe.ucsc.edu/goldenPath/mm39/database/

Fuente: elaboración propia.

Las anotaciones, en el servidor de UCSC, suelen representarse gráficamente en el navegador genómico en forma de pista. El navegador genómico está gestionado internamente por el administrador de bases de datos relacionales de MySQL. En consecuencia, en esta página web encontraremos dos tipos de fichero para cada pista de anotaciones de UCSC. El primer fichero, cuya extensión será del tipo sql, contiene una especificación genérica de los atributos de las anotaciones. Este archivo es necesario para crear una tabla vacía en una base de datos relacional. El segundo fichero, que estará comprimido y poseerá la extensión txt, contiene propiamente la información de cada anotación de forma tabulada. Al acceder a la página de descarga se visualiza la siguiente información:

This directory contains a dump of the UCSC genome annotation database for the

    Dec. 2013 (GRCh38/hg38) assembly of the human genome

    (hg38, GRCh38 Genome Reference Consortium Human Reference 38 (GCA_000001405.15))




      affyGnf1h.sql                                2015-05-11 01:50  2.1K 

      affyGnf1h.txt.gz                            2015-05-11 01:50  596K 

      …

      refGene.sql                                   2020-08-17 18:56  1.9K 

      refGene.txt.gz                               2020-08-17 18:56  8.3M 

      …

      xenoRefSeqAli.sql                        2020-08-17 19:17  2.1K 

      xenoRefSeqAli.txt.gz                    2020-08-17 19:17   17M

Ahora procedemos a descargar el fichero txt asociado a la pista refGene, que contiene el catálogo de genes humanos anotados por el consorcio RefSeq. Para ello, se utiliza el comando wget nuevamente para transferir el fichero al terminal.

$ wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/database/refGene.txt.gz
--2023-04-26 16:35:43--  https://hgdownload.soe.ucsc.edu/goldenPath/hg38/database/refGene.txt.gz

S'està resolent hgdownload.soe.ucsc.edu (hgdownload.soe.ucsc.edu)... 128.114.119.163

S'està connectant a hgdownload.soe.ucsc.edu (hgdownload.soe.ucsc.edu)|128.114.119.163|:443... conectat.

HTTP: s'ha enviat la petició, s'està esperant una resposta... 200 OK

Mida: 8668756 (8,3M) [application/x-gzip]

S'està desant a: «refGene.txt.gz»

refGene.txt.gz                                     100%[================>]   8,27M  2,22MB/s    in 3,7s    

2023-04-26 16:35:49 (2,22 MB/s) - s'ha desat «refGene.txt.gz» [8668756/8668756]

A continuación, te invitamos a que revises el contenido del primer fichero: refGene.sql. ya que es útil para conocer las características de los genes anotados en cada columna del fichero. Los atributos que se utilizan con mayor frecuencia son los siguientes: name (código del transcrito), chrom (cromosoma), strand (hebra), txStart y txEnd (coordenadas de inicio y final), exonCount (número de exones) y name2 (nombre del gen). Es importante no confundir los campos name y name2: un gen puede tener varios transcritos, pero un transcrito solo puede pertenecer a un gen. Estos parámetros se encuentran en la cabecera del fichero descargado.

Vamos a visualizar el contenido del fichero refGene.txt. Este archivo contiene información sobre el catálogo completo de genes anotados en el genoma humano. Cada línea representa un transcrito de un gen determinado. En el caso de que un gen tenga varios transcritos, cada uno se codifica en líneas separadas, cada una con su propio código y sus coordenadas correspondientes. En todas las líneas, los atributos de cada transcrito están separados por el carácter tabulador o «\t». Antes de poder visualizar el contenido del archivo, debemos descomprimirlo utilizando el comando gzip.

# Descompresión del fichero con gzip

$ gzip -d refGene.txt.gz

# Visualización de las primeras cinco líneas con el comando head

$ head -5 refGene.txt
585  NR_024540  chr1 -    14361 29370 29370 29370 11     14361,14969,15795,16606,16857,17232,17605,17914,18267,24737,29320,     14829,15038,15947,16765,17055,17368,17742,18061,18366,24891,29370,    0    WASH7P    unk  unk  -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

585  NR_106918  chr1 -    17368 17436 17436 17436 1    17368,    17436,     0    MIR6859-1  unk  unk  -1,

585  NR_107062  chr1 -    17368 17436 17436 17436 1    17368,    17436,     0    MIR6859-2  unk  unk  -1,

585  NR_107063  chr1 -    17368 17436 17436 17436 1    17368,    17436,     0    MIR6859-3  unk  unk  -1,

585  NR_128720  chr1 -    17368 17436 17436 17436 1    17368,    17436,     0    MIR6859-4  unk  unk  -1,

Ten en cuenta que las anotaciones de un genoma suelen actualizarse frecuentemente. Por este motivo, los datos mostrados en este tutorial pueden variar ligeramente con el paso del tiempo si lo comparas con una nueva descarga del mismo fichero.

Debido a la gran cantidad de información que contiene este archivo son difíciles de manejar. A continuación, se decide trabajar con unos determinados campos y se utilizará el comando gawk para extraer únicamente los campos necesarios de este ejercicio. En particular, encontramos interesantes los siguientes atributos: nombre del gen, identificador del transcrito, cromosoma, hebra, coordenadas y número de exones. Para evitar tener que ejecutar el comando previo cada vez que se necesiten estos datos, se redirecciona la salida hacia un archivo refgene-select.txt. Una vez obtenido, se cuentan el número total de transcritos humanos.

# Analizamos el fichero refGene.sql para determinar la posición de cada columna

$ gawk '{print $13,$2,$3,$4,$5,$6,$9;}' refGene.txt > refgene-select.txt

# Se visualizan las últimas 5 líneas

$ tail -5 refgene-select.txt
KIAA0825   NM_001385728    chr5 -   94519215   94618604   6

KIAA0825   NM_001385729    chr5 -   94519215   94618604   6

KIAA0825   NR_169752      chr5 -    94519215   94618604   4

KIAA0825   NR_169753       chr5 -    94519215   94618604   6

KIAA0825   NR_169754       chr5 -   94519215   94618604   6

# El número de transcritos es el número de líneas del fichero

$ wc -l refgene-select.txt
88819 refgene-select.txt

Continuamos con diferentes análisis,

# Se solicita el número de transcritos genéticos distribuidos en la hebra positiva

$ gawk '{if ($4 == "+") print $0;}' refgene-select.txt | wc -l
45121

# Se solicita el número de transcritos del cromosoma 21

$ grep chr21 refgene-select.txt | wc -l
1121

# Se muestran los primeros siete transcritos después de ordenar por nombre del gen

$ sort refgene-select.txt | head -7
A1BG NM_130786      chr19     -    58345182   58353492   8

A1BG-AS1 NR_015380   chr19     +    58351969   58355183   4

A1CF NM_001198818    chr10     -    50799408   50885675   14

A1CF NM_001198819    chr10     -    50799408   50885675   15

A1CF NM_001198820    chr10     -    50799408   50885675   14

A1CF NM_001370130    chr10     -    50799408   50885627   12

A1CF NM_001370131    chr10     -    50799408   50885627   12

# Se muestran los primeros seis transcritos después de ordenar por el número de genes que contiene cada transcrito

$ sort -rnk 7 refgene-select.txt | head -6
TTN NM_001267550     chr2 -   178525990 178807423 363

TTN NM_001256850     chr2 -    178525990 178807423 313

TTN NM_133378   chr2 -    178525990 178807423 312

TTN NM_133437   chr2 -    178525990 178807423 192

TTN NM_133432   chr2 -    178525990 178807423 192

TTN NM_003319   chr2 -    178525990 178807423 191

El fichero refgene-select.txt contiene el listado de los transcritos humanos. Como un gen puede dar lugar a varios transcritos alternativos, podemos contar cuántos genes tiene el genoma humano y averiguar cuáles poseen un mayor número de transcritos. Para conseguirlo, ordenamos los nombres de los genes e introducimos diferentes variantes del comando uniq para agruparlos. Por otra parte, la mejor forma de estudiar el comportamiento de una línea de comandos es la deconstrucción: eliminando las últimas instrucciones se puede mostrar el resultado parcial de la ejecución en pantalla.

# Ordena la columna por el nombre de los genes

$ gawk '{print $1;}' refgene-select.txt | sort | more
A1BG

A1BG-AS1

A1CF

A1CF

A1CF

A1CF

A1CF

…

# Ordena la columna por el nombre de los genes y que sean valores únicos

$ gawk '{print $1;}' refgene-select.txt | sort | uniq | more
A1BG

A1BG-AS1

A1CF

A2M

A2M-AS1

A2ML1

…

# Determina el número de genes únicos en el fichero

$ gawk '{print $1;}' refgene-select.txt | sort | uniq | wc -l
28307

# Determina cuántos transcritos hay para cada uno de los genes

$ gawk '{print $1;}' refgene-select.txt | sort | uniq -c | more
1 A1BG

1 A1BG-AS1

8 A1CF

4 A2M

3 A2M-AS1

2 A2ML1

1 A2MP1

…

# Determina cuántos transcritos hay para cada uno de los genes y ordenalos por el número de exones, de mayor a menor

$ gawk '{print $1;}' refgene-select.txt | sort | uniq -c | sort -rn
260 KIR2DS2

215 LOC101928804

177 KIR2DS4

144 MAP4

144 KIR3DS1

129 KIR2DL

…

Otra operación muy frecuente consiste en el cálculo de valores promedio. En el siguiente ejemplo, el estudiante calculará el promedio de exones por transcrito y la longitud media de estos. El funcionamiento de gawk es similar en ambos casos, ya que trabaja con la variable t como contador que acumula la suma total. La división por el número de líneas visitadas (NR), una vez que se completa la lectura del archivo, genera el valor promedio en cada caso.

# Cálculo de promedio de exones por transcrito

$ gawk 'BEGIN{t=0;}{t=t+$7;}END{print t/NR;}' refgene-select.txt
10.0961

# Cálculo de la longitud media de los transcritos

$ gawk 'BEGIN{t=0;}{t=t+$6-$5+1;}END{print t/NR;}' refgene-select.txt
64883

Para ilustrar la utilidad de asociar dos ficheros de texto tabulado, se va a combinar el catálogo de genes humanos introducido hasta ahora (archivo refGene.txt para H. sapiens se renombra a refGene-human.txt) con el catálogo equivalente del genoma del ratón (archivo refGene.txt para M. musculus y renombrado como refGene-mouse.txt después de haberlo descargado del servidor genómico de UCSC).

$ gzip -d refGene.txt.gz
$ mv refGene.txt refGene-human.txt
$ wget https://hgdownload.soe.ucsc.edu/goldenPath/mm39/database/refGene.txt

# Se renombre el fichero del genoma M.musculus

$ mv refGene.txt refGene-mouse.txt

# Para cada uno de los ficheros, se seleccionan las columnas nombre del gen y cromosoma y posteriormente se visualizan los 5 primeros

$ gawk '{print $13, $3;}' refGene-human.txt | sort | uniq > refgene-select-human.txt
$ head -5 refgene-select-human.txt
A1BG chr19

A1BG-AS1 chr19

A1CF chr10

A2M chr12

A2M-AS1 chr12

# Para el fichero genoma de ratón

$ gawk '{print $13, $3;}' refGene-mouse.txt | sort | uniq > refgene-select-mouse.txt
$ head -5 refgene-select-mouse.txt
0610005C13Rik chr7

0610009B22Rik chr11

0610009E02Rik chr2

0610009L18Rik chr11

0610010F05Rik chr11

Con esta transformación previa del fichero, se han preparado los ficheros para utilizar el comando join: a continuación, se muestra cómo asociar los genes que tienen el mismo nombre en ambas especies. Al comando join se añade la opción -i, para que se ignoran las diferencias de mayúsculas/minúsculas. Cada línea del resultado final contiene el nombre del gen y su ubicación en ambos genomas.

$ join -i refgene-select-human.txt refgene-select-human.txt > refgene-comun.txt
$ head -5 refgene-comun.txt
A1BG chr19 chr19

A1BG-AS1 chr19 chr19

A1CF chr10 chr10

A2M chr12 chr12

A2M-AS1 chr12 chr12

A partir de este análisis preliminar del catálogo de genes humanos, se pueden poner en práctica múltiples variantes de los comandos aquí mostrados. Por ejemplo, es posible añadir más atributos, más genomas o más ficheros con otras propiedades para ampliar esta exploración. Por lo tanto, os animamos a experimentar con cada bloque de comandos utilizado durante este ejercicio. Con esta aplicación práctica, se demuestra la validez del terminal de Gnu/Linux para analizar eficientemente datos biológicos. En futuros apartados, se introducirán sistemas más complejos para gestionar grandes conjuntos de datos, de modo que el usuario podrá reproducir el mismo caso práctico utilizando dichas técnicas.