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