这次,我将不会像以前在一个问题中那样直接询问如何检测异常值。我确实阅读了一些与此主题相关的帖子,但没有得到我所需要的。我有以下一组值:
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个离群值,或者如何使用非线性生成的模型来帮助检测这些离群值?
最好的祝福
沙赫扎德
最佳答案
library(TSA)
ar = TSA::arima(y, c(1,0,0))
detectAO(ar)
准确显示这三个点(
ind
是可能的异常值的索引):> detectAO(ar)
[,1] [,2] [,3]
ind 6.000000 20.000000 31.000000
lambda2 4.739695 5.957604 5.490739
但是请小心将这种方法应用于任何类型的数据。