一旦我在时间序列数据中找到/检测到异常值,我就试图找到一种纠正异常值的方法。某些方法(例如R中的nnetar)会给出具有较大/较大异常值的时间序列的一些错误。我已经设法纠正了缺失的值,但是离群值仍在损害我的预测...
一旦我在时间序列数据中找到/检测到异常值,我就试图找到一种纠正异常值的方法。某些方法(例如R中的nnetar)会给出具有较大/较大异常值的时间序列的一些错误。我已经设法纠正了缺失的值,但是离群值仍在损害我的预测...
Answers:
预测包中现在有一个用于R的工具,用于识别和替换异常值。(它也可以处理缺失的值。)由于您显然已经在使用预测包,因此这可能是您的便捷解决方案。例如:
fit <- nnetar(tsclean(x))
该tsclean()
函数将使用黄土(针对非季节性序列)拟合稳健的趋势,或者使用STL(针对季节性序列)拟合稳健的趋势和季节性分量。计算残差并计算以下范围:
对于非季节时间序列,离群值由线性插值代替。对于季节性时间序列,在重新季节性化结果之前,应删除STL拟合中的季节性分量,并线性内插经季节性调整的序列以替换异常值。
当您识别ARIMA模型时,您应该同时识别脉冲/水平移动/季节性脉冲和/或本地时间趋势。您可以在http://www.ebay.com/ctg/Time-Series-Analysis-Univariate-and-Multivariate-Methods-David-P-Reilly-and-William-Wei-1999上获得有关干预检测程序的一些阅读材料 。 -/ 85697和http://www.unc.edu/~jbhill/tsay.pdf。正如我所看到的免费软件一样,您可能必须使用SAS / SPSS / AUTOBOX等商业软件才能获得有用的结果。顺便说一句,我在这方面为AUTOBOX做出了重大的技术改进。
编辑:
更好的方法是使用严格的ARIMA方法加上干预检测程序来识别异常值,从而获得可靠的ARIMA参数和良好的预测。现在考虑开发包含无脉冲效应的重新采样残差的模拟预测。通过这种方式,您可以得到两全其美的效果,即通过一个好的模型和更现实的不确定性陈述来进行预测,这些假设不假定估计的模型参数是总体值。
我同意@Aksakal。代替消除异常值,更好的方法是使用某种统计程序来处理异常值。我建议您winsorise您的数据。如果实施得当,winsorisation对异常值可能会相对稳健。在此页面上:http : //www.r-bloggers.com/winsorization/,您将找到用于实现winsorisation的R代码。如果您考虑取消数据存储,则需要仔细考虑分布的尾巴。预期的异常值是极低的,还是预期的极高,或者两者都有。这将影响您的Winsorise是否处于5%或10%和/或95%或99%的水平。
在预测环境中,除去异常值是非常危险的。例如,您正在预测杂货店的销售。假设相邻建筑物发生瓦斯爆炸,导致您关闭商店几天。这是这家商店十年来唯一一次关闭。因此,您将获得时间序列,检测异常值,将其删除并进行预测。您无声地认为将来不会发生任何此类情况。实际上,您压缩了观察到的方差,并且系数方差缩小了。因此,如果显示预测的置信带,则它们将比不删除离群值的情况要窄。
当然,您可以保留异常值,并照常进行,但这也不是一个好方法。原因是该异常值将使系数偏斜。
我认为在这种情况下,更好的方法是允许错误分布并带有粗尾,也许是稳定分布。在这种情况下,您的离群值不会使系数偏斜太多。它们将接近系数,而离群值被删除。但是,异常值将显示在误差分布中,即误差方差。本质上,您将获得更宽的预测置信度范围。
置信带传达了非常重要的信息。如果您预测本月的销售额为1,000,000 美元,但是有5%的可能性是10,000美元,这会影响您在支出,现金管理等方面的决定。