Ho il seguente set di dati che sto cercando di tracciare con ggplot2, è una serie temporale di tre esperimenti A1, B1 e C1 e ogni esperimento ha avuto tre repliche.R: Come rimuovere i valori anomali da una sfumatura in ggplot2?
Sto tentando di aggiungere una statistica che rileva e rimuove i valori anomali prima di restituire un valore più uniforme (media e varianza?). Ho scritto la mia funzione outlier (non mostrata) ma mi aspetto che ci sia già una funzione per farlo, ma non l'ho trovata.
Ho visto stat_sum_df ("median_hilow", geom = "smooth") da alcuni esempi nel libro ggplot2, ma non ho capito il documento di aiuto di Hmisc per vedere se rimuove i valori anomali o meno.
Esiste una funzione per rimuovere valori anomali come questo in ggplot o dove dovrei modificare il mio codice qui sotto per aggiungere la mia funzione?
EDIT: Ho appena visto questo (How to use Outlier Tests in R Code) e notare che Hadley consiglia di utilizzare un metodo robusto come rlm. Sto tracciando le curve di crescita batterica, quindi non credo che un modello lineare sia il migliore, ma qualsiasi consiglio su altri modelli o l'utilizzo o l'utilizzo di modelli robusti in questa situazione sarebbe apprezzato.
library (ggplot2)
data = data.frame (day = c(1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7), od =
c(
0.1,1.0,0.5,0.7
,0.13,0.33,0.54,0.76
,0.1,0.35,0.54,0.73
,1.3,1.5,1.75,1.7
,1.3,1.3,1.0,1.6
,1.7,1.6,1.75,1.7
,2.1,2.3,2.5,2.7
,2.5,2.6,2.6,2.8
,2.3,2.5,2.8,3.8),
series_id = c(
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1"),
replicate = c(
"A1.1","A1.1","A1.1","A1.1",
"A1.2","A1.2","A1.2","A1.2",
"A1.3","A1.3","A1.3","A1.3",
"B1.1","B1.1","B1.1","B1.1",
"B1.2","B1.2","B1.2","B1.2",
"B1.3","B1.3","B1.3","B1.3",
"C1.1","C1.1","C1.1","C1.1",
"C1.2","C1.2","C1.2","C1.2",
"C1.3","C1.3","C1.3","C1.3"))
> data
day od series_id replicate
1 1 0.10 A1 A1.1
2 3 1.00 A1 A1.1
3 5 0.50 A1 A1.1
4 7 0.70 A1 A1.1
5 1 0.13 A1 A1.2
6 3 0.33 A1 A1.2
7 5 0.54 A1 A1.2
8 7 0.76 A1 A1.2
9 1 0.10 A1 A1.3
10 3 0.35 A1 A1.3
11 5 0.54 A1 A1.3
12 7 0.73 A1 A1.3
13 1 1.30 B1 B1.1
... etc...
Questo è quello che ho finora e sta lavorando bene, ma valori anomali non vengono rimossi:
r <- ggplot(data = data, aes(x = day, y = od))
r + geom_point(aes(group = replicate, color = series_id)) + # add points
geom_line(aes(group = replicate, color = series_id)) + # add lines
geom_smooth(aes(group = series_id)) # add smoother, average of each replicate
EDIT: Ho appena aggiunto due grafici qui sotto mostrano esempi dei problemi valori anomali che sto avendo dai dati reali piuttosto che i dati di esempio sopra.
I primi grafici mostrano la serie p26s4 e intorno al giorno 32 qualcosa di veramente strano è andato avanti in due dei replicati, mostrando 2 valori anomali.
I secondi grafici mostrano la serie p22s5 e il giorno 18, qualcosa di strano è andato avanti con la lettura quel giorno, probabilmente un errore della macchina, penso.
Al momento sto osservando i dati per verificare che le curve di crescita abbiano un aspetto OK. Dopo aver preso il consiglio di Hadley e aver impostato la famiglia = "simmetrica", sono fiducioso che il loess smooth fa un lavoro decente nell'ignorare i valori anomali.
p26s4 shows around day 32 something really weird went on in two of the replicates, showing 2 outliers http://img696.imageshack.us/img696/8743/p26s4loess.png p22s5 shows that on day 18, something weird went on with the reading that day, likely machine error I think http://img521.imageshack.us/img521/8083/p22s5loess.png
@ Peter/@ Hadley, la prossima cosa che vorrei fare è quello di cercare di montare un logistico, Gompertz o curva di crescita di Richard a questi dati, invece di un loess e calcolare la crescita tasso nella fase esponenziale. Alla fine ho intenzione di utilizzare il pacchetto grofit in R (http://cran.r-project.org/web/packages/grofit/index.html), ma per ora mi piacerebbe tracciare questi manualmente utilizzando ggplot2 se possibile. Se hai qualche indicazione allora sarebbe molto apprezzato.
Ottengo 'Errore: parametri sconosciuti: famiglia' quando provo questo. – JayCo
Capito! La sintassi corretta è 'geom_smooth (method = loess, method.args = list (family =" symmetric "))' – JayCo