He visto algunas consultas sobre la agrupación en series de tiempo y específicamente sobre la agrupación, pero no creo que respondan a mi pregunta.
Antecedentes: quiero agrupar genes en un experimento de curso de tiempo en levadura. Hay cuatro puntos de tiempo dicen: t1 t2 t3 y t4 y el número total de genes G . Tengo los datos en forma de una matriz M en la que las columnas representan los tratamientos (o puntos de tiempo) t1 t2 t3 y t4 y las filas representan los genes. Por lo tanto, M es una matriz Gx4.
Problema: Quiero agrupar los genes que se comportan de la misma manera en todos los puntos de tiempo t1 t2 t3 y t4 , así como dentro de un punto de tiempo particular ti , donde i está en {1, 2, 3, 4} (en caso de que no podamos hacerlo ambas agrupaciones juntas, la agrupación dentro de un punto de tiempo es más importante que la agrupación entre puntos de tiempo). Además de esto, también quiero dibujar un mapa de calor.
Mi solución:
Utilizo el código R a continuación para obtener un mapa de calor, así como los clústeres que utilizan la hclust
función en R (realiza el agrupamiento jerárquico con la distancia euclidiana)
row.scaled.expr <- (expr.diff - rowMeans(expr.diff)) / rowSds(expr.diff)
breaks.expr <- c(quantile(row.scaled.expr[row.scaled.expr < 0],
seq(0,1,length=10)[-9]), 0,
quantile(row.scaled.expr[row.scaled.expr > 0],
seq(0,1,length=10))[-1] )
blue.red.expr <- maPalette(low = "blue", high = "red", mid = "white",
k=length(breaks.expr) - 1)
pdf("images/clust.pdf",
height=30,width=20,pointsize=20)
ht1 <- heatmap.2(row.scaled.expr, col = blue.red.expr, Colv = FALSE, key = FALSE,
dendrogram = "row", scale = "none", trace = "none",
cex=1.5, cexRow=1, cexCol=2,
density.info = "none", breaks = breaks.expr,
labCol = colnames(row.scaled.expr),
labRow="",
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
main=expression("Heat Map"),
ylab="Genes in the Microarray",
xlab="Treatments"
)
dev.off()
Recientemente descubrí un hopach
paquete en Bioconductor que se puede usar para estimar la cantidad de grupos. Anteriormente, estaba asignando aleatoriamente el número de contenedores para el mapa de calor y cortaba el árbol a una altura adecuada para obtener un número predeterminado de grupos.
Posibles problemas en mi solución:
- Es posible que no esté agrupando los genes dentro de un tratamiento particular y agrupando genes solo a través de tratamientos o viceversa.
- Puede haber mejores formas de obtener un mapa de calor para el patrón que quiero ver (genes similares dentro de un tratamiento y entre tratamientos).
- Puede haber mejores métodos de visualización que no conozco.
Nota:
csgillespie (moderador) tiene un documento más general en su sitio web en el que analiza todos los aspectos del análisis del curso temporal (incluidos los mapas de calor y la agrupación). Le agradecería si me puede señalar un artículo que describa mapas de calor y agrupaciones en detalle.
He probado el
pvclust
paquete, pero se queja de que M es singular y luego se bloquea.
fuente
En complemento a la respuesta de @ mbq (se
Mfuzz
ve bien), solo pondré algunas referencias (PDF) sobre la agrupación de datos de expresión génica en el transcurso del tiempo:¿
timecourse
Probó el paquete (como lo sugiere @csgillespie en su folleto )?fuente
timecourse
paquete no es realmente para determinar grupos, sino para calcular qué genes se expresan diferencialmente.kml
pero no soy realmente un experto en ese dominio).Solo para agregar a las otras respuestas (que parecen resolver su problema), ¿trató de usar algoritmos de agrupación estándar para sus datos al construir su dendrograma? Por ejemplo,
En lugar de usar la distancia promedio para la agrupación, también puede usar "ward", "single", "median", ... Consulte
?hclust
para obtener una lista completa.Para extraer clústeres, use el
hclust
comando directamente y luego use elcutree
comando. Por ejemplo,Se pueden encontrar más detalles en mi página web .
fuente
cutree
comando que se puede utilizar para extraer clústeres del objeto heatmap.2.