Frage

Ich habe den folgenden Datensatz, den ich mit GGPLOT2 zeichnen möchte. Es handelt sich um eine Zeitreihe von drei Experimenten A1, B1 und C1, und jedes Experiment hatte drei Replikate.

Ich versuche einen Status hinzuzufügen, der Ausreißer erfasst und beseitigt, bevor ich einen glatteren (Mittelwert und Varianz?) Zurückgibt. Ich habe meine eigene Ausreißerfunktion geschrieben (nicht gezeigt), aber ich gehe davon aus, dass es bereits eine Funktion gibt, die dies tut, ich habe sie einfach nicht gefunden.

Ich habe mir stat_sum_df ("median_hilow", geom = "sanft") aus einigen Beispielen im GGPLOT2 -Buch angesehen, aber ich habe das Hilfedoc von HMISC nicht verstanden, um zu sehen, ob es Ausreißer beseitigt oder nicht.

Gibt es eine Funktion, um solche Ausreißer in GGPlot zu entfernen, oder wo würde ich meinen Code unten ändern, um meine eigene Funktion hinzuzufügen?

EDIT: Ich habe das gerade gesehen (So verwenden Sie Ausreißer -Tests im R -Code) und Beachten Sie, dass Hadley eine robuste Methode wie RLM empfiehlt. Ich zeichne bakterielle Wachstumskurven auf, daher denke ich nicht, dass ein lineares Modell am besten ist, aber alle Ratschläge zu anderen Modellen oder die Verwendung oder Verwendung robuster Modelle in dieser Situation wären geschätzt.

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

Das habe ich bisher und arbeitet gut, aber Ausreißer werden nicht entfernt:

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

Bearbeiten: Ich habe gerade zwei Diagramme hinzugefügt, in denen Beispiele für die Ausreißerprobleme, die ich aus den realen Daten habe, und nicht die obigen Beispieldaten.

Die ersten Diagramme zeigen die Serie P26S4 und um Tag 32 etwas wirklich Seltsames in zwei der Replikate und zeigen 2 Ausreißer.

Die zweite Diagramm zeigt die Serie P22S5 und am 18. Tag, etwas Seltsames fuhr mit der Lesung an diesem Tag, wahrscheinlich für Maschinenfehler, denke ich.

Im Moment spreche ich die Daten auf, um zu überprüfen, ob die Wachstumskurven in Ordnung aussehen. Nachdem ich Hadleys Rat beantragt und familie = "symmetrisch" eingestellt hatte, bin ich zuversichtlich, dass die loess glattere Aufgabe die Ignorierung der Ausreißer leistet.

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, das nächste, was ich gerne tun möchte, ist zu versuchen, eine logistische, Gompertz- oder Richard -Wachstumskurve an diese Daten anstelle einer Löss zu passen und die Wachstumsrate in der Exponentialstufe zu berechnen. Schließlich plane ich das Grofit -Paket in R (http://cran.r-project.org/web/packages/grofit/index.html), aber im Moment möchte ich diese manuell mit ggplot2 prüfen, wenn möglich. Wenn Sie irgendwelche Hinweise haben, wäre es sehr geschätzt.

War es hilfreich?

Lösung

Hast du das ausprobiert family = "symmetric" Argument an geom_smooth (was wiederum an weitergegeben wird loess)? Dadurch wird die Löss glatt resistent gegen Ausreißer.

Warum ist eine lineare Anpassung Ihrer Meinung nach nicht angemessen? Sie haben nur 4 x Werte, und es scheint sicherlich keine starken Beweise für eine Abweichung von der Linearität zu geben.

Andere Tipps

Erstens bin ich mir nicht sicher, ob ein „Ausreißer“ auf solch kleinen Daten ordnungsgemäß definiert ist.

Zweitens müssten Sie dann entscheiden, was Sie unter "Ausreißer" meinen, dh es ist eines der Drogen, eines der Replikate oder eines der Zeitpunkte?

Wie Hadley bemerkt, gibt es kaum Hinweise auf Abweichung von der Linearität.

Schließlich denke ich, dass ein Teil der Verwendung eines reibungsloseren Einsatzes ist, dass es sich gut mit Ausreißern befasst, vorausgesetzt, es gibt genügend Daten. Aber du hast sehr wenig.

Ich muss also genau fragen, warum Sie Ausreißer entfernen möchten. Was machen Sie mit diesen Daten (abgesehen davon, dass Sie nette Handlungen machen)?

ich hoffe das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top