Ich habe einige Fragen zum Clustering in Zeitreihen und speziell zum Clustering gesehen, aber ich glaube nicht, dass sie meine Frage beantworten.
Hintergrund: Ich möchte Gene in einem Zeitverlaufsexperiment in Hefe bündeln. Es gibt vier Zeitpunkt sagen: t1 t2 t3 und t4 und die Gesamtzahl der Gene G . Ich habe die Daten in Form einer Matrix M, in der die Spalten die Behandlungen (oder Zeitpunkte) t1 t2 t3 und t4 darstellen und die Zeilen die Gene darstellen. Daher ist M eine Gx4-Matrix.
Problem: Ich möchte die Gene, die sich über alle Zeitpunkte t1, t2, t3 und t4 sowie innerhalb eines bestimmten Zeitpunkts ti , in dem i in {1, 2, 3, 4} ist, gleich verhalten, gruppieren (falls dies nicht möglich ist) Bei beiden Clustern zusammen ist das Clustering innerhalb eines Zeitpunkts wichtiger als das Clustering über Zeitpunkte hinweg. Darüber hinaus möchte ich eine Heatmap zeichnen.
Meine Lösung:
Ich verwende den folgenden R-Code, um eine Heatmap sowie die Cluster mithilfe der hclust
Funktion in R zu erhalten (führt hierarchische Cluster mit euklidischem Abstand durch).
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()
Ich habe kürzlich ein hopach
Paket in Bioconductor entdeckt , mit dem die Anzahl der Cluster geschätzt werden kann. Zuvor habe ich zufällig die Anzahl der Fächer für die Heatmap zugewiesen und den Baum in einer geeigneten Höhe geschnitten, um eine vorgegebene Anzahl von Clustern zu erhalten.
Mögliche Probleme in meiner Lösung:
- Möglicherweise gruppiere ich die Gene innerhalb einer bestimmten Behandlung nicht und gruppiere Gene nur über Behandlungen hinweg oder umgekehrt.
- Es gibt möglicherweise bessere Möglichkeiten, eine Heatmap für das Muster zu erhalten, das ich sehen möchte (ähnliche Gene innerhalb einer Behandlung und über Behandlungen hinweg).
- Möglicherweise gibt es bessere Visualisierungsmethoden, die mir nicht bekannt sind.
Hinweis:
csgillespie (Moderator) hat auf seiner Website ein allgemeineres Dokument, in dem er alle Aspekte der Zeitverlaufsanalyse (einschließlich Heatmaps und Clustering) behandelt. Ich würde mich freuen, wenn Sie mich auf einen Artikel verweisen können, der Heatmaps und Clustering im Detail beschreibt.
Ich habe das
pvclust
Paket ausprobiert , aber es beschwert sich, dass M singulär ist und dann abstürzt.