R/ Bioconductor: Curso Intensivo heatmap R / Bioconductor: Curso Intensivo Clustering Fin del Curso Leonardo Collado Torres Licenciatura en Ciencias Genómicas, UNAM www.lcg.unam.mx/~lcollado/index.php Cuernavaca, México Oct-Nov, 2008 1 / 40 Bioconductor R/ Bioconductor: Curso Intensivo heatmap 1 heatmap Clustering Fin del Curso 2 Clustering 3 Fin del Curso 2 / 40 Nuestro problema a reproducir R/ Bioconductor: Curso Intensivo Para empezar la clase de hoy vamos a continuar un poco sobre la lı́nea de microarreglos. heatmap Clustering Vamos a usar el paquete ALL que contiene la información para nuestro ejercicio. Fin del Curso Para entender un poco más, lean el abstract del artı́culo del cual vienen los datos y nuestro objetivo es reproducir la figura 2 de este otro artı́culo1 . 1 Si quieren aprender más sobre los orı́genes de Bioconductor pueden leer u hojear este artı́culo :) 3 / 40 Explorando la info R/ Bioconductor: Curso Intensivo heatmap Cargemos nuestra información y explorenla :) > library("ALL") > data(ALL) Clustering Fin del Curso > ALL Por ejemplo, podemos ver los resultados de las 128 muestras para una prueba molecular. > ALL$mol.biol[1:10] [1] BCR/ABL NEG BCR/ABL [5] NEG NEG NEG [9] NEG BCR/ABL 6 Levels: ALL1/AF4 ... p15/p16 ALL1/AF4 NEG 4 / 40 Datos para la figura R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso En nuestra práctica solo nos interesan los que tienen una translocación entre los cromosomas 9 y 22 (BCR/ABL) o entre los cromosomas 4 y 11 (ALL11/AF4). Ası́ que filtramos nuestros datos: > eset <- ALL[, ALL$mol.biol %in% + c("BCR/ABL", "ALL1/AF4")] Nos quedamos con 47 muestras donde cada una tiene información de 12 625 genes. Es demasiada información para correr un heatmap. 5 / 40 Genes Diferencialmente Expresados R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ahora usamos a limma para encontrar los genes diferencialmente expresados. > library(limma) > f <- factor(as.character(eset$mol.biol)) > design <- model.matrix(~f) > fit <- eBayes(lmFit(eset, design)) 6 / 40 Figura 1 R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ya con esta información podemos reproducir la figura 1 del artı́culo > topTable(fit, coef = 2) ID 1016 1914_at 7884 37809_at 6939 36873_at 10865 40763_at 4250 34210_at 11556 41448_at 3389 33358_at 8054 37978_at 10579 40480_s_at 330 1307_at logFC -3.076231 -3.971906 -3.391662 -3.086992 3.618194 -2.500488 -2.269730 -1.036051 1.844998 1.583904 AveExpr 4.611284 4.864721 4.284529 3.474092 8.438482 3.733012 5.191015 6.937965 7.826900 4.638885 7 / 40 Figura 1 R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso t P.Value 1016 -27.49860 4.663431e-31 7884 -19.75478 1.033405e-24 6939 -19.61497 1.401149e-24 10865 -17.00739 5.695120e-22 4250 15.45655 2.809128e-20 11556 -14.83924 1.428253e-19 3389 -12.96398 2.638314e-17 8054 -10.48777 5.126800e-14 10579 10.38214 7.206177e-14 330 10.25731 1.079482e-13 adj.P.Val B 1016 5.887581e-27 56.32653 7884 5.896502e-21 44.23832 6939 5.896502e-21 43.97298 8 / 40 Figura 1 R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso 10865 4250 11556 3389 8054 10579 330 1.797522e-18 7.093049e-17 3.005283e-16 4.758388e-14 8.090730e-11 1.010866e-10 1.362846e-10 38.64615 35.10692 33.61391 28.76471 21.60216 21.27732 20.89145 9 / 40 Seleccionamos nuestros genes R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Solo queremos los genes con un valor p menor a 0.05. Nos quedamos con los 165 genes que cumplen esto y hacemos el heatmap :) > selected <- p.adjust(fit$p.value[, + 2]) < 0.05 > esetSel <- eset[selected, ] > heatmap(exprs(esetSel)) 10 / 40 heatmap básico R/ Bioconductor: Curso Intensivo 39837_s_at 1267_at 402_s_at 32562_at 37600_at 1007_s_at 36643_at 1039_s_at 40215_at 39781_at 266_s_at 307_at 38408_at 37539_at 1911_s_at 1463_at 2057_g_at 39556_at 41744_at 34789_at 34850_at 38631_at 37280_at 36536_at 37006_at 41397_at 41346_at 40692_at 35714_at 1992_at 33244_at 40167_s_at 32872_at 34699_at 33440_at 36275_at 33809_at 40953_at 1308_g_at 1928_s_at 1307_at 40504_at 41742_s_at 41743_i_at 1674_at 40784_at 40785_g_at 37978_at 37099_at 1973_s_at 38413_at 2036_s_at 1126_s_at 31472_s_at 37184_at 35256_at 40493_at 41779_at 33412_at 37193_at 37479_at 39210_at 919_at 1140_at 41478_at 35831_at 176_at 37724_at 38385_at 41401_at 41071_at 39135_at 34961_at 37251_s_at 41470_at 1947_g_at 37810_at 36777_at 38004_at 177_at 36897_at 34106_at 31615_i_at 35665_at 33358_at 39315_at 41191_at 931_at 1914_at 36873_at 37809_at 39635_at 38223_at 33936_at 37558_at 41348_at 31605_at 205_g_at 32475_at 34247_at 36149_at 1500_at 34098_f_at 33528_at 35663_at 40393_at 33193_at 39716_at 33405_at 1929_at 36092_at 32215_i_at 41448_at 40763_at 873_at 37225_at 38056_at 37413_at 39424_at 32116_at 2039_s_at 40480_s_at 35816_at 1134_at 35260_at 39327_at 35769_at 33774_at 38032_at 34362_at 36650_at 41193_at 40088_at 40570_at 41266_at 36773_f_at 36878_f_at 41723_s_at 32977_at 38968_at 34210_at 37320_at 39717_g_at 36798_g_at 36398_at 40369_f_at 37967_at 32378_at 37043_at 41215_s_at 38096_f_at 36795_at 675_at 1389_at 38095_i_at 38833_at 35016_at 676_g_at 41745_at 31508_at 1461_at 37420_i_at 37383_f_at 41237_at 37039_at heatmap Clustering 26008 04006 63001 28028 28032 31007 24005 19005 16004 15004 22010 24001 28019 30001 28021 15005 09008 11005 28036 62001 27003 26003 62002 65005 84004 03002 20002 12012 22013 37013 14016 27004 49006 24011 08011 62003 12026 31011 43001 24017 68003 12006 24010 24022 08001 12007 01005 Fin del Curso 11 / 40 heatmap: arreglamos los colores R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ahora personalizamos la gráfica para que se parezca más a la del artı́culo. Primero, usamos los mismos colores: > heatmap(exprs(esetSel), col = topo.colors(100)) Sin embargo, a esta gráfica le falta la barrita roja con azul. En el artı́culo la usan para enfatizar una diferencia entre 10 pacientes y los otros 37. Para hacer la barrita usamos el argumento ColSideColors y creamos una función para mapear la información de la prueba molecular. 12 / 40 heatmap: arreglamos los colores R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso > color.map <- function(mol.biol) { + if (mol.biol == "ALL1/AF4") + "#FF0000" + else "#0000FF" + } > patientcolors <- unlist(lapply(esetSel$mol.bio, + color.map)) 13 / 40 heatmap: con colores similares R/ Bioconductor: Curso Intensivo 39837_s_at 1267_at 402_s_at 32562_at 37600_at 1007_s_at 36643_at 1039_s_at 40215_at 39781_at 266_s_at 307_at 38408_at 37539_at 1911_s_at 1463_at 2057_g_at 39556_at 41744_at 34789_at 34850_at 38631_at 37280_at 36536_at 37006_at 41397_at 41346_at 40692_at 35714_at 1992_at 33244_at 40167_s_at 32872_at 34699_at 33440_at 36275_at 33809_at 40953_at 1308_g_at 1928_s_at 1307_at 40504_at 41742_s_at 41743_i_at 1674_at 40784_at 40785_g_at 37978_at 37099_at 1973_s_at 38413_at 2036_s_at 1126_s_at 31472_s_at 37184_at 35256_at 40493_at 41779_at 33412_at 37193_at 37479_at 39210_at 919_at 1140_at 41478_at 35831_at 176_at 37724_at 38385_at 41401_at 41071_at 39135_at 34961_at 37251_s_at 41470_at 1947_g_at 37810_at 36777_at 38004_at 177_at 36897_at 34106_at 31615_i_at 35665_at 33358_at 39315_at 41191_at 931_at 1914_at 36873_at 37809_at 39635_at 38223_at 33936_at 37558_at 41348_at 31605_at 205_g_at 32475_at 34247_at 36149_at 1500_at 34098_f_at 33528_at 35663_at 40393_at 33193_at 39716_at 33405_at 1929_at 36092_at 32215_i_at 41448_at 40763_at 873_at 37225_at 38056_at 37413_at 39424_at 32116_at 2039_s_at 40480_s_at 35816_at 1134_at 35260_at 39327_at 35769_at 33774_at 38032_at 34362_at 36650_at 41193_at 40088_at 40570_at 41266_at 36773_f_at 36878_f_at 41723_s_at 32977_at 38968_at 34210_at 37320_at 39717_g_at 36798_g_at 36398_at 40369_f_at 37967_at 32378_at 37043_at 41215_s_at 38096_f_at 36795_at 675_at 1389_at 38095_i_at 38833_at 35016_at 676_g_at 41745_at 31508_at 1461_at 37420_i_at 37383_f_at 41237_at 37039_at heatmap Clustering 26008 04006 63001 28028 28032 31007 24005 19005 16004 15004 22010 24001 28019 30001 28021 15005 09008 11005 28036 62001 27003 26003 62002 65005 84004 03002 20002 12012 22013 37013 14016 27004 49006 24011 08011 62003 12026 31011 43001 24017 68003 12006 24010 24022 08001 12007 01005 Fin del Curso 14 / 40 Agregamos la barra R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ya con nuestra función, hacemos una gráfica MUY similar a la del artı́culo. Para que los nombres no se vean tan apachurrados, usamos el argumento cexRow. > heatmap(exprs(esetSel), col = topo.colors(100), + ColSideColors = patientcolors, + cexRow = 0.5) 15 / 40 heatmap prácticamente idéntico R/ Bioconductor: Curso Intensivo heatmap 39837_s_at 1267_at 402_s_at 32562_at 37600_at 1007_s_at 36643_at 1039_s_at 40215_at 39781_at 266_s_at 307_at 38408_at 37539_at 1911_s_at 1463_at 2057_g_at 39556_at 41744_at 34789_at 34850_at 38631_at 37280_at 36536_at 37006_at 41397_at 41346_at 40692_at 35714_at 1992_at 33244_at 40167_s_at 32872_at 34699_at 33440_at 36275_at 33809_at 40953_at 1308_g_at 1928_s_at 1307_at 40504_at 41742_s_at 41743_i_at 1674_at 40784_at 40785_g_at 37978_at 37099_at 1973_s_at 38413_at 2036_s_at 1126_s_at 31472_s_at 37184_at 35256_at 40493_at 41779_at 33412_at 37193_at 37479_at 39210_at 919_at 1140_at 41478_at 35831_at 176_at 37724_at 38385_at 41401_at 41071_at 39135_at 34961_at 37251_s_at 41470_at 1947_g_at 37810_at 36777_at 38004_at 177_at 36897_at 34106_at 31615_i_at 35665_at 33358_at 39315_at 41191_at 931_at 1914_at 36873_at 37809_at 39635_at 38223_at 33936_at 37558_at 41348_at 31605_at 205_g_at 32475_at 34247_at 36149_at 1500_at 34098_f_at 33528_at 35663_at 40393_at 33193_at 39716_at 33405_at 1929_at 36092_at 32215_i_at 41448_at 40763_at 873_at 37225_at 38056_at 37413_at 39424_at 32116_at 2039_s_at 40480_s_at 35816_at 1134_at 35260_at 39327_at 35769_at 33774_at 38032_at 34362_at 36650_at 41193_at 40088_at 40570_at 41266_at 36773_f_at 36878_f_at 41723_s_at 32977_at 38968_at 34210_at 37320_at 39717_g_at 36798_g_at 36398_at 40369_f_at 37967_at 32378_at 37043_at 41215_s_at 38096_f_at 36795_at 675_at 1389_at 38095_i_at 38833_at 35016_at 676_g_at 41745_at 31508_at 1461_at 37420_i_at 37383_f_at 41237_at 37039_at Clustering 26008 04006 63001 28028 28032 31007 24005 19005 16004 15004 22010 24001 28019 30001 28021 15005 09008 11005 28036 62001 27003 26003 62002 65005 84004 03002 20002 12012 22013 37013 14016 27004 49006 24011 08011 62003 12026 31011 43001 24017 68003 12006 24010 24022 08001 12007 01005 Fin del Curso 16 / 40 Créditos R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Listo! En sı́ el ejercicio lo tomé de Peter Cock: Using R to draw a Heatmap from Microarray Data. Me pareció sencillo e interesante :). Allı́ les explica de la función heatmap.2 del paquete gplots con la cual pueden manipular más a su heatmap. Por ejemplo, le pueden añadir una leyenda explicando la relación entre los valores y los colores. 17 / 40 Definición R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Hacer un clustering es el proceso por el cual clasificas objetos en diferentes grupos llamados clusters con el fin de que cada grupo comparta un rasgo común. Generalmente agrupas tus objetos dada una medida de distancia. El clustering de datos es muy usado en análisis estadı́sticos, en campos como el machine learning, data mining, reconocimiento de patrones, análisis de imágenes y pues en la bioinformática :D. Hay muchos métodos y formas de agrupar tus datos. Usamos R por su eficiencia para manejar estructuras de datos y funciónes para el clustering, por los ambientes eficientes que ofrece para probar algoritmos y por la cantidad de paquetes y funciones relacionadas disponibles. 18 / 40 Info de apoyo R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso En sı́, el clustering es muy complejo ya que el método a usar depende de tus datos y el problema que buscas resolver. En esta página pueden encontrar una lista de diferentes paquetes en R relacionados al clustering con breves explicaciones. Si les interesa esto del machine learning, chequen esta página homóloga. En fin, wiki también puede serles útil. 19 / 40 Transformaciones de Datos R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Bueno, antes de usar los métodos de clustering, hay que decidir si transformamos nuestros datos previamente o no. Centrar y estandarizar: I I I Substraes la media a cada dato. Divides tus datos por la desviacion estándar. Tus datos tendrán media 0 y desviación estándar 1. Centrar y escalar tus datos usando scale. I I I Substraes la media a cada dato. Divides tus datos por la raı́z de la media cuadrada. Tus datos tendrán media 0 y desviación estándar 1. Transformar con log. Cambiar los valores de tus datos por su rank. Sin transformar :) 20 / 40 Calcular la distancia R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso El siguiente paso es escoger el método de distancia a usar. Hay muchos y cada uno tiene ventajas y desventajas. La opción básica es el método Euclidiano. Esta ya la conocen desde la prepa aunque noten que no sirve para correlaciones negativas y no es invariante de escala. Algo que nos dejó muy en claro Arturo Medrano es que no importa que uses, vas a recuperar cluster. Pero son los buenos? Pues el problema principal es escoger bien que usar de acuerdo a tus datos. Hay dos distancias basadas en correlación: la Pearson y la Spearman. Su problema principal es que es sensible a los outliers. 21 / 40 Calcular la distancia R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso En fin, otras distancias son la binaria, Manhattan, Máxima, Minowski, etc. En R pueden obtener más información con ?dist. 22 / 40 Métodos de clustering R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ya entrando al clustering, hay que diferenciar los métodos. Básicamente se dividen en: I I Clustering jerarquı́co: aglomerativo, divisorio. Clustering no jerarquı́co: k-means, PCA: principal component analysis, etc. 23 / 40 Clustering jerarquı́co R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso La idea básica del clustering aglomerativo es la siguiente: I I I I Identificar los clusters con la menor distancia Unirlos a los nuevos clusters Calcular la distancia entre clusters Regresar al primer paso hasta que tengas un solo cluster con todos tus datos 24 / 40 Jerárquico y aglomerativo R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso 25 / 40 Funciones en R R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso En fin, en R podemos usar las funciones hclust y agnes si queremos ir de abajo hacia arriba. Para ir en el sentido contrario, está la función diana. 26 / 40 No jerárquico R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso De los métodos de clustering no jerárquico, el más usado es el k-means. Este funciona ası́: I I I I I I Escoger un número k de clusters Asigna al azar los datos a los k clusters Calcula un nuevo centroide para cada uno de los k clusters Calcula la distancia entre todos los datos hacia los k centroides Asigna cada dato al centroide más cercano Repite el proceso hasta que las asignaciones sean estables 27 / 40 Funciones en R R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso En R podemos hacer el k-means con la función kmeans del paquete Stats. Otras opción algo similar es con la función pam. El PCA se hace con la función prcomp. En fin, hay muchos paquetes disponibles para hacer tipos de clusters. 28 / 40 Un ejercicio simple R/ Bioconductor: Curso Intensivo Vamos a hacer un ejercicio simple con datos de GEO. Pueden bajar el archivo GSE1110clean.txt o simplemente usar el siguiente comando2 : > mydata <- read.delim("http://www.lcg.unam.mx/~lc + header = T, sep = "\t") heatmap Clustering Fin del Curso Hay que volver nuestro objeto una matriz y añadir bien los nombres de las lı́neas. > rownames(mydata) <- mydata[, 1] > mydata <- as.matrix(mydata[, -1]) 2 Acuérdense de que los códigos están en la página del curso 29 / 40 Filtrando nuestros datos R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Si se fijan, mydata tiene 22 810 lı́neas y 22 columnas; no podemos hacer un clustering de este tamaño, pues R nos va a protestar por limitacions de memoria. Vamos a filtrar nuestra información para quedarnos solo con las lı́neas de intensidad alta o de alta variabilidad. > mydata <- mydata[apply(mydata > + 100, 1, sum)/length(mydata[1, + ]) > 0.5 & apply(log2(mydata), + 1, IQR) > 1.5, ] Tgirke, quien creó este ejercicio, hizo una función especial para escoger colores, ası́ que leemos su código con la función source. > source("http://faculty.ucr.edu/~tgirke/Documents 30 / 40 El clustering como tal R/ Bioconductor: Curso Intensivo Ahora tenemos que centrar y escalar nuestros datos. > mydatascale <- t(scale(t(mydata))) heatmap Clustering Fin del Curso Vamos a hacer clusters por correlación de Pearson para nuestras lı́neas y por Spearman para nuestras columnas. > hr <- hclust(as.dist(1 - cor(t(mydatascale), + method = "pearson")), method = "complete") > hc <- hclust(as.dist(1 - cor(mydatascale, + method = "spearman")), method = "complete") Si se fijan, usamos as.dist para interpretar los resultados de nuestras correlaciones como distancias. Pues ese el tipo de objeto que necesita hclust como entrada. 31 / 40 Visualizando clusters! R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Hay varias formas de visualizar los resultados de un clustering. La más común es por dendogramas usando plot, o si tienes 2, con un heatmap. > plot(as.dendrogram(hr)) > plot(as.dendrogram(hc)) > heatmap(mydata, Rowv = as.dendrogram(hr), + Colv = as.dendrogram(hc), col = my.colorFct( + scale = "row") Acuérdense de que los resultados de funciones como hclust son objetos con muchos attributos. Chequenlos con la función attributes > attributes(hr) 32 / 40 264404_at 244938_at 244970_at 245010_at 245008_at 245011_at 244939_at 245047_at 245025_at 245026_at 244932_at 244995_at 254907_at 265227_s_at 245002_at 244982_at 245004_at 261556_s_at 256442_at 261648_at 260431_at 249065_at 254098_at 252273_at 248790_at 259276_at 248844_s_at 255814_at 254820_s_at 253957_at 254909_at 244933_at 249205_at 249777_at 263970_at 251109_at 257823_at 245038_at 245226_at 252882_at 247655_at 265200_s_at 254265_s_at 248322_at 254042_at 252549_at 267546_at 254550_at 266070_at −DapX−5_at Bs−dap−5_at 251625_at 266385_at 246854_at 247431_at 257925_at 262383_at 255807_at 258930_at 259685_at 259879_at 261567_at 245757_at 249384_at 254200_at 249234_at 258487_at 264758_at 247949_at 249015_at 247024_at 253298_at 264400_at 267024_s_at 252746_at 250464_at 253416_at 264846_at 264953_at 253874_at 260668_at 253047_at 245140_at 259735_at 264527_at 258618_at 265588_at 253660_at 259680_at 262525_at 262643_at 248118_at 245196_at 258769_at 253044_at 266908_at 251565_at 255788_at 266507_at 245076_at 253908_at 248163_at 262099_s_at 266611_at 266974_at 247869_at 253179_at 251246_at 257766_at 266832_at 258399_at 248801_at 253423_at 253103_at 253791_at 259784_at 261766_at 251178_at 260152_at 250509_at 265856_at 260058_at 262045_at 1.0 1.5 Fin del Curso 0.5 Clustering 0.0 2.0 Dendograma: hr R/ Bioconductor: Curso Intensivo heatmap 33 / 40 GSM18230 GSM18231 GSM18232 GSM18233 GSM18228 GSM18229 GSM18294 GSM18295 GSM18290 GSM18291 GSM18296 GSM18297 GSM18292 GSM18293 GSM18298 GSM18299 GSM18300 GSM18301 GSM18302 GSM18303 GSM18304 GSM18305 0.5 1.0 1.5 Clustering 0.0 Dendograma: hc R/ Bioconductor: Curso Intensivo heatmap Fin del Curso 34 / 40 heatmap R/ Bioconductor: Curso Intensivo 262045_at 260058_at 265856_at 250509_at 260152_at 251178_at 261766_at 259784_at 253791_at 253103_at 253423_at 248801_at 258399_at 266832_at 257766_at 251246_at 253179_at 247869_at 266974_at 266611_at 262099_s_at 248163_at 253908_at 245076_at 266507_at 255788_at 251565_at 266908_at 253044_at 258769_at 245196_at 248118_at 262643_at 262525_at 259680_at 253660_at 265588_at 258618_at 264527_at 259735_at 245140_at 253047_at 260668_at 253874_at 264953_at 264846_at 253416_at 250464_at 252746_at 267024_s_at 264400_at 253298_at 247024_at 249015_at 247949_at 264758_at 258487_at 249234_at 254200_at 249384_at 245757_at 261567_at 259879_at 259685_at 258930_at 255807_at 262383_at 257925_at 247431_at 246854_at 266385_at 251625_at AFFX−r2−Bs−dap−5_at AFFX−DapX−5_at 266070_at 254550_at 267546_at 252549_at 254042_at 248322_at 254265_s_at 265200_s_at 247655_at 252882_at 245226_at 245038_at 257823_at 251109_at 263970_at 249777_at 249205_at 244933_at 254909_at 253957_at 254820_s_at 255814_at 248844_s_at 259276_at 248790_at 252273_at 254098_at 249065_at 260431_at 261648_at 256442_at 261556_s_at 245004_at 244982_at 245002_at 265227_s_at 254907_at 244995_at 244932_at 245026_at 245025_at 245047_at 244939_at 245011_at 245008_at 245010_at 244970_at 244938_at 264404_at heatmap Clustering GSM18230 GSM18231 GSM18232 GSM18233 GSM18228 GSM18229 GSM18294 GSM18295 GSM18290 GSM18291 GSM18296 GSM18297 GSM18292 GSM18293 GSM18298 GSM18299 GSM18300 GSM18301 GSM18302 GSM18303 GSM18304 GSM18305 Fin del Curso 35 / 40 Creando nuestro heatmap final! R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Ahora vamos a cortar el árbol a una altura especı́fica y le pondremos una barrita con colores del lado izquierdo para ver los diferentes clusters. > mycl <- cutree(hr, h = max(hr$height)/1.5) > mycolhc <- sample(rainbow(256)) > mycolhc <- mycolhc[as.vector(mycl)] Ya con nuestra barrita preparada, hacemos el heatmap final: > heatmap(mydata, Rowv = as.dendrogram(hr), + Colv = as.dendrogram(hc), col = my.colorFct( + scale = "row", RowSideColors = mycolhc) 36 / 40 Heatmap final R/ Bioconductor: Curso Intensivo 262045_at 260058_at 265856_at 250509_at 260152_at 251178_at 261766_at 259784_at 253791_at 253103_at 253423_at 248801_at 258399_at 266832_at 257766_at 251246_at 253179_at 247869_at 266974_at 266611_at 262099_s_at 248163_at 253908_at 245076_at 266507_at 255788_at 251565_at 266908_at 253044_at 258769_at 245196_at 248118_at 262643_at 262525_at 259680_at 253660_at 265588_at 258618_at 264527_at 259735_at 245140_at 253047_at 260668_at 253874_at 264953_at 264846_at 253416_at 250464_at 252746_at 267024_s_at 264400_at 253298_at 247024_at 249015_at 247949_at 264758_at 258487_at 249234_at 254200_at 249384_at 245757_at 261567_at 259879_at 259685_at 258930_at 255807_at 262383_at 257925_at 247431_at 246854_at 266385_at 251625_at AFFX−r2−Bs−dap−5_at AFFX−DapX−5_at 266070_at 254550_at 267546_at 252549_at 254042_at 248322_at 254265_s_at 265200_s_at 247655_at 252882_at 245226_at 245038_at 257823_at 251109_at 263970_at 249777_at 249205_at 244933_at 254909_at 253957_at 254820_s_at 255814_at 248844_s_at 259276_at 248790_at 252273_at 254098_at 249065_at 260431_at 261648_at 256442_at 261556_s_at 245004_at 244982_at 245002_at 265227_s_at 254907_at 244995_at 244932_at 245026_at 245025_at 245047_at 244939_at 245011_at 245008_at 245010_at 244970_at 244938_at 264404_at heatmap Clustering GSM18305 GSM18304 GSM18303 GSM18302 GSM18301 GSM18300 GSM18299 GSM18298 GSM18293 GSM18292 GSM18297 GSM18296 GSM18291 GSM18290 GSM18295 GSM18294 GSM18229 GSM18228 GSM18233 GSM18232 GSM18231 GSM18230 Fin del Curso 37 / 40 Fin Clustering R/ Bioconductor: Curso Intensivo heatmap Clustering Fin del Curso Listo! Ya saben lo más básico del clustering. Claro, una cosa es encontrar los grupos y la otra es encontrar una explicación biológica a dichos grupos. Sé que algunos tendrán curiosidad de aprender más al respecto, ası́ que los invito a seguir esta página. Por ejemplo, acabamos de hacer solo el principio de la sección de ejercicios. 38 / 40 Ligando R con otros lenguajes R/ Bioconductor: Curso Intensivo heatmap Ya vimos en la clase pasada como conectarnos a MySQL desde R. También puedes juntar a R con: Clustering I Fin del Curso I I I I Excel, al hacer archivos separados por tab o comas. Perl, usando llamadas al sistema o con un paquete como el RSPerl. Python, usando RPy. En sı́ Python no lo hemos visto en la LCG, pero sé que existe un repositorio similar a BioPerl y Bioconductor llamado BioPython. Con páginas HTML usando Rpad. En fin, en este link que es parte de los links del material de apoyo pueden encontrar más información al respecto. 39 / 40 Fin del Curso! R/ Bioconductor: Curso Intensivo Tareas de R como tal ya no tendrán este semestre, aunque nos vemos la próxima semana para checar sus avances de proyecto en la parte de R y dentro de 2 semanas para evaluar su proyecto completo. heatmap Clustering Espero que les haya gustado el curso y que si usen R3 . El próximo semestre verán R avanzado con Alejandra Medina :) Me enseñan pls! Fin del Curso Les recuerdo que luego ustedes tendrán que participar en la impartición de cursos similares a las siguientes generaciones. Además, puede que en su laboratorio no muchos o nadie sepa de R, ası́ que les deseo suerte en esta siguiente etapa de compartir sus conocimientos. 3 Por favor! Ya no hagan gráficas de pie!!! :P 40 / 40