如何确保 PROC ARIMA 对输入变量执行正确的参数化?

机器算法验证 时间序列 sas 动态回归
2022-04-07 14:49:30

我正在尝试使用具有两个外生(输入)变量的 ARIMAX 进行预测。我正在使用 PROC ARIMA,但我无法从 SAS 文档中确定我的代码是否正在生成我想要的参数化。

我想扩展一个 ARI(12,1) 模型,以便它还包括我的预测中两个外生变量中每一个的最后 12 项。因此,使用VariableX两个外生变量VariableYVariableZ,我对代码的最佳尝试是:

proc arima;
  identify var=VariableY(1) nlag=24;
  estimate p=12;
  identify var=VariableZ(1) nlag=24;
  estimate p=12;
  identify var=VariableX(1) nlag=24 crosscorr=( VariableY(1) VariableZ(1) );
  estimate p=12 input=( VariableY VariableZ );
  forecast id=MonthNumber interval=month alpha=.05 lead=24;
  run;
quit;

该文档使我相信程序的前四行是最后设置预测所必需的。但是当我运行该程序时,输出似乎显示了仅使用两个外生变量中每一个的最后一项的预测。

总而言之,我想确定以下各项的控制位置:

  • 对于每个外生变量也是如此pAR(p)
  • 对于每个外生变量也是如此dI(d)
  • 对于每个外生变量也是如此qMA(q)
2个回答

指定输入变量的 ARIMA 模型

ARIMA 程序使用第一对identifyandestimate语句(即,输入变量的identifyandestimate语句)的结果来创建模型来预测输入变量(也称为外生变量)的值在观察到每个输入变量的最后一个时间点之后。换句话说,这些语句指定了在尚未观察到的时期需要输入变量的值时使用的模型。

因此,模型VariableY被指定为

identify var=VariableY(PeriodsOfDifferencing);
estimate p=OrderOfAutoregression q=OrderOfMovingAverage;

其中VariableY被建模为,其中 = = 差分阶数(由 确定), = ARIMA(p,d,q)pOrderOfAutoregressiondPeriodsOfDifferencingqOrderOfMovingAverage

在 ARIMAX 模型中指定主序列和输入序列的差异

应用于输入变量的差分顺序在crosscorr选项中指定;VariableX对于输入VariableY的建模VariableZ,SAS 代码为:

identify var=VariableX(DifferencingX) crosscorr=( VariableY(DifferencingY) VariableZ(DifferencingZ) );

其中DifferencingXDifferencingY和分别是DifferencingZ的差分周期VariableXVariableYVariableZ

在 ARIMAX 模型中指定主序列和输入序列的自回归阶和移动平均阶

模型中包含的输入变量滞后数在传递函数中指定(在input选项中)。estimate行的开头设置了主要系列(即最终寻求模型或预测的系列)的自回归和移动平均线的顺序:

estimate p=AutoregressionX q=MovingAverageX

其中VariableX被建模为,其中 = = ARIMAX(p,d,q,b)pAutoregressionXqMovingAverageX

input同一语句中的选项estimate设置 ARIMAX 模型的自回归和移动平均的顺序。输入序列的传递函数的分子因子类似于噪声序列的 ARMA 模型的 MA 部分。输入序列的传递函数的分母因子类似于噪声序列的 ARMA 模型的 AR 部分。(下面的所有示例都将示例简化为单个输入系列VariableY,而不是同时显示VariableYVariableZ。)

当指定没有任何分子或分母项时,输入变量被视为纯回归项(即,输入变量在当前期间的值被使用没有任何滞后,无论它是由输入变量的 ARIMA 模型预测还是已经在输入序列中作为观察值出现):estimate... input=( VariableY );

分子项在输入变量之前的括号中表示。estimate...在input=( (1 2 3) VariableY );上产生回归VariableYLAG(VariableY)LAG2(VariableY)LAG3(VariableY)

分母项在斜线之后和输入变量之前的括号中表示。estimate...input=( \ (1) VariableY );估计VariableY作为具有指数下降权重的无限分布滞后模型的影响。

初始移位在美元符号之前表示;estimate... -lags -lags表示形式的值将被添加到所有分子和分母项的指数中。要在输入变量中使用类似 AR 的移位而不包括未移位(即未滞后或纯回归)项,请使用此运算符而不是括号中的分子项。例如,要在输入序列中设置 6、12 和 18 个月的班次,而没有未班次的项,语句将是... (这导致班次为 6、6 + 6 (即 12),并且6 + 12input=( k $ ( ω) / ( δ) VariableY );Bk(ω(B)δ(B))VariableYtkBVariableYestimateinput=( 6 $ (6 12) VariableY );(即,18))。

概括

第一对identifyestimate语句用于为输入变量准备任何必要的预测值。

最后一对identifyestimate语句运行实际的 ARIMAX 模型,并在必要时使用输入变量的预测值(从第一对identifyestimate语句生成)。

主变量和输入变量之间的关系在语句的选项和语句的crosscorr选项中指定主变量和输入变量之间的关系可以定义为普通回归关系;或者它可以用差分、AR 术语和/或 MA 术语来定义。identifyinputestimate

归因

虽然这个答案是我自己的,但我能够根据官方 SAS 文档(“ ARIMA 过程:有理传递函数和分布式滞后模型”、“ ARIMA 过程:指定输入和传递函数”、“ ARIMA 过程:输入变量和带有 ARMA 错误的回归”和“ ARIMA 过程:差异”),以及从这个答案和来自IrishStat的评论中找到的方向

我已经查看了输出,并且预测反映了误差项中的 AR(12),它使用两个预测器系列的最后 12 个值转换为 12 个周期加权预测,因为 AR 多项式在所有系列中充当乘数(X,Y ,Z)。在没有详细介绍的情况下,我认为您的模型规范或缺乏规范是“发现不足的”。不幸的是,SAS 过程假定使原始序列平稳所需的差分算子与传递函数中的差分算子相同。此外,传递函数中的 ARIMA 组件与相关序列的单变量分析的 ARIMA 组件相同。这种结构应该从不具有 ARIMA 结构的适当形成的传递函数的残差中识别出来。最后,您在传递函数中对 ARIMA 组件的规范(默认情况下)是一个“共同因素”。您需要做的是确定所有三个系列的差分形式(如果有)以及两个输入中每个输入的响应性质(PDL/ADL/LAG STRUCTURE)。在估计了这样一个暂定模型后,通过干预检测方案验证暂定模型错误集中没有电平转换/本地时间趋势/季节性或 1 次脉冲。此外,必须确保模型误差具有恒定的方差,并且模型的参数没有'

总之,你得到了你想要的,但你可能不想要你得到的!你可以考虑发布三个系列的原始数据,并让列表成员(包括我自己)帮助你构建一个最低限度的足够模型。

编辑:我在网上找到了一些可能对你有帮助的材料。

例如,假设非零滞后是 2 和 4。过程 y 可以使用 x 作为输入估计如下。

估计输入=( 2$(2) x )

输入的形式为 cB* 2+ dB *4 = B* 2( c + dB *2)。正是后一种形式给出了输入语句的形式