2016-03-11 78 views
6

Supponiamo di eseguire una regressione lineare semplice bayesiana. Vorrei visualizzare i risultati tracciando più linee di regressione in base alle distribuzioni posteriori di (intercetta) e b (pendenza). Mi chiedo come visualizzare i risultati in stile heatmap o in alternativa utilizzare la trasparenza per evitare sovrapposizioni. Ecco un semplice approccio ggplot.Heatmap delle linee di regressione

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()) 

Ci sono modi migliori per farlo? Sarebbe bello se il colore cambierebbe a seconda della quantità di sovrapposizione (come avviene in heatmaps).

+0

io pensi di avere un errore di battitura: 'df $ f = rep (1: N, ciascuna = 80)' – csgillespie

+0

Grazie! Corretto – beginneR

risposta

5

Perché non fare una trama linea con campioni dal posteriore

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

È quindi quindi aggiungere una linea più scura per l'expection posteriori

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

Per dare

enter image description here

4

Un altro modo per farlo è attraverso loFunzionecon ggplot2. Ci sono molti modi per farlo. Utilizzando il df ...

Come 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

Al contrario, è possibile utilizzare i punti pure.

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

creativo e bello – giacomo