Вопрос

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

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

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

Есть ли функция для удаления выбросов, как это в GGPlot, или где бы я поправлял свой код ниже, чтобы добавить свою собственную функцию?

Редактировать: я только что видел это (Как пользоваться опросными тестами в R CDEN) и обратите внимание, что Hadley рекомендует использовать надежный метод, такой как 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 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, следующая вещь, которую я хотел бы сделать, это попытаться поделиться логистической, ГОМПРТЗ или кривую роста Ричарда к этим данным вместо леса и рассчитать скорость роста на экспоненциальном этапе. В конце концов я планирую использовать пакет Grofit в R (http://cran.r-project.org/web/packages/grofit/index.html.), но пока я хотел бы построить их вручную, используя GGPlot2, если это возможно. Если у вас есть какие-либо указатели, то было бы очень ценится.

Это было полезно?

Решение

Вы пробовали family = "symmetric" аргумент geom_smooth (который в свою очередь будет передан на loess)? Это сделает лесс гладким устойчивым к выбросам.

Однако, глядя на ваши данные, почему вы думаете, что линейная подгонка не адекватная? У вас есть только 4 значения x, и, безусловно, не кажется сильным доказательством отъезда от линейности.

Другие советы

Во-первых, я не уверен, что «выброс» даже правильно определяется на таких небольших данных.

Во-вторых, вам тогда придется решить, что вы подразумеваете под «выбросом», то есть ли один из лекарств, один из репликов или одной из моментов времени?

Как отмечает Хэдли, мало доказательств отклонения от линейности.

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

Итак, я должен спрашивать именно, почему вы хотите удалить выбросы. То есть, что вы собираетесь делать с этими данными (помимо приготовления хороших участков)?

надеюсь, это поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top