2015-09-19 18 views
5

Ho alcuni dati che ho raccolto da un modello. Voglio tracciare le dimensioni di una popolazione nel tempo. Ho la dimensione della popolazione in ogni fase del tempo e 100 repliche. Vorrei tracciare la dimensione media della popolazione per ogni passo temporale e anche gli intervalli di confidenza al 95% (come un'ombreggiatura se possibile).tracciare i mezzi con intervalli di confidenza con ggplot

Non ho usato prima ggplot. Ho appena usato i soliti (base) grafici in R finora. Ma voglio vedere come sarebbe il ggplot.

Ecco quello che ho finora:

ggplot(data=model1, aes(x=steps., y= pop-size, col='blue')) + 
    geom_line() 

Questa traccia tutti i punti, e si guarda bene, ma non so come tracciare solo i mezzi e aggiungere gli intervalli di confidenza.

+1

Dovresti controllare qui: http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/ – AntoniosK

+1

Dai un'occhiata anche a "? Stat_smooth'. – Jaap

+0

Dato che sei relativamente (relativamente) nuovo di SO, leggi [this] (http://stackoverflow.com/help/mcve) e [this] (http://stackoverflow.com/questions/5963269/how-to -make-a-great-r-reproducible-example/5963610 # 5963610) su come porre una domanda ben fatta che è più probabile che abbia una risposta. – jlhoward

risposta

13

Poiché i dati sono stati replicati e si desidera rappresentare media/CL, è preferibile utilizzare stat_summary(...) che è stato progettato per (è stato indovinato) il riepilogo dei dati. Fondamentalmente, applica una funzione a tutti i valori y per ogni valore x (ad esempio, la funzione mean(...)) e quindi traccia il risultato utilizzando qualsiasi geometria specificata. Ecco un esempio:

# sample data - should be provided in question 
set.seed(1)  # for reproducible example 
time <- 1:25 
df <- data.frame(time, 
        pop=rnorm(100*length(time), mean=10*time/(25+time))) 

library(ggplot2) 
ggplot(df, aes(x=time, y=pop))+ 
    stat_summary(geom="ribbon", fun.data=mean_cl_normal, width=0.1, conf.int=0.95, fill="lightblue")+ 
    stat_summary(geom="line", fun.y=mean, linetype="dashed")+ 
    stat_summary(geom="point", fun.y=mean, color="red") 

Quindi qui abbiamo 3 strati: uno strato che riassume i valori y utilizzando la funzione mean(...) e diagrammi utilizzando geom="line", uno strato che riassume allo stesso modo ma piazzole usando geom="point" e un layer che usa geom="ribbon" Questa geom richiede l'estetica ymin e ymax, quindi usiamo la funzione ggplot integrata mean_cl_normal per generare quelli basati sul presupposto che l'errore sia distribuito normalmente e che, quindi, il mezzo segua un -distribuzione. Digitare ?hmisc per la documentazione sulle varie funzioni utili per i limiti di confidenza. I layer eseguono il rendering nell'ordine del codice, quindi, dal momento che si desidera l'ombreggiatura, è necessario inserire prima il nastro di errore.

Infine, è ovviamente possibile riepilogare i dati da soli, utilizzando dplyr o alcuni di essi, ma non vedo davvero il punto di farlo.

Aggiornamento (sulla base di recenti commenti): sembra la versione più recente di ggplot2 (2.0.0) ha un modo diverso di specificare gli argomenti da fun.data. Questo funziona nella nuova versione:

ggplot(df, aes(x=time, y=pop))+ 
    stat_summary(geom="ribbon", fun.data=mean_cl_normal, 
       fun.args=list(conf.int=0.95), fill="lightblue")+ 
    stat_summary(geom="line", fun.y=mean, linetype="dashed")+ 
    stat_summary(geom="point", fun.y=mean, color="red") 

Il problema con l'argomento width=... è un po 'più sottile penso: in realtà non è necessario (nella risposta originale che ho usato barre di errore, e si è dimenticato di togliere questo argomento quando l'ho cambiato in nastro). La versione precedente di ggplot2 ignorava gli argomenti estranei (quindi, nessun errore). La nuova versione, evidentemente, è più severa. Probabilmente è meglio

+1

Preferisco leggermente 'stat_summary (geom =" ribbon ", fun.data = mean_cl_normal, color = NA, alpha = 0.1) ' –

+0

Preferisco le barre di errore in realtà, ma in realtà ho letto male la domanda - OP vuole i nastri. Ho modificato la mia risposta. – jlhoward

+0

Grazie! Questo è perfetto. La prossima volta farò in modo di inserire dati campione ecc. Nella mia domanda. – 91dpo

Problemi correlati