R: Как удалить выбросы из сглаживания в ggplot2?

У меня есть следующий набор данных, который я пытаюсь построить с помощью ggplot2, это временной ряд из трех экспериментов A1, B1 и C1, и каждый эксперимент имел три повторения.

Я пытаюсь добавить статистику, которая обнаруживает и удаляет выбросы перед возвратом сглаживания (среднее значение и дисперсия?). Я написал свою собственную функцию выброса (не показана), но я ожидаю, что уже есть функция для этого, я просто не нашел ее.

Я посмотрел на stat_sum_df ("median_hilow", geom = "smooth") из некоторых примеров в книге ggplot2, но я не понял справочный документ из Hmisc, чтобы увидеть, удаляет ли он выбросы или нет.

Есть ли в ggplot функция для удаления таких выбросов, или где бы я мог изменить свой код ниже, чтобы добавить свою собственную функцию?

РЕДАКТИРОВАТЬ: Я только что видел это (Как использовать Outlier-тесты в R-коде) и обратите внимание, что Хэдли рекомендует использовать надежный метод, такой как rlm. Я строю кривые роста бактерий, поэтому я не думаю, что линейная модель лучше, но любой совет по поводу других моделей или использования или использования надежных моделей в этой ситуации был бы оценен.

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

Это то, что у меня до сих пор и работает хорошо, но выбросы не удаляются:

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

РЕДАКТИРОВАТЬ: я только что добавил две диаграммы ниже, показывая примеры проблем, которые у меня возникают из реальных данных, а не из приведенных выше примеров данных.

На первых графиках показана серия p26s4, и примерно в день 32 в двух повторностях произошло нечто действительно странное, показав 2 выброса.

На втором графике показана серия p22s5, и на 18-й день произошло что-то странное с чтением в тот день, вероятно, машинная ошибка, я думаю.

Сейчас я проверяю данные, чтобы убедиться, что кривые роста выглядят нормально. Приняв совет Хэдли и установив семейство = "симметричный", я уверен, что лесс сглаживатель делает достойную работу, игнорируя выбросы.

p26s4 показывает около 32 дня, что-то действительно странное произошло в двух повторностях, показывая 2 выброса http://img696.imageshack.us/img696/8743/p26s4loess.png p22s5 показывает, что в день 18 что-то странное продолжалось с чтением в тот день, вероятно, машинная ошибка, я думаю http://img521.imageshack.us/img521/8083/p22s5loess.png

@ Peter / @ hadley, следующее, что я хотел бы сделать, это попытаться приспособить кривую роста логистики, Гомперца или Ричарда к этим данным вместо лесса и рассчитать темп роста на экспоненциальной стадии. Со временем планирую использовать пакет grofit в R (http://cran.r-project.org/web/packages/grofit/index.html), но сейчас я хотел бы построить их вручную, используя ggplot2, если это возможно. Если у вас есть какие-либо указатели, то это будет высоко ценится.

Ответы на вопрос(2)

Ваш ответ на вопрос