2016-03-11 12 views
6

Angenommen, ich führe eine Bayesian einfache lineare Regression. Ich möchte die Ergebnisse visualisieren, indem ich mehrere Regressionslinien basierend auf den hinteren Verteilungen von a (Achsenabschnitt) und b (Steigung) auftrage. Ich frage mich, wie man die Ergebnisse in einem Heatmap-ähnlichen Stil anzeigt oder alternativ Transparenz verwendet, um Überlappungen zu vermeiden. Hier ist ein einfacher ggplot-Ansatz.Heatmap der Regressionslinien

library(ggplot2) 
set.seed(123) 

N = 1000 
x = 1:80 
a = rnorm(N,10,3) 
b = rnorm(N,5,2) 

y = vector("list",length=N) 
for(i in 1:N) {y[[i]] = a[i]+b[i]*x} 


df = data.frame(x=rep(x,N),y=unlist(y)) 
df$f = rep(1:N,each=80) 

(plt <- ggplot(df, aes(x, y,group=f)) + 
    geom_jitter(alpha=1/30,width=5,col="blue") + theme_classic()) 

Gibt es bessere Möglichkeiten, dies zu tun? Es wäre schön, wenn sich die Farbe je nach Überlappungsmenge ändern würde (wie bei Heatmaps).

+0

Ich glaube, Sie haben einen Tippfehler: 'df $ f = rep (1: N, jeweils = 80)' – csgillespie

+0

Dank! Korrigiert es – beginneR

Antwort

5

Warum nicht ein Liniendiagramm mit Proben aus dem hinteren tun

g = ggplot(df, aes(x, y)) + 
    geom_line(alpha=1/50,col="grey",aes(group=f)) + 
    theme_classic() 

Sie dann dann eine dunklere Linie für die hintere expection hinzufügen

g + stat_summary(geom="line", fun.y=mean, color="black", lwd=1) 

enter image description here

4
zu geben,

Eine andere Möglichkeit, dies zu tun, ist durch die stat_density_2d Funktion mit ggplot2. Es gibt eine Vielzahl von Möglichkeiten, dies zu tun. Mit Ihrem df ...

Als Heatmap

ggplot(df, aes(x = x, y=y))+ 
    stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE)+ 
    scale_fill_gradient(low = "blue", high = "red")+ 
    stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+ 
    theme_classic() 

heatmap

Umgekehrt Sie Punkte und nutzen könnten.

ggplot(df, aes(x = x, y=y))+ 
    stat_density_2d(aes(size = ..density..), geom = "point", contour = FALSE)+ 
    stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+ 
    theme_classic() 

point density

+0

kreativ und schön – giacomo