使用高频数据进行时间序列建模

机器算法验证 r 时间序列 季节性 大数据 不均匀间隔时间序列
2022-04-09 14:47:45

在处理具有大量观察值的季节性时间序列数据时,我正在寻找一些预测建议。我所说的“大”只是指几千个——我已经习惯了在数据挖掘中被认为很小的大小,但在时间序列建模中,对于我尝试过的许多工具来说,这似乎相当笨拙。

例如,这是一个玩具数据集,每分钟记录一次观察,持续五天:

set.seed(123)
t <- 1:(5*24*60)
x <- ts(15 + 0.001*t + 10*sin(2*pi*t/(length(t)/5)) + rnorm(length(t)), freq=length(t)/5)
plot(x, type='l')

时间序列图

(在我的实际操作数据集中,以不规则的时间间隔观察这些值,但我已经通过先做类似的事情来规范它们x <- approx(d$t, d$x, xout=1:(5*24*60))。也欢迎就这是否可取或替代方法提出建议。)

因此,该数据集中的季节性滞后 1,440 个观测值,这似乎超出了auto.arima()(在forecast包中)之类的东西会发现的范围:

m1 <- auto.arima(x)
plot(forecast(m1))

预测图

而且我不太确定如何解释ets()这里的函数,但它似乎无法处理这个尺寸数据,而且它似乎没有适应季节性:

> m2 <- ets(x, 'MAZ')
> plot(forecast(m2))
Error in forecast.ets(m2) : Forecast horizon out of bounds
> m2$method
[1] "ETS(M,A,N)"

然后去哪儿?有什么建议么?

1个回答

ARIMA 和 ETS 模型是为相对较短的季节性(例如,每月或每季度)设计的,不适用于较长的季节性周期。ets()错误应该被捕获——我将在下一个版本的预测包中修复它

您可以尝试使用傅立叶级数模型:

library(forecast)
X <- fourier(x, 3)
m3 <- tslm(x ~ X + trend)
plot(forecast(m3,newdata=data.frame(X=I(fourierf(x,3,2880))),h=2880))

有关更多讨论,请参阅我关于长季节预测的博客文章。