2017-12-07 7 views
2

Ich habe ein Modell, das mir gesagt hat, dass es eine Interaktion zwischen zwei Variablen gibt: a und b, die meine Antwortvariable signifikant beeinflusst: c. Alle drei sind fortlaufende numerische Variablen. Für Detail c ist die Änderungsrate meine Antwortvariable, b ist die Änderungsrate für meinen Prädiktor und a ist der durchschnittliche jährliche Niederschlag. Die Analyseeinheit besteht aus Pixeln in einem Raster. Mein Modell sagt mir also, dass der durchschnittliche jährliche Niederschlag ändert, wie mein Prädiktor meine Reaktion beeinflusst. Um diese Interaktion zu visualisieren, möchte ich ein Konturdiagramm/Heat Map/Level Plot mit a und b auf der x- und y-Achse und c die Farbe verwenden, um mir zu zeigen, wie sich meine Antwortvariable innerhalb des durch beschriebenen Bereichs ändert A und B. Ich kann mit einem Streudiagramm dies tun, aber es ist nicht sehr schön oder einfach zu interpretieren:Konturdiagramm oder Heatmap aus drei kontinuierlichen Variablen

qplot(b, a, colour = c) + 
    scale_colour_gradient(low="green", high="red") + 

enter image description here

Wenn ich versuche, ein Konturdiagramm/Heatmap/ebenes Grundstück plotten, obwohl alles, was ich bekomme Fehler sind , leere Plots oder hässliche Plots.

geom_contour gibt mir eine Fehlermeldung:

ggplot(data = Mod, aes(x = Rain, y = Bomas, z = Fire)) + 
    geom_contour() 

Warning message: 
Not possible to generate contour data 

geom_raster mich zunächst gibt Error: cannot allocate vector of size 81567.2 Gb aber wenn ich meine Daten runden produziert es:

ggplot(data = df, aes(x = a, y = b, z = c)) + 
    geom_raster(aes(fill = c)) 

enter image description here

interpolate = TRUE zum geom_raster Code Hinzufügen von nur macht die Linien ein wenig verschwommen.

geom_tile erzeugt eine leere Grafik aber mit einem Maßstab für c:

ggplot(data = df, aes(x = a, y = b, z = c)) + 
    geom_tile(aes(color = c)) 

enter image description here

Ich habe auch versucht stat_density2d und Einstellung der Füllung und/oder die Farbe c verwenden, aber nur einen Fehler bekommen, und ich habe versucht, auch levelplot im lattice Paket mit, aber das ergibt dies:

levelplot(c ~ a * b, data = df, 
      aspect = "asp", contour = TRUE, 
      xlab = "a", 
      ylab = "b") 

Ich vermute, die Probleme, denen ich begegne, sind, weil die Funktionen nicht eingerichtet sind, um mit kontinuierlichen x- und y-Variablen umzugehen, scheinen alle Beispiele Faktoren zu verwenden. Ich hätte gedacht, dass ich das kompensieren könnte, indem ich die Breite der Fächer ändere, aber das scheint auch nicht zu funktionieren. Gibt es eine Funktion, mit der Sie eine Heatmap mit 3 kontinuierlichen Variablen erstellen können? Oder muss ich meine a- und b-Variablen als Faktoren behandeln und manuell einen Datenrahmen mit Bins erstellen, der für meine Daten geeignet ist?

Wenn Sie für sich selbst experimentieren wollen, dann bekommen Sie ähnliche Probleme zu dem, was ich habe mit:

df<- as.data.frame(rnorm(1:1068)) 
df[,2] <- rnorm(1:1068) 
df[,3] <- rnorm(1:1068) 
names(df) <- c("a", "b", "c") 

Antwort

1

Sie können die automatische Behälter erhalten, und zum Beispiel die Mittel berechnen, indem stat_summary_2d mit:

ggplot(df, aes(a, b, z = c)) + 
    stat_summary_2d() + 
    geom_point(shape = 1, col = 'white') + 
    viridis::scale_fill_viridis() 

enter image description here

Eine weitere gute Möglichkeit ist, Ihre Daten durch die dritte Variable in Scheiben schneiden und kleine Multiples plotten. Dies ist nicht wirklich zeigen, sehr gut für zufällige Daten aber:

library(ggplot2) 
ggplot(df, aes(a, b)) + 
    geom_point() + 
    facet_wrap(~cut_number(c, 4)) 

enter image description here

+0

Wissen Sie, wie diese könnte erweitert werden, so dass die Farben in Ihrer ersten Figur, die die ganze Handlung abgedeckt? – James

+0

Sie können den Mittelwert in einer Bin ohne Beobachtungen nicht berechnen. – Axeman

Verwandte Themen