7

这次我不会像以前在我的一个问题中那样直接询问如何检测异常值。我确实阅读了一些与该主题相关的帖子,但没有得到我需要的东西。我有一组值,如下所示:

y<-c(0.59, 0.61, 0.59, 1.55, 1.33, 3.50, 1.00, 1.22, 2.50, 3.00, 3.79, 3.98, 4.33, 4.45, 4.59, 4.72, 4.82, 4.90, 4.96, 7.92, 5.01, 5.01, 4.94, 5.05, 5.04, 5.03, 5.06, 5.10, 5.04, 5.06, 7.77, 5.07, 5.08, 5.08, 5.12, 5.12, 5.08, 5.17, 5.18)

现在,正如大多数研究人员所说,异常值检测过程不仅取决于数据,还取决于上下文。我使用了 R 中的几个包,例如异常值(grubbs 测试)、极值、mvoutlier(pcout 方法),但找不到使用它们的最佳方法。在这种情况下(取决于我的要求),7.77(obs no 31)、7.92(obs on 20)和 3.50(obs no 6)是异常值。使用异常值包的 grubbs 测试,我可以将 7.77 和 7.92 检测为异常值,但不能检测到 3.50。我不知道我是否可以在此处发布我的数据图,但在查看图上数据的趋势或分布后,观察号 6 将是明显的异常值。

我正在尝试为这些数据拟合一个非线性模型,但是由于这些异常值,我找不到最佳拟合(最佳拟合不是唯一的要求),无论如何我需要检测这些异常值,因为我将拟合一个单独的对这些异常值进行建模。

我的问题很简单。是否有可能我可以使用一些标准包检测这 3 个异常值,或者如何使用我的非线性生成模型来帮助检测这些异常值?

最好的祝福

沙赫扎德

在此处输入图像描述

4

3 回答 3

5

只是说我尝试detectAO()按照上面的建议使用,但我的数据没有发现任何东西(看起来有点相似:短尖峰来自连续趋势)。谷歌搜索后,我发现 Hempel 过滤器(hempel()来自 package的函数pracma)可以满足我的需求。我想我会在这里添加这个,以防其他人正在寻找解决方案。

于 2013-05-17T15:26:11.097 回答
4
library(TSA)
ar = TSA::arima(y, c(1,0,0))
detectAO(ar)

准确显示这 3 个点(ind是可能异常值的索引):

> detectAO(ar)
            [,1]      [,2]      [,3]
ind     6.000000 20.000000 31.000000
lambda2 4.739695  5.957604  5.490739

但要小心地将这种方法应用于任何类型的数据。

于 2012-11-11T00:59:05.387 回答
0
install.packages("forecast")         
library(forecast)
tsoutliers(data)

R 中的这三个代码将回答您的问题。之后tsclean(data)将清理您的数据。

步骤如下:

install.packages("forecast")
library(forecast)
t_s<- ts(y)
plot(t_s)
tsoutliers(t_s)
t_s_new<-tsclean(t_s)
plot(t_s_new)

如果仍然存在问题,请回复我。我将提供更复杂的异常值检测器。

于 2015-06-17T10:36:51.673 回答