Ich vergleiche zwei Möglichkeiten zum Erstellen von Heatmaps mit Dendrogramme in R, eins mit made4
heatplot
und eins mit gplots
von heatmap.2
. Die entsprechenden Ergebnisse hängen von der Analyse ab, aber ich versuche zu verstehen, warum die Standardwerte so unterschiedlich sind und wie beide Funktionen das gleiche Ergebnis (oder ein sehr ähnliches Ergebnis) erhalten, so dass ich alle Blackbox-Parameter verstehe das mögen.Unterschiede in Heatmap/Clustering Standard in R (Heatplot gegen Heatmap.2)?
Dies ist das Beispiel Daten und Pakete:
require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
die Daten mit heatmap.2 Clustering gibt:
heatmap.2(data, trace="none")
heatplot
Verwendung gibt:
heatplot(data)
sehr unterschiedliche Ergebnisse und Skalierungen zunächst. heatplot
Ergebnisse sehen in diesem Fall vernünftiger, so würde ich gerne verstehen, welche Parameter in heatmap.2
eingegeben werden, um es gleich zu tun, da heatmap.2
hat andere Vorteile/Funktionen, die ich gerne verwenden würde und weil ich die fehlenden verstehen will Zutaten.
heatplot
verwendet durchschnittliche Verknüpfung mit Abstandskorrelation so wir das in heatmap.2
einspeisen kann ähnlich Clusterings verwendet (auf der Grundlage: https://stat.ethz.ch/pipermail/bioconductor/2010-August/034757.html) sind, um sicherzustellen,
dist.pear <- function(x) as.dist(1-cor(t(x)))
hclust.ave <- function(x) hclust(x, method="average")
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave)
ergibt:
Dies macht die Zeilen -Dendrogramme sehen ähnlicher aus, aber die Spalten sind immer noch unterschiedlich und auch die Skalen. Es scheint, dass heatplot
skaliert die Spalten irgendwie standardmäßig heatmap.2
nicht standardmäßig tun. Wenn ich eine Reihe-Skalierung heatmap.2 hinzufügen, erhalte ich:
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
, die noch nicht identisch ist, aber näher. Wie kann ich die heatplot
Ergebnisse mit heatmap.2
reproduzieren? Was sind die Unterschiede?
edit2: es wie ein wesentlicher Unterschied scheint ist, dass heatplot
die Daten sowohl mit Zeilen und Spalten neu skaliert, mit:
if (dualScale) {
print(paste("Data (original) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- t(scale(t(data)))
print(paste("Data (scale) range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
data <- pmin(pmax(data, zlim[1]), zlim[2])
print(paste("Data scaled to range: ", round(range(data),
2)[1], round(range(data), 2)[2]), sep = "")
}
das ist, was ich versuche zu heatmap.2
meinen Ruf zu importieren. Der Grund, warum ich es mag, ist, weil es die Kontraste zwischen den niedrigen und hohen Werten größer macht, während einfach zlim
zu heatmap.2
einfach ignoriert wird. Wie kann ich diese "doppelte Skalierung" verwenden, während das Clustering entlang der Spalten beibehalten wird?Alles was ich will ist der erhöhte Kontrast Sie erhalten:
heatplot(..., dualScale=FALSE, scale="row")
alle Ideen:
heatplot(..., dualScale=TRUE, scale="none")
mit dem niedrigen Kontrast Sie erhalten im Vergleich? die folgende
Zum letzten Befehl, fügen Sie 'symreaks = FALSE' hinzu, um eine ähnliche Färbung wie' heatplot' zu erhalten. Trotzdem müssen die Spalten-Dendrogramme funktionieren. – harkmug
@rmk danke, nicht sicher, ich verstehe, was 'symbreaks' tut, obwohl. Irgendwelche Ideen zu den Farbendogramm-Unterschieden? – user248237dfsf
'symmreaks = FALSE' macht die Färbung nicht symmetrisch, wie in' heatplot' zu sehen, wo der Wert 0 nicht weiß ist (immer noch ein bisschen blau). Was das Dendrogramm betrifft, denke ich, dass 'heatamap.2' es richtig machen könnte. Beachten Sie, dass EWT.T1 und EWS.T6 in 'heatmap.2' nebeneinander stehen, während in 'heatplot' die EWS.T4 und EWS.T6 sind. Ersteres hat einen Abstand von 0.2, während letzteres 0.5 hat. – harkmug