这是一篇很长的文章,所以希望您能忍受,并请纠正我错的地方。
我的目标是根据3或4周的历史数据生成每日预测。
该数据是变压器线路之一的局部负载的15分钟数据。我在查找季节性ARIMA过程的模型顺序时遇到麻烦。考虑用电时间序列:
原始时间序列http://i.share.pho.to/80d86574_l.png
当将前三周作为子集并进行差分时,将计算以下ACF / PACF图:
子集http://i.share.pho.to/5c165aef_l.png
第一个区别http://i.share.pho.to/b7300cc2_l.png
季节性和第一次差异http://i.share.pho.to/570c5397_l.png
看起来该系列有点固定。但是季节性也可以是每周一次(请参阅季节性差异周和二阶差异[在这里] http://share.pho.to/3owoq,您怎么看?)
Series: x
ARIMA(0,1,4)(0,1,1)[96]
Coefficients:
ma1 ma2 ma3 ma4 sma1
-0.2187 -0.2233 -0.0996 -0.0983 -0.9796
s.e. 0.0231 0.0234 0.0257 0.0251 0.0804
sigma^2 estimated as 364612: log likelihood=-15138.91
**AIC=30289.82 AICc=30289.87 BIC=30323.18**
Series: x
ARIMA(1,1,1)(2,0,2)[96]
Coefficients:
ar1 ma1 sar1 sar2 sma1 sma2
0.7607 -1.0010 0.4834 0.4979 -0.3369 -0.4168
s.e. 0.0163 0.0001 0.0033 0.0116 0.0216 0.0255
sigma^2 estimated as 406766: log likelihood=-15872.02
**AIC=31744.99 AICc=31745.05 BIC=31784.25**
这意味着不应用季节性差异。这里 是两个模型的残差。Ljung Box统计信息提供的p值非常小,表明仍然存在一些自相关(如果错了,请纠正我)。
预测
因此,要确定哪个更好,则样本外准确性测试将是最好的。因此,对于这两种模型,预测都会提前24小时进行比较。结果是: auto.arima http://i.share.pho.to/5d1dd934_l.png 手动模型http://i.share.pho.to/7ca69c97_l.png
汽车:
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set -2.586653 606.3188 439.1367 -1.284165 7.599403 0.4914563 -0.01219792 NA
Test set -330.144797 896.6998 754.0080 -7.749675 13.268985 0.8438420 0.70219229 1.617834
手册
ME RMSE MAE MPE MAPE MASE ACF1 Theil's U
Training set 2.456596e-03 589.1267 435.6571 -0.7815229 7.509774 0.4875621 -0.002034122 NA
Test set 2.878919e+02 919.7398 696.0593 3.4756363 10.317420 0.7789892 0.731013599 1.281764
问题
您可能会想到,这是对数据集前三周的分析。我在思考以下问题:
- 我如何选择最佳的ARIMA模型(通过尝试所有不同的顺序并检查最佳的MASE / MAPE / MSE?其中性能测量的选择本身就可以进行讨论。)
- 如果我生成一个新模型并针对每个新的每日天气预报(如在线天气预报)进行预报,是否需要考虑年度趋势以及如何考虑?(因为在这么小的子集中,我的猜测是趋势可以忽略)
- 您是否希望模型顺序在整个数据集中保持不变,即当采用另一个子集时会给我相同的模型吗?
- 用这种方法来应对假期有什么好办法?还是为此需要带有外部假人的ARIMAX?
- 我是否需要使用傅里叶级数方法来尝试使用“ 长季节”中
seasonality=672
讨论的模型 ? - 如果是这样的话
fit<-Arima(timeseries,order=c(0,1,4), xreg=fourier(1:n,4,672)
(傅立叶函数在Hyndman的博客文章中定义) - 傅立叶级数包括初始的P和Q分量吗?
从FPP获得的大部分理论知识都很棒!
在建议使用指数平滑或(动态)线性回归之前,还应进行比较。
数据
https://www.dropbox.com/sh/mzx61sskya5ze6x/Zq3A7Q6htH/trafo.txt
码
data<-read.csv("file", sep=";")
load<-data[,3]
我删除了前几个星期的零值
stepback<-672
load[is.na(load)] <- 0 # Assumed no 0's in first 672 values!
idx <- which(load == 0)
idx <- idx[which(idx>stepback)]
load[idx] <- load[idx-stepback]
ED<-ts(load,start=0, end=c(760,96),frequency=96)
x<-window(ED,start=0, end=c(20,96))
也可以发布可复制的示例,但这会使发布时间更长,但有可能的话。因此,如果有什么我应该提供的,请告诉我。