主要内容

选择使用回溯测试的状态空间模型规范

这个例子展示了如何使用滚动窗口选择具有最佳预测性能的状态空间模型规范。对于显式定义的状态空间模型的滚动窗口分析非常简单,因此本示例主要关注隐式定义的状态空间模型。

假设观察到的失业率变化与名义国民生产总值(nGNP)增长率之间的线性关系是有效的。进一步假设你想在AR(1)或AR(2)模型中选择失业率的第一个差值(即状态)。也就是说,

数组$ $ \开始{}{* {20}{l}} & # xA; {{\ rm{模型1:}}\开始{数组}{* {20}{c}} & # xA; {{x_t} ={\φ_{11}}{间{t - 1}} +{\φ_{12}}{间{t - 1}} + {\ varepsilon _t}} \ \ & # xA; {{y_t} -{\β_1}{z_t} = {x_t} + {u_t}} & # xA;结束\{数组}}\ \ & # xA; {{\ rm{模型2:}}\开始数组{}{* {20}{c}} & # xA; {{x_t} ={\φ_{21}}{间{t - 1}} + {\ varepsilon _t}} \ \ & # xA; {{y_t} -{\β_2} {z_t} = {x_t} + {u_t}} & # xA;结束\{数组}}& # xA; \{数组}结束。$ $

  • \ varepsilon_t美元u_t美元为均值为0,方差为1的高斯过程。

  • x_t美元真实的失业率是多少元新台币

  • y_t美元是观察到的失业率。

  • z_t美元为国民生产总值比率。

声明函数rwParamMap.mrwAR2ParamMap.m,它指定参数如何参数个数映射到状态空间模型矩阵、初始状态值和状态类型。将它们保存在工作文件夹中。

函数[A, B, C, D, Mean0 Cov0, StateType, deflateY] = rwParamMap (params, y, Z)%rwParamMap用于滚动窗口的参数-矩阵映射函数示例%使用导弹rwParamMap指定的状态空间模型包含一个平稳的% AR(1)状态,观测模型包括回归分量,和创新和扰动的方差为1。y的响应%被预测器指定的回归分量压缩%变量x。一个= params (1);B = 1;C = 1;D = 1;Mean0 = [];Cov0 = [];StateType = 0;deflateY = y - params(2)*Z;结束
函数[A, B, C, D, Mean0 Cov0, StateType, deflateY] = rwAR2ParamMap (params, y, Z)%rwParamMap用于滚动窗口的参数-矩阵映射函数示例%使用ssm并指定一个ARMA状态模型rwParamMap指定的状态空间模型包含一个平稳的% AR(2)状态,观测模型包括回归分量,和创新和扰动的方差为1。y的响应%被预测器指定的回归分量压缩%变量x。A = [params(1) params(2);1 0];B = [1;0);C = [1 0];D = 1;Mean0 = [];Cov0 = [];stattype = [0 0];deflateY = y - params(3)*Z;结束

加载Nelson-Plosser数据集,其中包含失业率和nGNP系列。

负载Data_NelsonPlosser

通过对nGNP系列取自然对数,以及每个系列的第一个差值,对数据进行预处理。此外,删除开始每个系列的值。

isNaN =任何(ismissing(数据表),2);%包含nan的标记句点gnpn = DataTable.GNPN (~ isNaN);你= DataTable.UR (~ isNaN);%样本大小Z = diff(日志(gnpn));y = diff (ur);T =大小(y, 1);

如果您隐式地定义状态空间模型以及响应和预测器数据(例如,yZ)存在于MATLAB®Workspace中,然后该软件创建一个从参数到矩阵的映射函数的串联。如果数据在MATLAB®Workspace中不存在,则软件创建模型,但您必须使用适当的名称-值对参数提供数据,例如,估计模型。

因此,当状态空间模型隐式定义且存在回归组件时,要进行滚动窗口分析,必须指定状态空间模型,指示每个窗口要分析的数据的指数。对模拟数据进行摇窗分析。设摇窗长度()为40个时段,而预测期(h) 10课时。对于本例,假设时间序列是稳定的(即,所有参数都是时不变的)。

m = 40;N = T - m + 1;%滚动窗数h = 10;fError1 =南(N、h);%预先配置fError2 =南(N、h);j = 1: N;idxRW = j:(m + j - h - 1);idxFH = (m + j - h):(m + j - 1);Mdl1 =舰导弹(@ (c) rwParamMap (c, y (idxRW)、Z (idxRW)));Mdl2 =舰导弹(@ (c) rwAR2ParamMap (c, y (idxRW)、Z (idxRW)));[EstMdl1,estParams1] = estimate(Mdl1,y(idxRW),[0.5 -20]',...“显示”“关闭”);[EstMdl2,estParams2] = estimate(Mdl2,y(idxRW),[0.5 0.1 -20]',...“显示”“关闭”);fY1 =预测(EstMdl1 h, y (idxRW),“Predictors0”, Z (idxRW),...“PredictorsF”, Z (idxFH),“β”estParams1(结束));fY2 =预测(EstMdl2 h, y (idxRW),“Predictors0”, Z (idxRW),...“PredictorsF”, Z (idxFH),“β”estParams2(结束));if (j,:) = y(idxFH) - fY1; if (j,:) = y(idxFH) - fY1;feor2 (j,:) = y(idxFH) - fY2;结束

计算每个超前预报的RMSE,并对每个模型进行比较。

fRMSE1 =√意味着(fError1 ^ 2));fRMSE2 =√意味着(fError2 ^ 2));fRMSE1 < fRMSE2
Ans = 1x10逻辑阵列1 1 10 0 0 0 0

总体而言,AR(2)模型的预测性能优于AR(1)模型。

或者,您可以使用Diebold-Mariano测试比较模型的预测性能。有关详细信息,请参见[1]

另请参阅

||

相关的话题