Mam następujący zestaw danych, który próbuję wykreślić za pomocą ggplot2, jest to szereg czasowy trzech eksperymentów A1, B1 i C1, a każdy eksperyment miał trzy powtórzenia.R: Jak usunąć wartości odbiegające od gładszej w ggplot2?
Próbuję dodać statystyki, która wykrywa i usuwa wartości odstające, zanim zwróci gładszą (średnia i wariancja?). Napisałem własną funkcję odstającą (nie pokazano), ale oczekuję, że jest już funkcja do wykonania tego, po prostu jej nie znalazłem.
Przyjrzałem się stat_sum_df ("median_hilow", geom = "smooth") z kilku przykładów z książki ggplot2, ale nie rozumiałem dokumentu pomocy z Hmisc, aby sprawdzić, czy usuwa on wartości odstające.
Czy istnieje funkcja usuwania takich wartości w ggplot, czy gdzie mógłbym zmienić mój kod poniżej, aby dodać własną funkcję?
EDYCJA: Właśnie zobaczyłem to (How to use Outlier Tests in R Code) i zauważ, że Hadley zaleca użycie solidnej metody, takiej jak rlm. Planuję krzywe wzrostu bakterii, więc nie sądzę, aby model liniowy był najlepszy, ale wszelkie porady dotyczące innych modeli lub używania lub używania niezawodnych modeli w tej sytuacji byłyby mile widziane.
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...
To, co mam tak daleko i pracuje ładnie, ale odstających nie są usuwane:
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: Właśnie dodałem dwa wykresy poniżej pokazano przykłady problemów poboczna, że jestem posiadanie danych rzeczywistych zamiast danych przykładowych powyżej.
Pierwsze wątki pokazują serie p26s4 i około 32 dnia coś naprawdę dziwnego działo się w dwóch z powtórzeń, pokazując 2 odstające.
Druga działka przedstawia serię p22s5, a w dniu 18 coś dziwnego działo się z odczytem tego dnia, prawdopodobnie błąd maszyny.
W tej chwili przyglądam się danym, aby sprawdzić, czy krzywe wzrostu wyglądają dobrze. Po przyjęciu rady Hadleya i ustaleniu rodziny = "symetrycznej", jestem przekonany, że lessowy gładzik wykonuje przyzwoitą pracę ignorując wartości odstające.
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, następną rzeczą, którą chciałbym zrobić, to spróbować dopasować logistycznej, Gompertz lub krzywą wzrostu Richarda do tych danych zamiast lessu i obliczyć wzrost stawka w fazie wykładniczej. Ostatecznie planuję użyć pakietu grofit w R (http://cran.r-project.org/web/packages/grofit/index.html), ale na razie chciałbym je wykreślić ręcznie za pomocą ggplot2, jeśli to możliwe. Jeśli masz jakieś wskazówki, byłoby to bardzo cenne.
Otrzymuję komunikat "Błąd: nieznane parametry: rodzina", gdy próbuję tego. – JayCo
Wyliczyłem to! Poprawna składnia to 'geom_smooth (method = less, method.args = list (family =" symmetric "))' – JayCo