Práctica de Clustering para datos de DNA-arrays



Javier Herrero (Centro Nacional de Investigaciones Oncológicas Carlos III, Madrid). 



1. Introducción

1.1. ¿Cuándo es necesario?

No todos los experimentos de DNA-arrays requieren este tratamiento a posteriori. Los DNA-arrays son sólo una técnica experimental, por lo que el diseño del experimento puede variar mucho de un caso a otro.
Por ejemplo, un experimento podría consistir en comparar el comportamiento de dos tipos de individuos, unos sanos y otros con alguna particularidad como una enfermedad, una mutación, etc. en unas condiciones determinadas para ver qué genes están implicados en dicha diferencia. En ese caso solo tendríamos que ver qué genes varían su expresión y ver en qué medida lo hacen.
Sin embargo, lo más normal es estudiar una serie de condiciones distintas (series temporales, distintas dosis de un compuesto, distintos fenotipos, etc)  En este caso, sí encontramos para cada gen un patrón de expresión correspondiente a las distinas condiciones. Cuando diferentes genes presentan el mismo patron de expresión bajo las distintas condiciones experimentales estudiadas suele ser porque tienen alguna propiedad biológica en común. En este caso necesitamos conocer cuantos tipos de patrones de expresión diferentes tenemos y cuantos genes están siguiendo cada patrón.

1.2. ¿Qué tenemos?

El desarrollo clásico de un experimento de DNA-array es un estudio del nivel de expresión génica bajo distinta condiciones experimentales.  Los valores de expresión génica se expresan con respecto a una condición de referencia. Dependiendo del tipo de expreimento se elige na u otra. Cuando son series temporales o de dosis, lo normales tomar la condición inicial como condición de reeferencia. En otrs casos es más complicado y suele tomarse un valor medio de expresión.

1.3. ¿Qué buscamos?

Queremos ver diferencias en la expresión de los genes entre ambas condiciones. Para eso podemos dividir los valores de la condición en estudio por los de las condiciones de referencia. Así obtendremos valores cercanos a 1 cuando el gen no haya variado su expresión. Los valores por debajo indicarán una disminución en el nivel de expresión del gen y los valores por encima, lógicamente, un aumento.

1.4. Transformación de los datos

Desafortunadamente, al dividir unos valores por los otros, obtenemos valores entre 0 y 1 cuando se reprime un gen y valores entre 1 y +infinito cuando se activa. Nos gustaría tener una escala simétrica alrededor del 1, puesto que este es el valor al que corresponde un nivel de expresión igual en ambos condiciones.
Con una transformación logarítmica conseguimos este propósito. De hecho, esta es la transformación más usada. En principio cualquier otra transformación podría valer, siempre y cuando obtengamos una escala simétrica para valores de represión y de activación de los genes.

1.5. El problema de la distancia

En principio, podemos suponer que genes que se comportan de la misma forma lo hacen por alguna razón biológica. Para encontrar esta función biológica, lo primero es saber cuándo podemos considerar que dos genes se comportan igual y cuándo no. Dicho de otro modo, debemos definir una distancia entre patrones.
Según la distancia que usemos para agrupar los distintos patrones de expresión, obtendremos unos grupos u otros, es decir, la distancia define la relación que buscamos entre los genes. Las distancias más usadas son la distancia euclídea y el coeficiente de correlación lineal.
Si usamos la distancia euclídea tal cual, encontraremos genes en los que su transcripción se ha activado (o reprimido) en un número de veces parecido, mientras que si usamos el coeficiente de correlación lineal, juntaremos los genes según los valores relativos y no absolutos de sus patrones de expresión. Por ejemplo:
ejemplo
En este caso, si miramos distancia euclídea, el patrón rojo y el negro aparecerán juntos y el azul separado mientras que si medimos correlación lineal, el rojo y el azul se juntarán y el negro no.
Normalmente se usa correlación lineal, pero si se usa la distancia euclídea, se normalizan previamente los patrones de modo que estén todos comprendidos en un mismo rango de valores.

1.6. Procedimientos de clustering

Se han usado diversos procedimientos para estudiar los clusteres de genes cuya expresion es similar. Podemos clasificarlos en jerárquicos y no jerarquicos, según nos produzcan una clasificación basada en forma de árbol binario o no den información acerca de posibles relaciones jerárquicas entre los datos. El primer algoritmo utilizado fue UPGMA, un algoritmo jerárquico aglomerativo. Los algoritmos aglomerativos son los que van juntando poco a poco los patrones más similares hasta acabar de construir el árbol completo También usaremos el SOTA (Self-Organizing Tree Algorithm), una red neuronal con topología de árbol binario. Es un método divisivo, esto es, que va separando los distintos patrones paso a paso. También existen ejemplos de algoritmos divisivos pero no jerarquicos. Quizás el mas usado de estos últimos es el SOM.

2. Pasos a seguir

2.1 Conseguir los datos

Si no disponemos de un laboratorio experimental que nos sumistre los datos, podemos usar los de otros grupos que hayan publicado sus experimentos.

2.2 Preparar los datos

Eliminar los valores en los que la expresión esté fuera de los límites de detección del método o en los que se haya detectado algún error.
Dividir los datos de expresión de las condiciones en estudio por los valores de las condiciones de referencia.
Transformar logarítmicamente los datos.
(Opcional)   Eliminar los genes para los cuales las diferencias de expresión no sean significativas.
(Opcional)   Normalizar los patrones de expresión.

2.3 Hacer el clustering

Usaremos los procedimientos de clustering previamente descritos y compararemos los resultados

 


3. Ejemplo

3.1 Los datos

Estos datos son los correspondientes a un experimento hecho por un grupo de Stanford sobre el salto diauxico (paso de condiciones aerobias a condiciones anaerobias en S. cerevisiae)
[Ver datos]

3.2 Preparación

Los datos consisten en una tabla donde aparecen los valores en columnas separadas por tabuladores. La 1a columna corresponde al nombre de la ORF, la 2a al del gen si este se conoce y a partir de la 3a encontramos los datos experimentales.
En este caso, también nos dan los resultados de la división, así que nos basta con extraerlos de la tabla.
Ahora aplicamos una transformación logarítmica a los datos (base 2).
[Ver datos]


Eliminamos los datos que no sean relevantes, esto es, los que no varían significativamente. En concreto, se han eliminado los que no varían más de dos veces en al menos dos de los puntos medidos. Puesto que tenemos los datos en una escala logarítmica, tienen que tener al menos dos valores por encima de 1 o por debajo de -1.
[Ver datos]


Finalmente, normalizamos los patrones:
[Ver datos]

3.3 Clustering

 
He aquí el árbol correspondiente a estos datos, usando el SOTA y midiendo correlación lineal:
Arbol completo
Ampliar la figura
 
Aparecen dibujados en el margen los patrones correspondientes a cada gen en una escala de colores (ver pie de la imagen).
Y lo mismo, con otra representación, y con un nivel de confianza en la variabilidad del 95%.
Arbol completo
Ampliar la figura
 
En este caso, se representa con un círculo más o menos grande, el tamaño de los clusters (el número de genes que tiene). Al lado aparece el patrón del nodo correspondiente.
La variabilidad se define en cada cluster como la mayor de las distancias entre dos patrones asignados a ese cluster, esto es, los dos patrones más alejados en un grupo definen su variabilidad. El nivel de confianza se basa en un método estadístico: se barajan todos los datos (en columnas y filas) y se calcula la distribución de distancias (distancias aleatorias); se corta esta distribución al nivel de confianza deseado y se toma la distancia correspondiente como umbral para parar el clustering.

4. Ejercicios prácticos

4.1 Repetir el siguiente ejemplo

Si se dispone de datos propios, se pueden cargar directamente en el servidor: Sotarray Server     [demo]
1a Parte:
Abrir la página de data sets pulsando aquí:
DNA-arrays: Public Data Sets     [demo]

Seleccionar el experimento de Diauxic shift:

Diauxic Shift Data Set     [demo]

(Opcional)     Se pueden comprobar el contenido de los distintos archivos e ir siguiendo los sucesivos tratamientos que han sufrido los datos

Elegir uno de los archivos (data_norm.txt, por ejemplo) y mandarlo directamente al servidor pulsando en:

sota/cluster     [demo]

Seleccionar el servidor del Sota para DNA-arrays:

Send To Sotarray
[demo]

Seleccionar la opción Unrestricted Grow.

Pulsar el botón Run.

[demo]

Observar el resultado y mandarlo al TreView para visualizar el árbol:

Send To TreeView
[demo]

Aceptar los parámetros por defecto y pulsar Run

[demo]

Volver hacia atrás pulsando en:

Change Parameters

Quitar la marca de la casilla Gene Names y cambiar a 1 el valor de Vertical Separation

Pulsar otra vez Run.

[demo]

2a Parte:
Cerrar la ventana del árbol y volver a la del resultado del Sotarray

[demo]

Pulsar en Change Parameters para modificar los parámetros:

Change Parameters
[demo]

Seleccionar la opción Variablity Threshold (%) y poner el valor de 90 (por defecto).

Volver a pulsar el botón Run.

[demo]

Observar el resultado y mandarlo tanto al TreeView como al SotaTree para visualizar el árbol:

Send To SotaTree
[demo]
Send To TreeView
[demo]

Comparar y comentar los resultados

4.2 Probar con distintos métodos de clustering

4.2.1 Clustering aglomerativo
Si se dispone de datos propios, se pueden cargar directamente en el servidor: Cluster Server     [demo]
Desde la página de data sets, elegir uno de los experimentos.
DNA-arrays: Public Data Sets     [demo]
Elegir uno de los archivos y cargarlo directamente al servidor pulsando en:
sota/cluster     [demo]
Mandarlo al Cluster:
Send To Cluster
[demo]
Aceptar los valores por defecto (UPGMA y correlation) y pulsar Run
[demo]
Mandar el resultado al TreeView para visualizarlo:
Send To TreeView
[demo]
Quitar la opción de Gene Names cambiar el valor de Vertical Separation a 1 y pulsar Run
[demo]
4.2.1 Self-Organizing Maps
Si se dispone de datos propios, se pueden cargar directamente en el servidor: SOM Server     [demo]
Desde la página de data sets, elegir uno de los experimentos.
DNA-arrays: Public Data Sets     [demo]
Elegir uno de los archivos y cargarlo directamente al servidor pulsando en:
som     [demo]
Mandarlo al SOM:
Send To Cluster
[demo]
Aceptar los valores por defecto y pulsar Run
[demo]
Comparar y comentar los resultados

 

4.3 Probar con más ejemplos

Abrir la página de data sets pulsando aquí:
DNA-arrays: Public Data Sets     [demo]
Si se dispone de datos propios, se pueden cargar directamente en el servidor:
Clustering Resources     [demo]


4.4 Analizar a mano un cluster

Si todavía queda tiempo, elegir un cluster de los obtenidos anteriormente, que contenga entre 5 y 10 genes más o menos y buscar información sobre la función de cada gen.
Se puede encontrar mucha información en la base de datos Swiss-Prot:
Buscar en Swiss-Prot
Intentar asignar una función global al cluster.



CNIO, Unidad de Bioinformática
Abril de 2001