2010-05-03 4 views
6

Ho 40 soggetti, di due gruppi, oltre 15 settimane, con qualche variabile misurata (Y).Aggiunta di linee di tendenza/boxplot (per gruppo) in ggplot2

Desidero avere un grafico dove: x = tempo, y = T, le linee sono per soggetti e colori per gruppi.

ho trovato si può fare in questo modo:

TIME <- paste("week",5:20) 
ID <- 1:40 
GROUP <- sample(c("a","b"),length(ID), replace = T) 
group.id <- data.frame(GROUP, ID) 
a <- expand.grid(TIME, ID) 
colnames(a) <-c("TIME", "ID") 
group.id.time <- merge(a, group.id) 
Y <- rnorm(dim(group.id.time)[1], mean = ifelse(group.id.time$GROUP =="a",1,3)) 
DATA <- cbind(group.id.time, Y) 
qplot(data = DATA, 
     x=TIME, y=Y, 
     group=ID,  
     geom = c("line"),colour = GROUP) 

Ma ora vorrei aggiungere alla trama qualcosa per mostrare la differenza tra i due gruppi (per esempio, una linea di tendenza per ogni gruppo, con alcune ombreggiature CI) - come può essere fatto?

Ricordo di aver visto ggplot2 (facilmente) farlo con geom_smooth, ma mi manca qualcosa su come farlo funzionare.

Inoltre, mi sono chiesto se le linee fossero come un boxplot per ogni gruppo (con una linea per i diversi quantili e recinzioni e così via). Ma immagino che rispondere alla prima domanda mi aiuterebbe a risolvere il secondo.

Grazie.

risposta

16
p <- ggplot(data=DATA, aes(x=TIME, y=Y, group=ID)) + 
      geom_line(aes(colour=GROUP)) + 
      geom_smooth(aes(group=GROUP)) 

geom_smooth plot http://img143.imageshack.us/img143/7678/geomsmooth.png

+0

Grazie rcs. Come posso cambiare l'SE in grigio al 95% anziché al 68%? –

+0

Vorrei solo notare che gli intervalli di smoothing di default non tengono conto (a mia conoscenza) di qualsiasi auto-correlazione presente nel soggetto. I dati longitudinali avranno quasi certamente una struttura di correlazione. Mi piace molto questo tipo di trama. –

+0

Puoi usare 'level' in' stat_smooth' (0.95 per impostazione predefinita): 'p + geom_smooth (livello = 0.95, aes (group = GROUP))' – rcs