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.
la source
En complément de la réponse de @ mbq (
Mfuzz
semble bien), je vais juste mettre quelques références (PDF) sur le clustering des données d'expression des gènes dans le temps:Avez-vous essayé le
timecourse
package (comme suggéré par @csgillespie dans son document )?la source
timecourse
package n'est pas vraiment pour déterminer les clusters, mais plutôt pour calculer quels gènes sont exprimés de manière différentielle.kml
mais je ne suis pas vraiment un expert dans ce domaine).Juste pour ajouter aux autres réponses (qui semblent résoudre votre problème), avez-vous essayé d'utiliser des algorithmes de clustering standard pour vos données lors de la construction de votre dendrogramme? Par exemple,
Au lieu d'utiliser la distance moyenne pour le clustering, vous pouvez également utiliser "ward", "single", "median", ... Voir
?hclust
pour une liste complète.Pour extraire des clusters, utilisez
hclust
directement la commande, puis utilisez lacutree
commande. Par exemple,Plus de détails peuvent être trouvés sur ma page Web .
la source
cutree
commande qui peut être utilisée pour extraire des clusters de l'objet heatmap.2.