我已经使用auto.arima()
R中的函数拟合了ARIMA(5,1,2)模型,通过查找顺序可以说这不是预测的最佳模型。如果数据序列中存在异常值,那么将模型拟合到此类数据的方法是什么?
我已经使用auto.arima()
R中的函数拟合了ARIMA(5,1,2)模型,通过查找顺序可以说这不是预测的最佳模型。如果数据序列中存在异常值,那么将模型拟合到此类数据的方法是什么?
Answers:
迈克尔·切尔尼克(Michael Chernick)为您指明了正确的方向。我还将看一下Ruey Tsay的工作,这些工作增加了这一知识体系。在这里查看更多。
您无法与当今的自动化计算机算法竞争。他们研究了许多方法来处理您从未考虑过的时间序列,并且通常不会在任何纸质或书籍中进行记录。当有人问如何进行方差分析时,与其他算法进行比较时,可以得到一个精确的答案。当有人问我如何进行模式识别时,由于涉及到启发式方法,因此可能有许多答案。您的问题涉及启发式方法的使用。
如果数据中存在异常值,拟合ARIMA模型的最佳方法是评估可能的自然状态,并选择对特定数据集认为最佳的方法。一种可能的自然状态是ARIMA过程是所解释的变化的主要来源。在这种情况下,将通过acf / pacf函数“初步识别” ARIMA过程,然后检查残差以寻找可能的异常值。离群值可以是脉冲,即一次事件或季节性脉冲,这些异常值可以通过系统离群值以某个频率(例如,每月数据为12个)来证明。第三种离群值是其中有一组连续的脉冲,每个脉冲具有相同的符号和大小,这称为阶跃或电平移位。在检查了暂定ARIMA过程的残差后,可以暂定添加根据经验确定的确定性结构,以创建暂定组合模型。如果变异的主要来源也不是4种或“异常值”中的一种,那么最好从头开始识别它们,然后使用该“回归模型”中的残差来识别随机(ARIMA)结构,从而更好地满足这一要求。 。现在,当一个“问题”中ARIMA参数随时间变化或误差方差由于多种可能原因(可能需要加权最小二乘或幂变换)而变化时,这两种替代策略变得更加复杂。如原木/倒数等 另一个复杂性/机会是如何以及何时形成用户建议的预测变量系列的贡献,以形成一个无缝集成的模型,该模型整合了记忆,因果关系和经验识别的虚拟序列。当人们使用以下形式的指标系列来最好地模拟趋势系列时,这个问题会进一步恶化。或以及像。您可能想尝试用R编写这样的过程,但是寿命很短。我很乐意实际解决您的问题并在这种情况下演示该程序的工作原理,请发布数据或将其发送到sales@autobox.com
从2007年1月1日起,接收/分析数据/每日汇率后的汇率/ 18 = 765值后的附加注释
数据的acf为:
在识别形式为且具有多个离群值的arma模型后,由于acf值非常小,因此残差的acf表示随机性。AUTOBOX确定了许多异常值:
最终模型:
包括需要对方差稳定化进行la TSAY,在其中识别并合并残差的方差变化。自动运行的问题在于,您所使用的过程像会计一样,会相信数据,而不是通过干预检测(又称为异常值检测)来挑战数据。我在这里发表了完整的分析。
R中尚未准备好使用健壮的对等函数来实现Arima函数(尚未);如果出现,它将在这里列出。也许另一种选择是减少那些相对于简单单变量离群值检测规则而言遥不可及的观测值,但是我也看不出准备使用软件包来运行加权ARMA回归。然后,另一个可能的选择是对偏僻点进行Winsorize:
#parameters
para <- list(ar=c(0.6,-0.48), ma=c(-0.22,0.24))
#original series
y1 <- y0 <- arima.sim(n=100, para, sd=sqrt(0.1796))
#outliers
out <- sample(1:100, 20)
#contaminated series
y1[out] <- rnorm(20, 10, 1)
plot( y1, type="l")
lines(y0, col="red")
#winsorized series
y2 <- rep(NA, length(y1))
a1 <- (y1-median(y1)) / mad(y1)
a2 <- which(abs(a1)>3)
y2[-a2] <- y1[-a2]
for(i in 2:length(y2)){
if(is.na(y2[i])){ y2[i] <- y2[i-1] }
}
关于鲁棒时间序列模型有大量文献。马丁和Yohai是主要的贡献者。他们的工作可以追溯到1980年代。我自己做了一些工作来检测时间序列中的离群值,但是马丁确实是在时间序列中存在离群值或重尾残差的情况下,检测离群值和参数估计的众多贡献者之一。
模型的目的是预测或分析历史吗?如果这不是用于预测,并且您知道这些是异常值,则只需添加虚拟变量,该变量在那些日期中为1,在其他日期中为0。这样,虚拟系数将处理异常值,并且您将能够解释模型中的其他系数。
如果这是为了进行预测,则您必须问自己两个问题:这些异常值会再次发生吗?如果可以的话,我是否必须考虑它们?
例如,假设雷曼兄弟倒闭时您的数据序列有异常值。显然,这是您无法预测的事件,但您不能简单地忽略它,因为类似的事情将来必定会发生。如果为异常值丢掉虚拟对象,则可以有效地消除误差方差中该事件的不确定性。您的预测会低估尾部风险-对于风险管理而言,这可能不是一件好事。但是,如果您要生成基准销售预测,则该假人会起作用,因为您对尾巴不感兴趣,因此您对最有可能的情况感兴趣-因此,您不必为这个目的。
因此,模型的目的会影响处理异常值的方式。