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


26

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

我正在分析多个时间序列,这些时间序列都在相同的时间间隔内,并且都在相同的频率下,都描述了相似的数据类型。每个系列只是一个变量,我没有其他对应的预测变量。

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

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

Answers:


8

您可以进行网格搜索:从ARIMA(1,0,0)开始,尝试所有可能到ARIMA(5,2,5)的东西。将模型拟合到每个序列,并估计独立于比例的误差度量,例如MAPE或MASE(MASE可能会更好)。在所有模型中选择平均MASE最低的ARIMA模型。

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

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


2
谢谢-我会尝试的。我同意这似乎不是最好的主意。我得到的论据是,每个系列都没有足够的观测值(〜28个)来进行良好的估算,并且对所有系列进行估算会更可靠。我不确定我是否同意这种说法。
sparc_spread 2012年

21

一种方法是用所有数据构建一个长时间序列,并用序列之间的缺失值序列将它们分开。例如,在R,如果有三个系列(xyz),每个长度100和频率12的,则可以将它们如下

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)

5
+1,整洁的把戏。从OP对另一个答案的评论来看,我将建议某种面板数据模型,但这要好得多。
mpiktas,2012年

这是巨大的帮助,非常感谢。您能否再解释一遍: 选择缺失值的数量以确保保留季节性?抱歉,我没有完全关注-谢谢。
sparc_spread 2012年

1
如果数据中存在季节性(与月度观测相同),则您希望长序列的一月与二月的间隔仍然是12的倍数,依此类推。然后,在选择模型时,可以对季节性进行适当建模。
罗伯·海恩德曼

3
要添加此技巧-您可以添加指示类别成员资格的外部回归变量(xreg)。这将说明不同系列的不同均值,同时仍保持其他系数相同。
Jameson Quinn 2014年

6

估计多个时间序列的单个模型是面板数据计量经济学的领域。但是,在您没有解释变量的情况下,@ Rob Hyndman答案可能是最合适的。但是,如果事实证明时间序列的平均值不同(请进行测试,因为在这种情况下@Rob Hyndman的方法应该会失败!),但ARMA结构相同,那么您将不得不使用Arellano-Bond(对不起,维基百科拥有没有网页,请在Google上搜索)类型估算器。在这种情况下,模型将是:

ÿ一世Ť=α一世+ρ1个ÿ一世Ť-1个++ρpÿ一世Ť-p+ε一世Ť

一世ε一世Ť一世


1
非常感谢您的解决方案以及其他解决方案。您提到了: 但是,如果事实证明时间序列的平均值不同(请进行测试,因为在这种情况下@Rob Hyndman的方法应该会失败!) 您可以解释为什么这吗?谢谢。
sparc_spread 2012年

2
@sparc_spread,假设它只是两个系列。一个以0为中心,方差为1,另一个以1000为中心,方差1。然后,如果两个序列都使用相同的系数进行拟合,则意味着我们要约束alpha_1 = alpha_2,因此两个序列的预测都将在500,可怕地关闭。基本上,将所有系列都视为属于同一模型可能需要在对联合模型进行拟合之前进行一些重新定型/归一化。
zkurtz

4

制作单个数据序列是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

在此处输入图片说明


仅当所有信号本质上都相似(例如周期性)都同相时,这才起作用-在您的示例中,如果两个正弦波的相位相差180度,它们将完全抵消!
tdc 2012年

3
是的,只有在每个日期系列都应该表示相同的数据并且(您很高兴地假设)它们彼此不同的情况下,才对它们取平均值是合适的。
达伦·库克

1

我将研究隐马尔可夫模型和动态贝叶斯网络。他们对时间序列数据建模。同样,他们使用多个时间序列实例进行训练,例如来自各个人的多个血压时间序列。您应该在Python和R中找到软件包来构建它们。您可能必须为这些模型定义结构。


0

我正在尝试做同样的事情。显然,那里有一个叫做“多元自回归”模型的东西。我找到了对它的引用,但没有找到如何使用它。根据链接的文件,我认为它已在R中​​实现。

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf


标准方法是向量自回归,并且有一个名为var的R包。
西安

向量自回归与面板数据的自回归不同吗?还是不同领域,不同名称的问题?建议使用plm软件包获取面板数据。cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.