Domanda

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 replicati.

Sto cercando di aggiungere una statistica che rileva e rimuove i valori anomali prima di restituire un fluido (media e varianza?). Ho scritto la mia funzione outlier (non mostrata) ma mi aspetto che ci sia già una funzione per farlo, non l'ho trovato.

Ho guardato STAT_SUM_DF ("Median_Hilow", geom = "Smooth") da alcuni esempi nel libro di GGPlot2, ma non ho capito l'Aiuto Doc di HMisc per vedere se rimuove o meno i valori anomali.

Esiste una funzione per rimuovere i valori anomali come questa in GGPlot o dove mi modificherei il codice di seguito per aggiungere la mia funzione?

EDIT: ho appena visto questo (Come utilizzare i test anomali nel codice R) e notare che Hadley consiglia di utilizzare un metodo robusto come RLM. Sto pianificando le curve di crescita batterica, quindi non credo che un modello lineare sia il migliore, ma qualsiasi consiglio su altri modelli o utilizzando o usando 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 è ciò che ho finora e funziona bene, ma i 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 che mostrano esempi dei problemi anomali che sto avendo dai dati reali piuttosto che dai dati di esempio sopra.

Le prime trame mostrano la serie P26S4 e intorno al giorno 32 qualcosa di veramente strano è successo in due dei replicati, mostrando 2 valori anomali.

Le seconde trame mostrano la serie P22S5 e il giorno 18, qualcosa di strano è andato avanti con la lettura quel giorno, penso probabilmente l'errore della macchina.

Al momento sto sfregando i dati, per verificare che le curve di crescita siano ok. Dopo aver preso la consulenza di Hadley e aver definito la famiglia = "Simmetrico", sono fiducioso che il Loess Scother faccia un lavoro decente di ignorare i valori anomali.

p26s4 shows around day 32 something really weird went on in two of the replicates, showing 2 outliers p22s5 shows that on day 18, something weird went on with the reading that day, likely machine error I think

@Peter/@Hadley, la prossima cosa che mi piacerebbe fare è provare a adattarsi a una curva di crescita logistica, Gompertz o Richard a questi dati anziché a un loess e calcolare il tasso di crescita 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 vorrei tracciare questi manualmente usando GGPlot2, se possibile. Se hai dei suggerimenti, sarebbe molto apprezzato.

È stato utile?

Soluzione

Hai provato il family = "symmetric" argomento a geom_smooth (che a sua volta verrà trasmesso loess)? Ciò renderà il loess liscio resistente ai valori anomali.

Tuttavia, guardando i tuoi dati, perché pensi che una vestibilità lineare non sia adeguata? Hai solo 4 valori X e certamente non sembra esserci una prova forte per una partenza dalla linearità.

Altri suggerimenti

Innanzitutto, non sono sicuro che un "outlier" sia persino correttamente definito su dati così piccoli.

In secondo luogo, dovresti quindi decidere cosa intendi per "outlier", cioè uno dei farmaci, uno dei replicati o uno dei punti temporali?

Come osserva Hadley, ci sono poche prove di deviazione dalla linearità.

Infine, penso che parte del punto di usare un fluido sia che si occupa bene degli outlier, a condizione che ci siano abbastanza dati. Ma hai molto poco.

Quindi, devo chiedere esattamente perché vuoi rimuovere i valori anomali. Cioè, cosa hai intenzione di fare con questi dati (oltre a fare belle trame)?

spero che questo aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top