在构建预测模型时,一些数据的发布频率可能不一致,例如GDP是每季度发布一次,而工业增加值是每月才发布一次,对于此种情况,可将月度数据进行加总,转换成季度数据后再使用传统的时序模型进行预测建模。此种方法较为简单直接,但其也有不足,即无法充分准确的挖掘高频数据丰富信息。为解决此问题,众多学者提出了不同的混频数据处理模型,常见的有Mixed Frequency Data Sampling Regression Models(MIDAS)模型、Dynamic Factor Model(DFM)模型。这里我们着重探讨一下MIDAS模型的使用。

MIDAS模型形式

MIDAS模型最早由Ghysels提出,其灵感源于分布滞后模型。MIDAS模型最初主要应用于金融领域,当前在宏观经济预测中得到广泛应用,一般形式的 MIDAS模型[1]如下所示

e22b18d2ed1d45d68337bc8b1885bbe5.png

其中8fa51a738b9f47e094cd4fbbce5e0cf1.png

第一部分为低频滞后项,以季度GDP预测为例,往期GDP包含丰富信息,因而被包含到模型当中,第二部分为高频项,5c935a8a28174bfa86c980a399c9e49e.png为高频变量个数,8bed424b95264452a7e547c1525dccd1.png代表低频变量与高频变量的对应数目,例如要预测季度变量,而自变量为月度变量,一个季度变量由3个月度变量转换而来,那么对应的1ca220ce8b93486ca06d94578965b3b0.png就是3。

与直接加总不同,MIDAS模型在进行月度到季度的转换时,给每个高频项赋予了一个权重7b986aafa4304b649a1245471f398d22.png,由b922fbf6f8884cba8a6960007cc4fce9.png确定。各高频项系数之间满足一定的限制关系时, MIDAS被称为restricted MIDAS regression;反之,则被称为unrestricted MIDAS regression,后者可直接使用ols进行估计。对MIDAS高频项系数施加约束时,6238c1c3e8f44bcea156f33bad62812a.png函数形式有两种:Beta分布多项式、指数 Almon多项式函数。

基于MIDAS模型的实证分析

我们使用MIDAS包自带的数据集来进行实证模型构建,此数据集包含美国月度失业率美国及美国年度GDP,可构建使用美国月度失业率预测年度GDP的模型。

data("USrealgdp")
data("USunempr")
y.ar <- diff(log(USrealgdp))
xx <- window(diff(USunempr), start = 1949)
trend <- 1:length(y.ar)
##Fit AR(1) model
mr_ar <- midas_r(y.ar ~ trend + mls(y.ar, 1, 1) +

                 fmls(xx, 11, 12, nealmon),

                 start = list(xx = rep(0, 3)))

mr_ar

此例子构建了一个Restricted-MIDAS-AR(1)模型,这里面我们需要着重看一下midas_r函数的使用。

midas_r函数第一个参数让传入一个公式对象,指定 MIDAS模型的因变量及自变量。MIDAS模型在进行估计时,需要使用优化算法迭代求解,这就要指定一个起始迭代点,第二个start参数即是指定该起始迭代点。

mls和fmls参数解读

注意到,公式对象使用到了mls和fmls这两个函数,这两个函数参数完全一样,第一个参数指定数据,第二个参数指定滞后阶数,第三个参数指定高低频变量之间的转换数,我们可以参照下图理解这三个参数

908cf12de1b944868fa19085cc8dcc52.jpeg

把失业率纳入模型当中需要调用3次mls函数,mls(x, 0, 3)、mls(x, 1, 3)及mls(x, 2, 3),可使用fmls函数一次完成fmls(x, 2, 3)

结果解读

上述代码的输出结果为

7346a4c110cf4c77ab51b6ceb9f7097e.png

MIDAS模型当中我们使用了nealmon约束函数,这里面xx对应的3个值分别就对应nealmon的参数,nealmon函数数学表达式为

1bd362e4089e4241937da2b98f7441b2.png

第一个参数xx1即对应9583e19377ca4e95b7501a9ecef3ef62.png,第二个xx2对应一次项的a5ce64a00579460ea08f31c9cf63e7b9.png,第三个xx3对应一次项的7bd8c43582d144f083dc13ecfe1c8545.png

如果想把约束函数的多项式最高次数改成5次,只需在start参数更改为start = list(xx = rep(0, 6))即可。

0e91a8bf602646d2aa28a227407ebbcc.png

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐