在多个时间序列上估计相同的模型

机器算法验证 时间序列
2022-02-10 17:32:56

我有时间序列的新手背景(一些 ARIMA 估计/预测),并且面临一个我不完全理解的问题。任何帮助将不胜感激。

我正在分析多个时间序列,它们都在相同的时间间隔和相同的频率上,都描述了相似类型的数据。每个系列只是一个变量,我没有看到其他相应的预测变量。

我被要求估计一个描述所有系列的单一模型 - 例如,想象我可以找到一个具有相同阶数、系数等的 ARIMA (p,d,q) 可以适合所有系列。我的主管不希望我单独估计每个系列,也不希望我做某种具有系列之间依赖关系的 VAR 模型。

我的问题是:我什至会称这样的模型是什么,我该如何估计/预测它?如果您更容易使用代码示例,我会说 SAS 和 R。

4个回答

一种方法是用所有数据构建一个长时间序列,并在序列之间使用缺失值序列来分隔它们。例如,在 R 中,如果您有三个系列(和) x每个系列的长度为 100,频率为 12,您可以按如下方式加入它们yz

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

请注意,选择缺失值的数量是为了确保保留季节性周期。我用 8 个缺失值填充了最后一年,然后在下一个系列之前添加了 4 个缺失年份(48 个值)。这应该足以确保序列之间的任何序列相关性消失。

然后你可以用它auto.arima()来找到最好的模型:

library(forecast)
fit <- auto.arima(combined)

最后,您可以将组合模型分别应用于每个系列以获得预测:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

你可以做一个网格搜索:从 ARIMA(1,0,0) 开始,尝试所有的可能性,直到 ARIMA(5,2,5) 或其他东西。将模型拟合到每个系列,并估计与 MAPE 或 MASE 等尺度无关的误差测量(MASE 可能会更好)。选择所有模型中平均 MASE 最低的 ARIMA 模型。

您可以通过交叉验证每个系列的误差测量以及将您的结果与幼稚预测进行比较来改进此过程

询问您为什么要寻找一个模型来描述所有系列可能是个好主意。除非它们是由相同的过程生成的,否则这似乎不是一个好主意。

估计多个时间序列的单个模型是面板数据计量经济学的领域。但是,在您没有解释变量的情况下,@Rob Hyndman 的答案可能是最合适的。但是,如果事实证明时间序列的方法不同(测试它,因为在这种情况下@Rob Hyndman 的方法应该失败!),但 ARMA 结构是相同的,那么您将不得不使用Arellano-Bond 类型估计器在这种情况下,模型将是:

yit=αi+ρ1yi,t1+...+ρpyi,tp+εit

其中表示不同的时间序列,并且可以在所有中具有相同的协方差结构。iεiti

Rob Hyndman 的另一种方法是制作单个数据系列,即合并数据。如果您的多个时间序列代表来自一组记录相同事件的机器的嘈杂读数,这可能是合适的。(如果每个时间序列的规模不同,则需要先对数据进行标准化。)

注意:您仍然只能得到 28 个读数,只是噪音较小,因此这可能不适合您的情况。

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

在此处输入图像描述