评论: 首先,我要非常感谢新的tsoutliers软件包的作者,该软件包实现了Chen和Liu的时间序列离群值检测,该软件包于1993年在《美国统计协会杂志》上的开源软件。
程序包在时间序列数据中迭代检测5种不同类型的离群值:
- 附加异常值(AO)
- 创新离群值(IO)
- 电平转换(LS)
- 临时变更(TC)
- 季节性水平变动(SLS)
更妙的是,此程序包从预测程序包实现了auto.arima,因此可以无缝检测异常值。软件包还可以生成漂亮的图,以更好地了解时间序列数据。
以下是我的问题:
我尝试使用此程序包运行一些示例,但效果很好。加法离群值和电平移位很直观。但是,在处理临时更改离群值和创新离群值方面,我有两个问题,我无法理解。
临时更改异常值示例:
考虑以下示例:
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
tsoutliers
已重命名为tso
避免与package中的同名函数冲突forecast
。