我有以下我试图用GGPLOT2绘制的数据集,这是三个实验A1,B1和C1的时间序列,每个实验都有三个重复。

我正在尝试添加一个统计数据,该统计数据在返回更平滑的情况下(均值和差异?),该统计数据检测和删除异常值。我写了自己的离群功能(未显示),但我希望已经有一个功能可以做到这一点,我只是没有找到它。

我从GGPLOT2书中的一些示例中查看了Stat_sum_df(“ median_hilow”,geom =“ smooth”),但是我不了解HMISC的帮助文档,以查看它是否删除了异常值。

是否可以在GGPLOT中删除此类异常值的功能,或者我在哪里可以修改我的代码以添加自己的功能?

编辑:我刚刚看到了(如何在R代码中使用离群测试)并注意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天,那天的阅读持续了一些奇怪的事情,我认为可能的机器错误。

目前,我正在注视数据,以检查生长曲线看起来还不错。在接受Hadley的建议并设置Family =“对称”之后,我相信,黄土更加顺畅地忽略了异常值。

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,我要做的下一件事是尝试将物流,Gompertz或Richard的增长曲线适合此数据,而不是在指数阶段计算增长率。最终我计划在R中使用Grofit软件包(http://cran.r-project.org/web/packages/grofit/index.html),但是就目前而言,我想在可能的情况下手动使用这些手动绘制这些。如果您有任何指针,那将不胜感激。

有帮助吗?

解决方案

你尝试过吗 family = "symmetric" 争论 geom_smooth (反过来将传递给 loess)?这将使黄土对异常值的平稳性抗性。

但是,查看您的数据,为什么您认为线性拟合不足?您只有4个X值,而且似乎没有强有力的证据证明与线性偏离。

其他提示

首先,我不确定在这样的小数据上是否正确定义了“离群值”。

其次,您必须决定“离群值”的含义,也就是说,这是其中之一,是重复的毒品之一,还是一个时间点之一?

正如哈德利指出的那样,几乎没有偏离线性的证据。

最后,我认为使用更平滑的部分是,只要有足够的数据,它就可以很好地处理异常值。但是你很少。

因此,我必须确切地问您为什么要删除异常值。也就是说,您将如何处理这些数据(除了制作好地块)?

我希望这有帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top