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.