Guión de prácticas

Transcripción

Guión de prácticas
Master Bioinformática y Biologı́a Computacional
Manejo, visualización y cálculos
topológicos en redes biológicas
Daniel López y David Ochoa
Modulo de Redes y Biologı́a de Sistemas
Índice general
1. Introducción
Redes Biológicas a estudiar . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Manejo y Visualización de Redes en Cytoscape
Importando redes . . . . . . . . . . . . . . . . . . . . .
Importar red galFitered . . . . . . . . . . . . . . .
Importar atributos de la red . . . . . . . . . . . .
Visualización de las redes y Análisis de expresión . . .
Layouts . . . . . . . . . . . . . . . . . . . . . . .
Visualizando Datos de Expresión (VizMapper) . .
Filtrado . . . . . . . . . . . . . . . . . . . . . . .
Interpretar la Red . . . . . . . . . . . . . . . . . .
Análisis funcional . . . . . . . . . . . . . . . . . . . . .
Generar clusters de coexpresión . . . . . . . . . .
Enriquecimiento de términos GO . . . . . . . . . . . .
4
4
.
.
.
.
.
.
.
.
.
.
.
6
6
6
7
10
10
11
14
14
16
16
18
.
.
.
.
.
.
.
.
.
20
20
21
21
22
22
25
25
26
28
4. Conclusiones
Agradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
33
Apéndices
Instalación de Cytoscape .
Ejecutar Cytoscape .
Instalar plugins . . .
Instalación de igraph en R
Navegando por Cytoscape
Interface Cytoscape .
33
35
35
36
37
38
38
.
.
.
.
.
.
.
.
.
.
.
3. Análisis topológico en R
Cargando distintos tipos de redes . . . . . . . . . . . . .
Parametros topológicos más generales . . . . . . . . . . .
Caminos mı́nimos . . . . . . . . . . . . . . . . . . .
Diámetro . . . . . . . . . . . . . . . . . . . . . . .
Componente conexo . . . . . . . . . . . . . . . . . .
Cualidades de las Redes Biológicas . . . . . . . . . . . .
Coeficiente de clustering . . . . . . . . . . . . . . .
Redes de mundo pequeño (Small-World Networks)
Redes libres de escala (Scale-free Networks) . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Menús . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
38
40
Capı́tulo 1
Introducción
El objetivo de este tutorial es familiarizarse con el manejo y visualización de redes
biológicas ası́ como aprender a calcular algunos de sus parámetros topológicos más relevantes. Aunque existen multitud de herramientas para trabajar con redes, en esta práctica
sólo se utilizarán Cytoscape y R por motivos didácticos. El fin no es crear un manual de
dichos programas, ni ahondar entre los cientos de opciones y plug-ins que existen, sino más
bien hacerse con una visión general del análisis de redes y sobre todo en las posibilidades
que dichos análisis ofrecen.
Es importante recordar que para la realización de la práctica es imprescindible tener
previamente instalado Cytoscape con todos los plug-ins que utilizaremos (Instalación de
Cytoscape) ası́ como R con la librerı́a igraph (Instalación de igraph en R).
La práctica está encuadrada dentro del módulo de Redes Biológicas y Biologı́a de
Sistemas y pretende servir además como complemento a la clase de Teorı́a de Grafos
vista previamente ası́ como a las clases venideras en las que se tratarán algunas de las
redes biológicas más relevantes en la actualidad.
Redes Biológicas a estudiar
En esta práctica vamos a utilizar dos redes biológicas. Por un lado, utilizaremos los
datos procedentes del siguiente artı́culo publicado en Science en 2001:
Ideker et al. Integrated genomic and proteomic analyses of a systematically perturbed metabolic network. Science (2001) vol. 292 (5518) pp. 929-34
Es importante entender el articulo del que proceden los datos. A grandes rasgos, Ideker
et al. llevan a cabo un estudio sistémico en levadura de la respuesta del metabolismo de
la galactosa a distintas perturbaciones como deleción o sobrexpresión de genes, o cambios
de temperatura o de las condiciones del medio. Ante tales perturbaciones, cuantificaron
el mRNA y la expresión de proteı́nas a escala genómica y los integraron con redes de
interacción entre proteı́nas y proteı́na-DNA disponibles en aquel momento.
4
Asimismo, en otra parte de la práctica trabajaremos con la red de interacciones fı́sicas
entre proteı́nas de Saccharomyces cerevisiae, obtenida desde numerosas fuentes y que se
publicó en:
Han et al. Evidence for dynamically organized modularity in the yeast proteinprotein interaction network. Nature (2004) vol. 430 (6995) pp. 88-93
No es necesario descargar las redes del material suplementario del articulo ya que los
datos se encuentran accesibles dentro del directorio Cytoscape_v2.8.0/sampleData de
la carpeta de Cytoscape.
5
Capı́tulo 2
Manejo y Visualización de Redes en
Cytoscape
Importando redes
Para empezar a trabajar con Cytoscape lo primero que necesitamos es crear o cargar
una red. Cytoscape reconoce numerosos formatos de archivos (.sif, .nnf, .gml, .xls, . . . ),
permite la importación desde un archivo tabular (.txt, .xls) y ofrece la posibilidad de
cargar una red a través de un webservice. Si nos interesa, también podemos crear o
modificar nuestra propia red, añadiendo los nodos y los enlaces pertinentes. Por último,
Cytoscape tiene la posibilidad de cargar una sesión previamente guardada (.cys). La
sesión, además de guardar la red, también guarda los atributos modificados (color, forma,
layout,. . . ) ası́ como la posición de las ventanas y algunas otras preferencias.
Importar red galFitered
Uno de los archivos con los que trabajaremos en la práctica es galFiltered.sif que
se encuentra en el directorio sampleData de la carpeta de instalación de Cytoscape (ver
sección Redes Biológicas a estudiar). Antes de cargarlo conviene echarle un vistazo con
un editor de texto. El formato SIF (Simple Interaction File) es el más sencillo. Consta
únicamente de 3 columnas que representan el nodo de origen, el tipo de interacción y
el nodo de destino en este orden. Generalmente, mientras los nodos suelen ser identificadores de genes o proteı́nas, los tipos de interacción suelen hacer alusión a la relación
que mantienen. Para importar esta red seguiremos los pasos siguientes:
Ir al menú File → Import → Network (multiple file types).
Seleccionar la opción Local y darle a Select.
Abrir el directorio sampleData que se encuentra dentro de la carpeta de instalación
de Cytoscape
Seleccionar galFiltered.sif y hacer click primero en Open y luego en Import.
6
Tras esto verás algo como la Figura 2.1.
Figura 2.1: Importación correcta de la red galFiltered.sif
Importar atributos de la red
En ocasiones nos puede interesar añadir información complementaria de los nodos
como anotación funcional, ubicación celular, etc. En esta ocasión añadiremos datos de
expresión génica. Para ello:
Ve al menú File → Import → Attribute from Table (Text/MS Excel)
En nuestro caso queremos importar información de los nodos por lo que deberemos
asegurarnos de que esté seleccionado el botón Node de la sección Data Sources
Haz click en Select File(s) y selecciona el fichero galExpData.csv
En la sección Advanced haz click en Show Text File Import Options y selecciona
la coma como separador de campos
Haz click también en Transfer first line attribute names de la sección Attribute
Names
Finalmente selecciona la opción Import Everything (Key is always ID) para
asegurarse que se importan todas las columnas y no sólo aquellas que coinciden con
alguno de los parámetros que ya tienes en la red
7
Figura 2.2: Import Annotation File
Si todo ha ido bien deberı́as ver algo similar a la Figura 2.2. Para terminar haz click
en Import.
Detente un momento y trata de observar lo que estamos haciendo. Hemos importado
un fichero con datos de expresión para los distintos genes que tenemos en la red obtenidos
a partir de los experimentos de Ideker et al. que ya vimos en el apartado Redes Biológicas
a estudiar. En este fichero (galExpData.csv) tenemos 8 columnas. La primera (GENE )
hace referencia al identificador del gen que estamos anotando. La segunda COMMON se
refiere al nombre común que recibe dicho gen. Esta es una información añadida que no
estaba en nuestra red original por lo que es un ejemplo de cómo cambiar los identificadores
de los nodos añadiendo atributos a las redes. Las 6 columnas siguientes, representan
3 condiciones experimentales diferentes (gal1R, gal4R, gal80R), en cada una de ellas
reprimiendo la expresión de un gen en particular gal1, gal4 o gal80 respectivamente.
Para cada una de las condiciones tenemos además 2 columnas: una que hace referencia
al propio valor de expresión (exp) y otra en la que se especifica el valor de significancia
(sig) o p-value del mismo.
En la parte inferior de Cytoscape se encuentra el panel de datos. Dicho panel es útil
para mostrar los atributos de los nodos y enlaces que el propio usuario selecciona sobre
la red. Para ver los nuevos atributos que has importado, selecciona un nodo de la red y
haz click en el botón Select All Attributes. De esta manera, podremos ver detalladamente,
todos los atributos que hayamos importado o incluso calculado en el propio Cytoscape.
8
Problema
Ahora que hemos importado los atributos de la red, tenemos todos los datos de
expresión de los nodos en nuestro Data Panel. ¿Serı́as capaz de encontrar aquellos
genes que están diferencialmente expresados cuando reprimimos el gen gal80 usando
el Data Panel ?¿Alguno de estos genes puede estar relacionado con el metabolismo de
la galactosa?
9
Visualización de las redes y Análisis de expresión
El hecho de visualizar una red de una manera u otra puede parecer un asunto trivial,
pero nada más lejos de la realidad. En muchas ocasiones, la representación de la red
nos puede ayudar a observar propiedades o extraer conclusiones que quizá de otro modo
nunca hubiéramos apreciado. Hagamos una pequeña demostración:
Selecciona en el menú Layout → Cytoscape Layouts → Force-Directed Layout.
A continuación en el tab VizMapper selecciona la opción Sample1 en la caja
Current Visual Style.
Tras aplicar este estilo, podemos ver como, además de aplicar distintos cambios no informativos como el color de los nodos, también hemos alterado la etiqueta, el color y
el tipo de las conexiones en función de si la interacción es de tipo proteı́na-proteı́na o
proteı́na-DNA. Como ya hablamos en la sección Redes Biológicas a estudiar, Ideker et
al. emplearon ambos tipos de evidencias en la reconstrucción de la red por lo que ahora
podemos visualizar de una manera clara y sencilla los dos tipos de interacciones. Ahora comprenderás que una visualización apropiada ayuda mucho a la comprensión de las
redes. Veamos cómo podemos personalizar la visualización a nuestro gusto.
Layouts
La mejor forma de entender los Layouts es probándolos. Ası́ que aplica unos cuantos
del menú Layout. Algunos de ellos son pesados (weighted ) en función de algún atributo
y otros en cambio, simplemente ordenan la red en función de la topologı́a. Otra opción
interesante es que puedes aplicar un layout sólo a los nodos que tienes seleccionados.
Esta opción es muy práctica especialmente en determinados redes con topologı́as muy
particulares.
Una vez aplicado un layout, es frecuente que te interese mover algunos nodos para que
la visualización quede a tu gusto. Obviamente, puedes mover los nodos uno a uno pero
para mejorar la visualización es más interesante el panel Align and Distribute que puedes
encontrar en el menú Layout → Align and Distribute. Con este panel es mucho más
sencillo obtener una visualización de la red personalizada. De igual manera, el panel Scale
(Layout → Scale) puede ser de gran utilidad.
Problema
De entre todos los nodos de la red existe uno que no tiene identificador. ¿Serı́as
capaz de encontrarlo?
10
Visualizando Datos de Expresión (VizMapper)
Los datos de expresión se suelen utilizar en Cytoscape para cambiar los atributos
visuales de la red. La herramienta VizMapper, integrada en el propio núcleo del programa,
permite cambiar la representación gráfica en base a la información disponible. Esta opción
ofrece una gran potencia a la hora de integrar e interpretar los resultados en un contexto
biológico.
Etiquetado de los nodos
Para cambiar los atributos de los nodos recurriremos por tanto a VizMapper :
En primer lugar abre el VizMapper, bien seleccionando el tab en el panel de la
izquierda o bien haciendo click en el icono de la barra de herramientas.
En el desplegable Current Visual Style seleccionamos default y el aspecto de la red
volverá al original. Para no modificar este estilo crearemos otro estilo como copia de
este haciendo click en el icono, seleccionando Copy existing visual style... y dando
un nombre al estilo personalizado.
Haz Zoom hasta que las etiquetas de los nodos sean visibles.
Haz click en la segunda columna de la fila Node Label in Visual Mapping Browser. Esto abrirá un desplegable en el que elegiremos la opción COMMON.
Este cambio provocará que en lugar de mostrar el identificador del gen como etiqueta de los nodos, mostrará el nombre común (COMMON ) que hemos proporcionado al
importar los datos de expresión de la red en la sección Importar atributos de la red.
Coloreando los nodos
Una forma habitual de colorear los nodos cuando se tienen datos de expresión es
mediante la gama rojo/verde para representar represión o sobrexpresión respectivamente.
Para ello:
Haz doble-click sobre la lı́nea Node Color en la sección Unused Visual Properties del Visual Mapping Browser. Con esto la lı́nea de Node Color se moverá
a las primeras opciones de Visual Mapping Browser.
Selecciona la celda Please select a value de la lı́nea Node Color. Esto producirá
un desplegable con los atributos disponibles para colorear. Selecciona ”gal80Rexp”
(datos de expresión del experimento de represión de gal80 ).
Selecciona ahora en el desplegable la opción Continuous Mapping para que la graduación de color sea de manera continua. Tras esto, la red cambiará a una escala de
grises.
11
Para cambiar los colores de la escala, haz click sobre el gradiente para editarlo. Haz
doble click sobre el triángulo que se encuentra más a la izquierda en color negro.
Este es el color que representará el color más bajo de expresión por lo que asócialo
con un color rojo brillante.
Repite la misma acción con el segundo triángulo negro. Esto cambiará el gradiente
de rojo a blanco.
A continuación, desliza el siguiente triángulo (blanco) hacia un valor próximo a 0
para representar aquellos genes que no están ni sobrexpresados ni reprimidos.
Haz click sobre Add para añadir un nuevo triángulo a la escala. Haz click sobre él
y selecciona un color verde brillante.
Cambia también el color del último triángulo al mismo verde brillante.
Cierra la ventana y comprueba que la red se asemeja al gradiente que se muestra
en la Figura 2.3
Figura 2.3: Gradiente de expresión de VizMapper
Un problema al que nos enfrentamos es que algunos de los nodos no tienen datos de
expresión y por tanto no están siendo coloreados en base a nuestra escala y mantienen
el color rosa original que se puede confundir dentro de nuestro gradiente. Para corregir
este comportamiento bastarı́a con cambiar el color por defecto de los nodos a uno fuera
de nuestro espectro:
Haz click en la red que aparece dentro de Defaults en el panel de VizMapper.
Selecciona Node Fill Color y sustitúyelo por un color gris. Haz click en Apply.
Disminuye el zoom para visualizar los nodos sin datos de expresión.
12
Cambiando la forma de los nodos
En el apartado anterior hemos empleado los datos de expresión de los genes de la
columna ”gal80Rexp”. Esta medición se lleva a cabo cuantificando la cantidad de mRNA
cuando reprimimos la expresión del gen gal80. No obstante, cuando hemos importado
los datos de expresión, también hemos importado el valor de significación de la diferencia de expresión para cada uno de los genes. Es decir, con qué confianza este gen está
diferencialmente expresado con respecto a una muestra control. En los siguientes puntos,
utilizaremos esta información para cambiar la forma de los nodos según consideremos
esta diferencia significativa o no.
Haz doble click sobre la fila de Node Shape en el Visual Mapping Browser.
Selecciona ”gal80Rsig” como atributo en el menú desplegable Please select a value.
Selecciona Continuous Mapping en el desplegable Please select a mapping.
Haz click sobre la fila Graphical View y se te abrirá una ventana de edición.
Haz click en Add para dividir las opciones entre un rango de valores.
Haz doble click sobre el nodo de la izquierda y sustitúyelo por un rectángulo.
Desliza el triángulo negro hacia la izquierda tomando un valor próximo a 0.05 que
definirá nuestro intervalo de confianza tal y como se muestra en la Figura 2.4.
Figura 2.4: Edición de la forma del nodo en función del p-value usando VizMapper
13
Ahora podemos comparar de un simple vistazo, aquellos nodos cuya expresión esta
diferencialmente alterada por el hecho de reprimir la expresión del gen ”gal80”.
De igual manera, puedes aplicar todo lo aprendido con VizMapper para cambiar
cualquier otro parámetro visual a tu gusto. Puede ser un buen momento para guardar
todos los avances que has realizado hasta ahora.
Filtrado
Como vimos al inicio de la sección Visualización de las redes y Análisis de expresión,
en esta red estamos representando una combinación de interacciones proteı́na-proteı́na
(pp) y proteı́na-DNA (pd). A continuación, vamos a filtrar las interacciones ”pp” para
quedarnos únicamente con las interacciones proteı́na-DNA.
Haz click sobre el tab Filters del Control Panel.
En el desplegable Attribute/Filters selecciona ”edge.interaction” y añádelo mediante el botón Add.
Escribe las letras ”pp” en la caja de texto para especificar que quieres todas aquellas
interacciones que coinciden con esta expresión.
Haz click en el botón Apply Filters para aplicar el filtro que hemos creado y verás
cómo se seleccionan algunas de las interacciones.
Seleccionamos en el menú Edit → Delete Selected Nodes and Edges puesto
que éstas son las interacciones que no nos interesan.
Aplicamos un layout como Force-Directed Layout para conseguir una visualización más amigable.
Interpretar la Red
Podemos ver que hay 3 genes brillantes (altamente sobrexpresados) en la misma región
del grafo y que hay 2 nodos que interaccionan con los 3: GAL4 (YPL248C) y GAL11
(YOL051W). Vamos a crear una subred a partir de esta para facilitar la interpretación:
Seleccionamos GAL4 y GAL11 y seleccionamos sus vecinos más cercanos (Select
→ Nodes → First Neighbors of Selected Nodes).
Creamos la subred mediante el menú File → New → Network → From Selected
Nodes, All Edges.
Aplicamos un layout para obtener figuras como las que se muestran en la Figura
2.5.
14
Gal1R
MIG1
Gal4R
MIG1
GAL1
GAL80
GAL11
GAL4
CYC1
GCY1
GAL2
GAL80
CYC1
GCY1
GAL2
GAL11
GAL4
GAL7
GAL7
GAL7
GAL1
GAL10
GAL10
GAL11
GAL4
MIG1
GAL1
GAL10
GAL80
Gal80R
CYC1
GCY1
GAL2
Figura 2.5: Expresión de la subred de regulación de GAL4 y GAL11 en los distintos casos
experimentales analizados tras reprimir Gal1, Gal4 y Gal80 respectivamente. El color de
los nodos representa los niveles de expresión y la forma si el p-value es menor (cuadrado)
o mayor (cı́rculo) de 0.05.
Problema
Hasta ahora has analizado la subred de GAL4 y GAL11 a partir de la expresión de
los genes tras reprimir GAL80. No obstante, podrı́a ser interesante ver lo que sucede
si reprimimos GAL1 ó GAL4 ya que poseemos esos datos de expresión y los podemos
mostrar simplemente cambiando el mapping del VizMapper tal y como se muestra en
la Figura 2.5.
Teniendo en cuenta que no tenemos datos de direccionalidad (qué proteı́na regula
a qué gen), ¿serı́as capaz de plantear un modelo de regulación? En el articulo de
Ideker et al. se plantea un posible modelo. ¿Estas de acuerdo con él?
Te puede servir de ayuda obtener más información de los nodos. Prueba la opción
LinkOut → Entrez → Gene haciendo click con el botón derecho sobre cualquiera
de ellos.
15
Análisis funcional
En esta sección vamos a trabajar de nuevo con la red galFiltered, por lo que serı́a
conveniente cargar de nuevo la sesión galFiltered.cys que se encuentra en el directorio
sampleData. El objetivo de esta parte de la práctica será encontrar clusters de genes
que co-expresen entre ellos. Además, analizaremos si están enriquecidos en alguna función utilizando Gene Ontology. Como ya vimos en la sección Visualización de las redes
y Análisis de expresión, la represión de los genes GAL1, GAL4 y GAL80 provoca un
efecto diferente sobre la expresión de algunos de los genes con los que interaccionan. A
continuación generaremos clusters de genes que co-expresen en las 3 condiciones (Gal1R,
Gal4R y Gal80R) para buscar posibles módulos funcionales.
Generar clusters de coexpresión
Para generar los clusters utilizaremos el plugin clusterMaker:
Selecciona Plugins → Cluster → Hierarchical cluster.
En Source for array data selecciona, node.gal1RGexp, node.gal4RGexp y node.gal80Rexp
ya que usaremos los valores de expresión en las 3 condiciones tal y como se muestra
en la Figura 2.6. Utilizaremos además, la distancia euclı́dea como primera aproximación para realizar nuestro clustering jerárquico.
Deselecciona Only use selected nodes/edges for cluster.
Haz click en Create clusters y después en Visualize Clusters.
Figura 2.6: Opciones de clusterMaker
16
Si todo ha ido bien observarás un resultado como el que se muestra en la Figura 2.7.
En ella puedes observar un heatmap con los datos de expresión en las 3 condiciones ası́
como un dendrograma en el que se observa la clusterización de los valores. De esta forma,
puedes hacer click en cualquier clado del dendrograma y de esta forma seleccionar los
genes agrupados en él.
Figura 2.7: Resultado de clusterMaker
En el clustering podemos observar cómo en la parte superior nos ha agrupado algunos
genes cuya expresión se ve especialmente afectada ya que los vemos en colores brillantes.
Vamos a tratar de analizar exhaustivamente estos casos. Para ello:
Selecciona en el dendrograma el clado superior en el que aparecen una serie de
genes diferencialmente expresados. Verás como la expresión de dichos genes aparece
representada en otro heatmap en la parte central de la ventana, ası́ como los identificadores de los mismos.
Oculta la ventana para volver a la red y verás los genes que has seleccionado en
clusterMaker también seleccionados en la red.
Problema
Ahora que has identificado los nodos que estaban presentes en este cluster de
coexpresión, ¿son estos resultados consistentes con los resultados que obtuviste en
el análisis de expresión (Figura 2.5)? ¿Qué crees que sucederı́a si el clustering lo
realizáramos sólo con las muestras Gal4R y Gal80R?
17
Enriquecimiento de términos GO
A continuación vamos a emplear el plugin BiNGO para encontrar términos Gene
Ontology sobrerrepresentados en un grupo de genes. Gene Ontology es, como su propio
nombre indica, una ontologı́a. Esto es, un lenguaje controlado que representa conceptos
en 3 ámbitos de la Biologı́a Celular: proceso biológico, componente celular y función
molecular. Es por tanto un vocabulario de conceptos para etiquetar genes o sus productos
de una forma ordenada y jerárquica.
Trabajando con redes es muy frecuente tener un grupo de genes o proteı́nas con una
serie de términos funcionales asociados a cada uno. Por ello puede ser interesante realizar
un test hipergeométrico para ver qué funciones están sobrerrepresentadas. Es precisamente ésto lo que hace BiNGO y lo que trataremos de realizar en esta sección. Puedes
analizar cualquier subselección de nodos pero ahora trataremos de ver el enriquecimiento
en términos GO de los genes que hemos encontrado coexpresados en clusterMaker (GAL1,
GAL7 y GAL10).
Figura 2.8: Opciones del plugin BINGO.
Asegúrate que los nodos a analizar están seleccionados.
Selecciona ahora en el menú Plugins → Start BiNGO 2.4.4.
En el menú de BiNGO introduce un nombre para el cluster y revisa el resto de
opciones. Algunos parámetros corresponden al test estadı́stico que vamos a ejecutar
o a la corrección por multiple testing. Otro parámetro importante es qué ontologı́a
de Gene Ontology vamos a emplear. En este caso, analizaremos al nivel de proceso
biológico. Si necesitas ayuda haz click en el botón Help.
18
Finalmente haz click en Start BiNGO.
Observarás como resultado una tabla con los términos GO y las estadı́sticas más importantes del enriquecimiento. Además podrás ver una representación de la red con los
términos GO encontrados y una leyenda con el gradiente de color. Para mejorar la visualización de la red puedes cambiar el layout por uno jerárquico o emplear la herramienta
del menú Layout → Scale para jugar con el espacio entre nodos. El resultado deberı́a
parecerse al que se observa en la Figura 2.9.
positive
regulation of
transcription
by galactose
regulation of
transcription
by galactose
positive
regulation of
transcription
by carbon
catabolites
regulation of
positive
transcription regulation of
by carbon
transcription,
catabolites DNA-dependent
cellular
regulation of
positive
response to transcription, regulation of
nutrient
DNA-dependent transcription
positive
regulation of
RNA
metabolic
process
response to
nutrient
cellular
response to
nutrient
levels
regulation of
transcription
positive
positive
regulation of
regulation of
macromolecule
gene
biosynthetic
expression
process
positive
regulation of
cellular
biosynthetic
process
response to
chemical
stimulus
response to
nutrient
levels
cellular
response to
extracellular
stimulus
positive
regulation of
regulation of
regulation of
regulation of
macromolecule
cellular
gene
macromolecule
biosynthetic
biosynthetic
expression
metabolic
process
process
process
positive
regulation of
biosynthetic
process
cellular
response to
stimulus
cellular
regulation of
response to
regulation of
cell
response to macromolecule
extracellular
biosynthetic
communication
external
metabolic
stimulus
process
stimulus
process
cellular
response to
chemical
stimulus
response to
external
stimulus
cellular
process
regulation of
primary
metabolic
process
regulation of
cellular
metabolic
process
positive
regulation of
nucleobase,
nucleoside,
nucleotide
and nucleic
acid
regulation of
metabolic
nucleobase,
process
nucleoside,
nucleotide
and nucleic
acid
metabolic
process
positive
regulation of
metabolic
process
regulation of
metabolic
process
regulation of
cellular
process
regulation of
RNA
metabolic
process
carbohydrate
phosphorylation
galactose
catabolic
process via
UDP-galactose
phosphorylation
galactose
catabolic
process
phosphate
metabolic
process
hexose
catabolic
process
galactose
metabolic
process
phosphorus
metabolic
process
monosaccharide
catabolic
process
hexose
metabolic
process
alcohol
catabolic
process
positive
regulation of
cellular
metabolic
process
positive
regulation of
nitrogen
compound
metabolic
process
regulation of
nitrogen
compound
metabolic
process
positive
regulation of
cellular
process
cellular
metabolic
process
cellular
carbohydrate
metabolic
process
small
molecule
catabolic
process
carbohydrate
catabolic
process
catabolic
process
carbohydrate
metabolic
process
small
molecule
metabolic
process
positive
regulation of
biological
process
response to
stimulus
cellular
monosaccharide
carbohydrate
metabolic
catabolic
process
process
alcohol
metabolic
process
primary
metabolic
process
regulation of
biological
process
metabolic
process
biological
regulation
biological_process
Figura 2.9: Aspecto de la red Biological Process con un layout jerárquico con los nodos
coloreados por el enriquecimiento en un determinado término GO.
Problema
Podemos observar que existe un enriquecimiento en los términos relacionados
con el metabolismo de la galactosa ¿Tienen sentido para ti los resultados que has
obtenido? ¿Qué sucederı́a si utilizaras otra ontologı́a como Molecular Function? Prueba a realizar el enriquecimiento cogiendo ahora todos los genes que empleaste en el
análisis de la Figura 2.5.
19
Capı́tulo 3
Análisis topológico en R
La lista de parámetros que se usan para describir la topologı́a de una red es enormemente larga y depende en gran medida de la observación que se quiera realizar. En ésta
sección, aprenderemos a calcular algunos de los parámetros topológicos más importantes
para el estudio y análisis de redes biológicas, y los compararemos con los obtenidos para
redes artificiales. Para ello nos valdremos del entorno R y de su paquete de análisis de
grafos igraph. Si bien hemos visto cómo Cytoscape nos ofrecece multitud de opciones a la
hora de interactuar con nuestras redes, R es una herramienta especialmente interesante
cuando queremos trabajar con una mayor cantidad de datos o cuando queremos realizar
análisis de mayor complejidad.
Para realizar los siguientes pasos necesitaremos tener instalado tanto R como el paquete igraph. Si aún no lo tienes instalado, puedes recurrir al apartado anexo Instalación
de igraph en R. Una vez instalado, bastará con abrir una consola de R y cargar la librerı́a
igraph mediante el siguiente comando:
> library(igraph)
Puesto que ésta puede ser nuestra primera experiencia con el paquete, conviene echar
un vistazo a la ayuda del mismo. Nos valdremos del comando help.start(). Esto nos
abrirá un navegador donde encontraremos la ayuda de R. Bastará con hacer click en Packages y posteriormente en igraph. Echa un vistazo por encima y reconocerás muchas de
las funcionalidades de las que hemos hecho uso en Cytoscape. Del mismo modo, encontrarás funciones para calcular parámetros topológicos como el diámetro de la red o el
camino mı́nimo entre dos nodos que implementan algunos de los algoritmos vistos en la
clase de Teorı́a de grafos.
Cargando distintos tipos de redes
En primer lugar, importaremos la red de interacciones de proteı́nas fyi de Han et al.
(ver sección Redes Biológicas a estudiar). Este fichero es básicamente una lista de los
pares de nodos que interaccionan. Para importarlo utilizaremos la función read.graph()
20
que, además de permitir cargar ficheros locales, permite importar redes situadas en un
servidor remoto. Una vez cargada, podemos utilizar la función summary() para mostrar
un resumen de la misma:
> fyi <- read.graph("http://csbg.cnb.csic.es/master2012/www/data/fyi.net",
+
directed=FALSE)
> summary(fyi)
Vertices: 1379
Edges: 2493
Directed: FALSE
No graph attributes.
No vertex attributes.
No edge attributes.
A continuación, crearemos una red aleatoria equivalente a fyi respecto al número de
nodos y conexiones. Existen dos modelos matemáticos para generar redes aleatorias: el
Modelo de Erdós-Rényi (1959) y el Modelo de Gilbert (1959), ambos implementados en
la función erdos.renyi.game(). El primero genera una red aleatoria dado el número
de nodos y la probabilidad de que dos nodos estén conectados (G(n,p)), mientras que
el segundo genera una red aleatoria con un número concreto de nodos y conexiones
(G(n,m)). Éste último será el que utilicemos en nuestro caso, ya que nos interesa generar
una red aleatoria con el mismo número de nodos y conexiones que fyi. Recuerda que
puedes consultar la ayuda de cualquier función con el comando help() o empleando el
operador ? (ej. ?erdos.renyi.game).
> erdosgraph <- erdos.renyi.game(length(V(fyi)), length(E(fyi)),
+
type="gnm")
Problema
Ahora que has sido capaz de crear redes aleatorias mediante el Modelo de Gilbert,
¿serı́as capaz de generar una red usando el Modelo de Erdós-Rényi de 100 nodos y
una probabilidadd de 0.5? ¿Has obtenido el número de nodos y conexiones esperado?
Parametros topológicos más generales
Caminos mı́nimos
La librerı́a igraph nos permite calcular fácilmente los caminos mı́nimos entre nodos.
Utilizando por ejemplo la función shortest.paths() podemos calcular la distancia mı́nima entre un conjunto de nodos y el resto de la red. La distancia mı́nima media de toda
la red nos da una idea de cómo de alejados están los nodos
21
> average.path.length(erdosgraph)
[1] 5.672712
> average.path.length(fyi)
[1] 9.410451
Diámetro
El diámetro de una red se define como el mayor camino mı́nimo en una red, o dicho
de otro modo, el camino mı́nimo entre los dos nodos más alejados de la red. La Figura 3.1
muestra el diámetro de la red fyi
> diameter(erdosgraph)
[1] 12
> diameter(fyi)
[1] 25
Componente conexo
Podemos igualmente analizar el tamaño de los componentes conexos de la red. La
función cluster() calcula todas las subredes cuyos nodos están conectados entre sı́.
> c <- clusters(fyi)
> c$no
#calculamos los clusters
#¿cuántos componentes distintos hay?
[1] 162
> table(c$csize)
2
81
3
31
4
11
5
14
#¿Cómo de grandes son cada uno de ellos?
6
4
7
4
8
3
9
5
10
3
11
2
13
1
16
1
30 778
1
1
Problema
Como puedes observar, en la red fyi hay 162 componentes conexos, de los cuales
81 están formados sólo por dos nodos. ¿A qué crees que se debe el hecho de que no
existan nodos aislados?
Calcula los componentes conexos para nuestra red aleatoria equivalente según el
Modelo de Gilbert. ¿Qué diferencias hay? ¿A qué crees que se deben?
22
●
●●
●●
●●
● ●
●●
●
● ●●
●●
●●
●
●
●
● ●● ●
●●
●●●
●
●
● ●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●● ●
●
● ●●
●
●●
●
●● ● ●
● ●
●●●
●
●
●
●● ●
●●
●
●
●
●
●
●
●
●
●
●
●
● ●
● ● ●●
●●
●● ●
●
●●
●
●
●
●
● ●●
●
●●
●
●
● ●
●●
●
●
●
●
●
●
● ●
●
● ● ●●
●●● ●
●
●
●
●
●
●
●
●
●
●
●
● ●●
●● ●
●●● ●●●
●●
● ● ●
● ● ● ● ● ●● ●
● ●
● ●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●●
●
●
●● ● ●
●●●●
●
● ●
●●
● ●
●
●
● ● ●
● ● ●
● ●
●
●
● ●
● ●●
●
●●
●
●
●
●
●●
● ●
●
●● ●●
● ● ●●
● ● ●●
●
●
● ●●
●
●
●● ●
●
● ●
●
●
●
●
●
● ●●●
●●
● ●
● ●●
●● ●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●●
●
●
●
●
●
●● ●
●
●
●
●
● ●
●● ● ●
●
●
●
● ●
● ●●
●
●
●●
● ●
●
●●
●
● ● ●
●● ●
●
●●
● ●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
●
●
●
●●●
●
● ●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
● ● ●
●
●
●
● ●●●
●
●
●
●
● ●
●
●
●●
●● ● ●
●●
●
●
●●
● ●
●
● ●
●
●
●
●●
●
● ●
●
●
●
●
●
●
●
● ●●●
● ● ● ● ●●
●●
●●
●
●●
● ●
●●
●
● ● ● ●●
● ●
●● ●
● ●
●
●
●
●●
●●
●
●
●
●
●●
●
● ● ●
●●
●
● ●
●
●●●
●●
● ●
●
●
● ● ●●
●●
●
●●●
●
● ●● ● ●
●
●●
●
●
●
●●●
●
●
●
●●●●●
●
● ●
●●
●●
●
●
●●
●
● ●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●
●
●● ●
●● ●
●● ● ● ●●
●
● ●●
●
●
●
●
●● ●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
● ● ● ●● ●
●
●
●
● ●
●
●
●
●
●● ● ●
●
●
●
●
●●
●
●
●●●
● ●●
●
●
●● ●
● ● ● ●●
●
● ●●
● ● ●
●● ● ●
●
● ●
●●●
●
● ● ● ●
●
●
● ● ●
●
●
● ●●
● ●●
●●
●
●●
● ●●
● ●
●
●
●●
● ●● ● ●
●
● ● ● ●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●● ● ●
●●●
●●
● ●
●
●
● ● ●
● ●● ●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●● ●
●●●
●●
●
●
● ●●
●
●
●
● ●● ●
● ●
●
●●
●
●●
●
●
● ● ●
●
● ●
●
●
●
●
●
●
● ●
●
●●
● ●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
● ● ●
●
●
●
●
●
● ●●
●
●
● ● ●
● ●● ● ●
●● ●
● ●●
●
●
●
● ●● ●
●●
● ●
●● ●
●
●●
●●
●
● ●
● ●●
●
●
●
●
●
●
●
●
●● ●
● ● ● ●●●
●●
●● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
● ●
●
● ● ●●
● ●
● ●●
●
● ●
●
●
●
●
●●
●
●
●●
●●
● ● ●● ●
● ●●
●
●●●
●●●
●
●● ●
●● ● ●
●
● ●
●
●
●● ●
● ●
●
●● ●
●●●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
● ●●
● ●
●
●
●
●
●
●
●
●
● ●
●
●●● ●
●
●
●●●
●
● ●
●
●
●●●
●
●
● ● ●
●
●●
●● ● ● ●
●
●
●
●
●
●●
● ●
●●
●● ●
●●
●
●●
●
●
●
●● ● ●
●
●
●
● ●
●
●
●
●
● ●●
●
●
●
● ●
●
●
●
●
●●
● ● ●
●
●●
●●
●●
●
● ●
●
● ●●
●●
● ●●● ●
● ●
●●
●
●●
●
● ● ●
●
●
● ●●
●
●
●
●
●
● ● ● ● ●
● ●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
● ●●● ●●
● ●●
● ●●
●
● ●●
●
●●
●
● ●
●●
●●●●
●
●●
●●
●
● ●
●
● ●
●●
● ●
●●●
●● ●
●●
●
●
●
● ●●
●
● ●● ●
●●
●
●
●
●
●
●
●
●
●●
●● ●
●●
●
●
●●
●●
●
●
●
●●
●
●
● ●
●●
● ●●
●
●
●● ●
●
●●
●
●
● ● ● ● ●● ●
●●
●●
● ● ●
●
● ●●●
● ●● ● ●
● ●
●
●
●
●
●
●
● ●
●
●
●
●
●● ● ●
● ●
●● ● ●
●
●●
●
●● ● ● ●●
●●
Figura 3.1: Diámetro de la red fyi (en rojo)
23
●
●●
●●
●●
● ●
●●
●
● ●●
●●
●●
●
●
●
● ●● ●
●●
●●●
●
●
● ●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●● ●
●
● ●●
●
●●
●
●● ● ●
● ●
●●●
●
●
●
●● ●
●●
●
●
●
●
●
●
●
●
●
●
●
● ●
● ● ●●
●●
●● ●
●
●●
●
●
●
●
● ●●
●
●●
●
●
● ●
●●
●
●
●
●
●
●
● ●
●
● ● ●●
●●● ●
●
●
●
●
●
●
●
●
●
●
●
● ●●
●● ●
●●● ●●●
●●
● ● ●
● ● ● ● ● ●● ●
● ●
● ●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●●
●
●
●● ● ●
●●●●
●
● ●
●●
● ●
●
●
● ● ●
● ● ●
● ●
●
●
● ●
● ●●
●
●●
●
●
●
●
●●
● ●
●
●● ●●
● ● ●●
● ● ●●
●
●
● ●●
●
●
●● ●
●
● ●
●
●
●
●
●
● ●●●
●●
● ●
● ●●
●● ●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●●
●
●
●
●
●
●● ●
●
●
●
●
● ●
●● ● ●
●
●
●
● ●
● ●●
●
●
●●
● ●
●
●●
●
● ● ●
●● ●
●
●●
● ●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
●
●
●
●●●
●
● ●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
● ● ●
●
●
●
● ●●●
●
●
●
●
● ●
●
●
●●
●● ● ●
●●
●
●
●●
● ●
●
● ●
●
●
●
●●
●
● ●
●
●
●
●
●
●
●
● ●●●
● ● ● ● ●●
●●
●●
●
●●
● ●
●●
●
● ● ● ●●
● ●
●● ●
● ●
●
●
●
●●
●●
●
●
●
●
●●
●
● ● ●
●●
●
● ●
●
●●●
●●
● ●
●
●
● ● ●●
●●
●
●●●
●
● ●● ● ●
●
●●
●
●
●
●●●
●
●
●
●●●●●
●
● ●
●●
●●
●
●
●●
●
● ●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●●
●
●
●● ●
●● ●
●● ● ● ●●
●
● ●●
●
●
●
●
●● ●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
● ● ● ●● ●
●
●
●
● ●
●
●
●
●
●● ● ●
●
●
●
●
●●
●
●
●●●
● ●●
●
●
●● ●
● ● ● ●●
●
● ●●
● ● ●
●● ● ●
●
● ●
●●●
●
● ● ● ●
●
●
● ● ●
●
●
● ●●
● ●●
●●
●
●●
● ●●
● ●
●
●
●●
● ●● ● ●
●
● ● ● ●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●● ● ●
●●●
●●
● ●
●
●
● ● ●
● ●● ●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●● ●
●●●
●●
●
●
● ●●
●
●
●
● ●● ●
● ●
●
●●
●
●●
●
●
● ● ●
●
● ●
●
●
●
●
●
●
● ●
●
●●
● ●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
● ● ●
●
●
●
●
●
● ●●
●
●
● ● ●
● ●● ● ●
●● ●
● ●●
●
●
●
● ●● ●
●●
● ●
●● ●
●
●●
●●
●
● ●
● ●●
●
●
●
●
●
●
●
●
●● ●
● ● ● ●●●
●●
●● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
● ●
●
● ● ●●
● ●
● ●●
●
● ●
●
●
●
●
●●
●
●
●●
●●
● ● ●● ●
● ●●
●
●●●
●●●
●
●● ●
●● ● ●
●
● ●
●
●
●● ●
● ●
●
●● ●
●●●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
● ●●
● ●
●
●
●
●
●
●
●
●
● ●
●
●●● ●
●
●
●●●
●
● ●
●
●
●●●
●
●
● ● ●
●
●●
●● ● ● ●
●
●
●
●
●
●●
● ●
●●
●● ●
●●
●
●●
●
●
●
●● ● ●
●
●
●
● ●
●
●
●
●
● ●●
●
●
●
● ●
●
●
●
●
●●
● ● ●
●
●●
●●
●●
●
● ●
●
● ●●
●●
● ●●● ●
● ●
●●
●
●●
●
● ● ●
●
●
● ●●
●
●
●
●
●
● ● ● ● ●
● ●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
● ●●● ●●
● ●●
● ●●
●
● ●●
●
●●
●
● ●
●●
●●●●
●
●●
●●
●
● ●
●
● ●
●●
● ●
●●●
●● ●
●●
●
●
●
● ●●
●
● ●● ●
●●
●
●
●
●
●
●
●
●
●●
●● ●
●●
●
●
●●
●●
●
●
●
●●
●
●
● ●
●●
● ●●
●
●
●● ●
●
●●
●
●
● ● ● ● ●● ●
●●
●●
● ● ●
●
● ●●●
● ●● ● ●
● ●
●
●
●
●
●
●
● ●
●
●
●
●
●● ● ●
● ●
●● ● ●
●
●●
●
●● ● ● ●●
●●
Figura 3.2: Componente conexo de la red fyi (en rojo)
24
Cualidades de las Redes Biológicas
Coeficiente de clustering
El coeficiente de clustering o transitividad cuantifica la probabilidad de que los nodos
adyacentes a un nodo estén conectados. En un grafo, la transitividad de un nodo es uno si
todos sus nodos vecinos están conectados entre sı́, y cero si no hay ninguna conexión entre
ellos. Para entenderlo mejor, crearemos un pequeño grafo t1 y calcularemos el coeficiente
de clustering para uno de los nodos:
>
>
>
>
>
>
>
>
>
>
>
t1 <- graph.formula(A-B:C:D:E)
#creamos un grafo con 5 nodos
t1$layout <- layout.circle
#aplicamos un layout en cı́rculo
V(t1)$color <- "white"
#definimos el color de los nodos
V(t1)[name=="A"]$color <- "orange"
#asignamos un color especı́fico al nodo A
V(t1)$size <- 40
#tama~
no de los nodos
V(t1)$label.cex <- 3
#tama~
no de la etiqueta de los nodos
V(t1)$label <- V(t1)$name
#la etiqueta de cada nodo será su nombre
E(t1)$color <- "black"
#color de la conexión entre dos nodos
E(t1)$width <- 3
#grosor de la conexión entre dos nodos
tr <- transitivity(t1, type="local", vids="A")
#transitividad del nodo A
plot(t1, main=paste("Transitividad de 'A':", tr))
Transitividad de 'A': 0
B
C
A
D
E
Cuando se añaden conexiones entre los nodos adyacentes el coeficiente de clustering
aumenta.
> t2 <- add.edges(t1, V(t1)[name %in% c("C","D")], color="red", width=3)
> tr <- transitivity(t2, type="local", vids="A")
> plot(t2, main=paste("Transitividad de 'A':", round(tr,4)))
25
Transitividad de 'A': 0.1667
B
C
A
D
E
La función transitivity() también se puede utilizar para calcular el coeficiente de
clustering global en un grafo. Para calcular dicho parámetro topológico para las redes de
erdos y fyi bastarı́a con escribir lo siguiente:
> transitivity(erdosgraph)
[1] 0.003635963
> transitivity(fyi)
[1] 0.5430382
Problema
Hemos observado cómo el coeficiente de clustering de la red erdos es 0.0036 mientras que para fyi es 0.543. Si recuerdas la definición de coeficiente de clustering,
¿consideras que son números razonables para redes biológicas o sociales?
Por otro lado, ¿crees que el hecho de tener mayor diámetro y caminos mı́nimos más
largos es compatible con el hecho de tener un coeficiente de clustering global mayor?
¿Cómo dibujarı́as dos redes pequeñas para que se cumplieran dichas condiciones?
Redes de mundo pequeño (Small-World Networks)
Hasta ahora hemos visto cómo nuestra red erdos presenta ciertas diferencias y semejanzas con la red fyi. Mientras que el diámetro y el camino mı́nimo medio tienen valores
26
parecidos, el coeficiente de clustering es varios órdenes de magnitud inferior. El primer
intento para modelar una red que, a diferencia del Modelo de Erdós-Rényi, cumpliera el
principio de transitividad caracterı́stico de las redes biológicas, fue propuesto en un articulo en Nature (1998) y se conoce como Modelo de Watts y Strogatz. Las redes creadas
según este modelo tienen una estructura ordenada en forma de anillo, en la que cada nodo
está además conectado a los nodos vecinos situados a una determinada distancia.
> strogatzgraph <- watts.strogatz.game(1, 10, 2, 0)
> transitivity(strogatzgraph)
[1] 0.5
> average.path.length(strogatzgraph)
[1] 1.666667
> plot(strogatzgraph, layout=layout.circle)
3
●
2
●
4
●
1
●
5
●
0
●
6
●
9
●
7
●
8
●
Sin embargo, veamos qué sucede si creamos una red con tantos nodos como nuestra
red fyi :
> bigstrogatzgraph <- watts.strogatz.game(1, length(V(fyi)), 2, 0)
> transitivity(bigstrogatzgraph)
[1] 0.5
27
> average.path.length(bigstrogatzgraph)
[1] 172.7504
Las redes creadas según el Modelo de Watts y Strogatz tienen un alto coeficiente
de clustering, sin embargo, a medida que aumenta el número de nodos crece también el
camino mı́nimo medio. Estas redes cumplen por tanto sólo parcialmente la propiedad de
Redes de Mundo Pequeño tı́pica de las redes biológicas.
Los propios autores del Modelo de Watts y Strogatz observaron cómo barajando
aleatoriamente algunas de las conexiones (rewiring), eran capaces de reducir drásticamente el camino mı́nimo medio sin afectar al coeficiente de clustering. Esto cumple los 2
requisitos vistos hasta ahora en nuestra red biológica fyi.
> strogatzgraph <- watts.strogatz.game(1, length(V(fyi)), 2, 0.2)
> transitivity(strogatzgraph)
[1] 0.1181512
> average.path.length(strogatzgraph)
[1] 6.197887
Redes libres de escala (Scale-free Networks)
Como hemos visto, el Modelo de Watts y Strogatz con rewiring es interesante ya
que ofrece un compromiso entre las redes aleatorias de Erdós-Rényi, donde los grafos
generados son de mundo pequeño pero no son transitivos y el modelo original de Watts y
Strogatz. No obstante hay una caracterı́stica tı́pica de las redes biológicas que no cumplen:
no son Redes Libres de Escala.
Como recordareis de la clase de Teorı́a de Grafos, el Grado (Degree) de un nodo
se define como el número de conexiones que entran a dicho nodo. En las Redes Libres
de Escala, existe un gran número de nodos poco conectados, mientras que los nodos
altamente conectados (hubs) son muy escasos. Se dice que la distribución de nodos de las
redes libres de escala sigue una ley de potencia P (k) ∼ ck −γ :
> deg.dist.fyi <- degree.distribution(fyi)
> plot(deg.dist.fyi, xlab="k", ylab="P(k)", main="Scale-free network")
28
Scale−free network
0.2
P(k)
0.3
●
●
0.1
●
●
●
●
●
0.0
●
●
0
5
●
●
●
10
●
●
●
●
●
●
●
15
●
●
●
20
●
●
●
●
25
●
●
●
●
●
●
●
30
k
Podemos generar el mismo gráfico de distribución de grados para nuestras redes artificiales creadas según el modelo de Watts y Strogatz y de Erdós-Rényi:
> plot(degree.distribution(strogatzgraph),type="b",pch=1,col="blue",
+
xlab="Degree", ylab="Frequency")
> points(degree.distribution(erdosgraph),type="b",pch=2,col="red")
> legend("topright", c("strogatz","erdos"), col=c("blue","red"), pch=c(1,2),
+
ncol=1, yjust=0, lty=0)
●
strogatz
erdos
0.3
●
0.1
0.2
●
●
0.0
Frequency
●
●
●
●
●
●
2
4
6
8
Degree
29
●
10
El término scale free fue acuñado y publicado por Albert-László Barabási y Réka
Albert en un articulo en Science (1999) gracias a sus estudios sobre la World Wide Web.
Barabási y Albert definieron un modelo para generar este tipo de redes siguiendo un
mecanismo denominado unión preferencial (preferential attachment) que cumple las
siguientes condiciones:
Los nodos se van añadiendo a la red en un proceso iterativo.
Cada nodo se unirá a los nodos existentes con un número fijo de conexiones.
La probabilidad de unirse a un nodo concreto, es directamente proporcional al grado
de dicho nodo.
Los nodos con un grado mayor atraerán más conexiones, mientras que los nodos menos
conectados, permanecerán poco conectados cumpliendo la ley de potencia que caracteriza
a las redes scale free. A este efecto de ”los ricos serán más ricos y los pobres será más
pobres” se le conoce como efecto Matthew.
> barabasigraph <- barabasi.game(100, m = 1, directed=FALSE, out.pref = TRUE)
> plot(barabasigraph, layout=layout.fruchterman.reingold, vertex.size=4,
+
vertex.label=NA)
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
30
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
Problema
¿Serı́as capaz de predecir el coeficiente de clustering global de la red que acabamos
de generar? ¿A qué se debe?
Conforme aumentamos el número de conexiones que se crean en cada iteración (parámetro
m), aumenta el coeficiente de clustering y disminuye el camino mı́nimo medio
> barabasigraph <- barabasi.game(vcount(fyi), m = 2, directed=FALSE,
+
out.pref = TRUE)
> transitivity(barabasigraph)
[1] 0.006414719
> average.path.length(barabasigraph)
[1] 4.51426
0.500
> deg.barabasi.dist <- degree.distribution(barabasigraph)
> plot(deg.barabasi.dist,xlab="Degree",ylab="Frequency",log="xy", pch=19)
●
0.100
●
●
●
0.020
●
●
●
●
●
0.005
●
●
●
●
●
●
●●
0.001
Frequency
●
●
1
2
5
10
●
20
Degree
31
●●●● ●●● ● ●
●●
50
●
0.500
Como se puede apreciar, la red de Barabási se ajusta a la ley de potencia. Además,
la presencia de hubs le permite mantener el camino mı́nimo medio bastante bajo (red de
mundo pequeño). No obstante, el coeficiente de clustering va disminuyendo a medida que
aumentamos el número de nodos del grafo.
●
●
●
●
●
0.100
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
0.020
●
●
● ●
● ●
●
●
●
●
●
●
●
●
●
●
●
0.005
Frequency
●
●
●
●
●
●
●● ●
●
● ●
● ● ●
●
0.001
Erdós−Rényi
Watts y Strogatz
Barabasi
fyi
●
●
●
●
1
●
2
5
10
●
●●
●
●
●
● ●●
●●●
● ●● ●●●● ● ●
●●
20
●
50
Degree
Figura 3.3: Distribución de grados de los grafos estudiados
Problema
La Figura 3.3 muestra la distribución de grados de todas las redes estudiadas en
esta práctica. ¿Cuáles crees que son scale-free? ¿Qué ventajas y desventajas crees que
supone, desde el punto de vista evolutivo, que una red biológica sea scale-free?
32
Capı́tulo 4
Conclusiones
A lo largo de este tutorial hemos visto los conceptos más básicos para trabajar con
Cytoscape. Ahora deberı́as ser capaz de instalar tanto el programa como sus plugins,
crear e importar tus propias redes ası́ como aquellas procedentes de artı́culos cientı́ficos,
cambiar la visualización de las redes a tu antojo y trabajar con algunos plugins.
Evidentemente esto es sólo un repaso general. Si aún te has quedado con ganas de más
echa un vistazo a la página http://cytoscape.wodaklab.org/wiki/Welcome donde podrás
encontrar material muy interesante como tutoriales, presentaciones. . . . Además también
puedes encontrar artı́culos interesantes que pretenden servir de guı́a para llevar a cabo
análisis dentro de Cytoscape. Un buen ejemplo es el siguiente:
Cline et al. Integration of biological networks and gene expression data using Cytoscape. Nat Protoc (2007) vol. 2 (10) pp. 2366-82
En la segunda parte de la práctica hemos visto cómo trabajar con redes valiéndose del
entorno de trabajo R y la librerı́a igraph. Hemos aprendido a cargar redes biológicas, a
generar redes artificiales según diferentes modelos y a calcular los parámetros topológicos
más comunes. En la web de igraph (http://igraph.sourceforge.net/) puedes encontrar
manuales y la documentación de la librerı́a, ası́ como la librerı́a en otros lenguajes de
programación como C, Python o Ruby.
Agradecimientos
Agradecemos a Mike Smoot, David de Juan y Florencio Pazos por su ayuda y material
proporcionado para llevar a cabo este tutorial ya que sin ellos no hubiera sido posible.
33
Apéndices
34
Instalación de Cytoscape
En esta práctica vamos a trabajar con la versión de Cytoscape 2.8. La versión sobre
la que se trabaja es algo especialmente crı́tico en Cytoscape ya que los plugins están
diseñados para una versión especı́fica y no necesariamente trabajan en las demás. Por esta
razón, y para no perder demasiado tiempo en la instalación hemos creado una carpeta
tanto con Cytoscape 2.8 como con todos los plugins que se utilizarán. Puesto que no
requiere privilegios de administración, bastará con descargar el fichero comprimido desde
la web de la práctica (link), descomprimirlo y ejecutar el siguiente comando desde el
directorio en cuestión:
1
. / c y t o s c a p e . sh
Para instalar Cystoscape desde cero existen diferentes opciones:
Instalar automáticamente los paquetes especı́ficos para Windows, Mac y Linux.
Instalar Cytoscape desde un paquete comprimido distribuido.
Compilar Cytoscape desde el código fuente.
Instalar desde el repositorio de Subversion.
Lo más habitual es recurrir directamente a la sección de descargas de la página web
de Cytoscape (http://www.cytoscape.org/). Para descargarlo os pedirá vuestro nombre e
e-mail. La última versión cuando se escribió este manual era la 2.8.1 y los desarrolladores
se encuentran inmersos en las versiones 2.9 y 3.0. El problema actual es que muchos de
los plugins tienen que ser rehechos para cada una de las versiones. Por esta razón, en
ocasiones, es más recomendable bajar a una versión anterior en la que todos los plugins
funcionen correctamente. Para ello, basta con ir a la sección All releases de la página de
Cytoscape y elegir la apropiada. Como la mayorı́a de aplicaciones en Java no requieren
privilegios de administrador, Cytoscape se puede instalar en un directorio a nivel de
usuario.
Ejecutar Cytoscape
Para abrir la aplicación desde Linux o Mac OSX basta con hacer doble click en el
icono creado por el instalador o bien ejecutar el fichero cytoscape.sh. En Windows en
cambio hay que abrir el fichero cytoscape.bat. También es posible ejecutar directamente
el programa desde la consola con el siguiente comando (desde el directorio que contiene
la aplicación):
1
j a v a −Xmx512M −j a r c y t o s c a p e . j a r −p p l u g i n s
La opción -Xmx512M especifica la memoria que Java destinará a Cytoscape. Este
parámetro puede interesar alterarlo para trabajar en ordenadores con memoria suficiente
y redes grandes. Para nuestro caso deberı́a ser suficiente con 512Mb. La opción -p plugins
35
especifica en qué directorio se encuentran los plugins. Por tanto, es recomendable no
abrir directamente el fichero .jar mediante doble-click porque a pesar de que tenga un
comportamiento aparentemente normal, puede que no tengas algunas funcionalidades que
están en la carpeta plugins.
Instalar plugins
Una de las grandes cualidades de Cytoscape es que es de código abierto, por lo que
cualquier usuario puede aportar nuevas herramientas creando un plugin y distribuyéndolo. Esto ha convertido a Cytoscape en una aplicación muy poderosa con multitud de
utilidades para resolver, de los problemas más generales, a los más especı́ficas.
Figura 1: Ventana Manage Plugins
En esta práctica vamos a necesitar distintos plugins por lo que antes de nada conviene
saber cómo instalarlos. Para ello, una vez abierta la ventana principal, seleccionamos en
el menú Plugins la opción Manage Plugins. Esto nos abrirá una ventana con los que
están disponibles en el servidor. Puesto que los plugins son dependientes de la versión
de Cytoscape, puede que algunos no estén adaptados a la versión actual. Si habéis hecho
caso a mi recomendación y habéis instalado la versión 2.8 de Cytoscape, este problema no
os afectará para los plugins de esta práctica. Si no fuera el caso, existen 2 posibilidades:
instalar una versión anterior de Cytoscape e instalar los plugins adecuados; o instalar el
plugin desactualizado y confiar en que no pierdas ninguna funcionalidad. Si te decantas
por esta última opción tienes que hacer click en la caja con el rotulo Show outdated
36
Plugins como se ve en la Figura 1. De una u otra forma conviene asegurarse de tener
todas las extensiones instaladas.
En esta práctica vamos a trabajar con los siguientes plugins:
Network Analyzer
ClusterMaker
AllegroMCODE
BINGO
Una vez instalados, los encontraremos en el menú Plugins de la ventana principal de
Cytoscape. Algunos plugins pueden requerir reiniciar Cytoscape para que funcionen.
Instalación de igraph en R
En primer lugar hay que instalar R. Los pasos detallados para instalar R en linux,
MacOS X y Windows se pueden encontrar en la propia web de R (link). En caso de usar
Ubuntu, la mejor opción es añadir el repositorio de R al archivo sources.list y usar apt
para completar la instalación. Para instalar igraph basta con entrar en R y escribir:
1
i n s t a l l . p a c k a g e s ( ” i g r a p h ”)
Una vez elegido el servidor más cercano, la instalación se completará de forma automática. Para empezar a trabajar con igraph en el entorno de R simplemente carga la
librerı́a con la siguiente función:
1
l i b r a r y ( ” i g r a p h ”)
37
Navegando por Cytoscape
Esta sección tiene como objetivo familiarizarse con el interfaz de Cytoscape: los menús,
ventanas, opciones,. . . Conviene ser consciente de las opciones que hay y las posibilidades
que ofrece el programa para cuando se pretenda hacer algo saber a que menú, botón o
pestaña hay que recurrir.
Interface Cytoscape
Abre Cytoscape y observa las distintas partes de la ventana principal:
En la parte superior del escritorio de Cytoscape encontrarás la barra de herramientas
con los botones más importantes. Pasa el ratón sobre ellos para ver para qué sirve
cada uno.
En el extremo superior derecho esta la ventana Main Network View donde se
mostrará la información sobre la red. Esta región esta originalmente en blanco.
A la izquierda se encuentra el Control Panel. Es una lista con las redes que tienes
abiertas. Contiene su nombre ası́ como el número de nodos y conexiones. La red
aparecerá en verde si has creado una vista de ella o en rojo si no hay una visualización de la misma. Para crearla o destruir la vista basta con hacer click con el botón
derecho sobre el nombre de la red.
Inmediatamente debajo del Control Panel encontrarás el Network Overview Panel
que contiene una visualización general de la representación de la red.
En el extremo inferior derecho puedes encontrar el Data Panel que contiene la
información más importante sobre los nodos, las conexiones o los atributos de la
red.
Estos dos últimos paneles pueden ser extraı́dos y hacerse flotantes sobre el escritorio para
facilitar la visualización, simplemente haciendo click sobre el icono que se encuentra en
el extremo superior derecho.
Menús
Vamos a ver muy por encima los menús más importantes de Cytoscape.
File
El menú File contiene las principales funciones para trabajar con ficheros:
Open para abrir ficheros de sesión de Cytoscape.
New para crear una nueva red.
38
Save para guardar una nueva red.
Import para importar datos como redes o atributos.
Export para exportar datos o imágenes.
Print para imprimir.
Quit cierra todas las ventanas de Cytoscape y sale del programa.
Edit
El menú Edit contiene:
Undo y Redo para deshacer y rehacer respectivamente cambios hechos en Attribute
Browser, Network Editor y en el Layout.
Opciones para crear y destruir las representaciones gráficas de las redes y las propias
redes.
Opciones para eliminar los nodos y conexiones seleccionadas en la red actual.
Preferences → Properties contiene todas las propiedades del Cytoscape y de sus
plugins.
View
Este menú es para mostrar u ocultar las ventanas:
Control Panel
Data Panel
Results Panel
VizMapper
Select
El menú Select contiene:
Opciones para seleccionar nodos o conexiones.
La opción Select → Use Filters permite crear filtros para la selección automática
de porciones de la red cuyos atributos de nodos o conexiones cumplan un determinado criterio.
39
Layout
El menú Layout es una lista de opciones para cambiar el aspecto de la representación
visual de las redes:
Rotate, Align, Scale y Distribute permiten trabajar con la visualización general.
La sección que se encuentra en la parte inferior contiene una gran variedad de algoritmos que automáticamente alteran la visualización de las redes. Los hay pesados
por algún parámetro o no pesados.
Plugins
Contiene las opciones más importantes para administrar o usar las extensiones. Este
menú puede variar notablemente a medida que instalemos nuevos plugins con nuevas
funcionalidades.
Help
El menú de ayuda te permite lanzar el visualizador de la ayuda para navegar por los
contenidos del manual de Cytoscape.
40

Documentos relacionados