J'ai vu quelques requêtes sur le clustering dans les séries temporelles et spécifiquement sur le clustering, mais je ne pense pas qu'elles répondent à ma question.
Contexte: Je souhaite regrouper les gènes dans une expérience de cours de temps dans la levure. Il y a quatre points de temps disent: t1 t2 t3 et t4 et le nombre total de gènes G . J'ai les données sous forme d'une matrice M dans laquelle les colonnes représentent les traitements (ou points temporels) t1 t2 t3 et t4 et les lignes représentent les gènes. Par conséquent, M est une matrice Gx4.
Problème: je veux regrouper les gènes qui se comportent de la même manière à tous les points temporels t1 t2 t3 et t4 ainsi qu'à l'intérieur d'un point temporel particulier ti , où i est dans {1, 2, 3, 4} (au cas où nous ne pourrions pas faire les deux regroupements ensemble, le regroupement dans un point temporel est plus important que le regroupement sur plusieurs points temporels). En plus de cela, je veux également dessiner une carte thermique.
Ma solution:
j'utilise le code R ci-dessous pour obtenir une carte thermique ainsi que les clusters en utilisant la hclust
fonction dans R (effectue un clustering hiérarchique avec une distance euclidienne)
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()
J'ai récemment découvert un hopach
package en Bioconducteur qui peut être utilisé pour estimer le nombre de clusters. Auparavant, j'assignais au hasard le nombre de bacs pour la carte thermique et coupais l'arbre à une hauteur appropriée pour obtenir un nombre prédéfini de clusters.
Problèmes possibles dans ma solution:
- Je peux ne pas regrouper les gènes dans un traitement particulier et regrouper les gènes uniquement entre les traitements ou vice versa.
- Il peut y avoir de meilleures façons d'obtenir une carte thermique pour le motif que je veux voir (gènes similaires dans un traitement et entre les traitements).
- Il peut y avoir de meilleures méthodes de visualisation que je ne connais pas.
Remarque:
csgillespie (modérateur) a un document plus général sur son site Web dans lequel il discute de tous les aspects de l'analyse du cours du temps (y compris les cartes thermiques et les regroupements). Je vous serais reconnaissant de bien vouloir me signaler un article décrivant en détail les cartes thermiques et les regroupements.
J'ai essayé le
pvclust
paquet, mais il se plaint que M est singulier et puis il plante.