评论: 首先,我要非常感谢新tsoutliers软件包的作者,该软件包实现了 Chen 和 Liu 的时间序列异常值检测,该软件包于 1993 年发表在美国统计协会杂志的开源软件中。
该包在时间序列数据中迭代检测 5 种不同类型的异常值:
- 加性异常值 (AO)
- 创新异常值 (IO)
- 电平转换 (LS)
- 临时变更 (TC)
- 季节性水平偏移 (SLS)
更棒的是,这个包从预测包中实现了 auto.arima,因此检测异常值是无缝的。该软件包还可以生成漂亮的图,以便更好地理解时间序列数据。
以下是我的问题:
我尝试使用这个包运行几个示例,效果很好。加性异常值和水平偏移是直观的。但是,关于处理临时变更异常值和创新异常值,我有 2 个问题,我无法理解。
临时变化异常值示例:
考虑以下示例:
library(tsoutliers)
library(expsmooth)
library(fma)
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
该程序正确地检测到以下位置的电平偏移和临时变化。
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.153
2 TC 20 1943 36.38 3.350
以下是情节和我的问题。
- 如何以方程式格式编写临时更改?(电平位移可以很容易地写成二进制变量,在 1935/Obs 12 之前的任何时间都是 0,而在 1935 和之后的任何时间都是 1。)
包装手册和文章中临时更改的公式如下:
其中为 0.7。我只是在努力将其翻译为上面的示例。
- 我的第二个问题是关于创新异常值,我在实践中从未遇到
过创新异常值。任何数值示例或案例示例都会非常有帮助。
编辑: @Irishstat,tsoutliers 函数在识别异常值和建议适当的 ARIMA 模型方面做得很好。查看 Nile 数据集,请参阅下面的 auto.arima 应用程序,然后应用 tsoutliers(默认值包括 auto.arima):
auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 estimated as 19769: log likelihood=-630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
应用 tsoutliers 函数后,它会识别 LS 异常值和加性异常值,并推荐 ARIMA 顺序 (0,0,0)。
nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile
ARIMA(0,0,0) with non-zero mean
Coefficients:
intercept LS29 AO43
1097.7500 -242.2289 -399.5211
s.e. 22.6783 26.7793 120.8446
sigma^2 estimated as 14401: log likelihood=-620.65
AIC=1249.29 AICc=1249.71 BIC=1259.71
Outliers:
type ind time coefhat tstat
1 LS 29 1899 -242.2 -9.045
2 AO 43 1913 -399.5 -3.306