主要内容

VAR模型案例研究

这个例子展示了如何分析VAR模型。

案例研究概述

本节包含中描述的工作流示例VAR模型工作流程.这个例子使用了三个时间序列:GDP、M1货币供应量和3个月国债利率。示例如下:

  • 加载和转换数据的平稳性

  • 将转换后的数据划分为预采样、估计和预测区间,以支持回测实验金宝app

  • 制作几个模型

  • 将模型与数据进行拟合

  • 决定哪个模型是最好的

  • 根据最佳模型进行预测

加载和转换数据

该文件Data_USEconModel船舶计量经济学工具箱™软件。该文件包含来自圣路易斯联邦储备银行经济数据(FRED)数据库的时间序列。这个例子使用了三个时间序列:

  • 国内生产总值(国内生产总值

  • M1货币供应量(M1SL

  • 三个月国库券利率(TB3MS

加载数据集。为实际GDP创建一个变量。

负载Data_USEconModel数据表。RGDP = DataTable.GDP./ dattable . gdpdef *100;

绘制数据图以寻找趋势。

图subplot(3,1,1) plot(dattable . time, dattable . rgdp,“r”);标题(实际国内生产总值的网格)次要情节(3、1、2);情节(DataTable.Time DataTable.M1SL,“b”);标题(“M1”网格)次要情节(3,1,3);情节(DataTable.Time DataTable.TB3MS,“k”)标题(“3-mo国债”网格)

图包含3个轴。标题为Real GDP的坐标轴1包含一个类型为line的对象。标题为M1的坐标轴2包含一个line类型的对象。标题为3-mo T-bill的轴3包含类型为line的对象。

实际GDP和M1数据似乎呈指数级增长,而国库券收益没有指数级增长。为了抵消实际GDP和M1的趋势,取数据对数的差值。同样,通过取第一个差值来稳定国库券系列。同步日期系列,使数据的每一列具有相同的行数。

rgdpg = price2ret(dattable . rgdp);m1slg = price2ret(dattable . m1sl);dtb3ms = diff(DataTable.TB3MS);Data = array2timeline ([rgdpg m1slg dtb3ms],...“RowTimes”DataTable.Time(2:结束),“VariableNames”, {“RGDP”“M1SL”“TB3MS”});图subplot(3,1,1) plot(Data.Time,Data.RGDP,“r”);标题(实际国内生产总值的网格)次要情节(3、1、2);情节(Data.Time Data.M1SL,“b”);标题(“M1”网格)次要情节(3,1,3);情节(Data.Time Data.TB3MS,“k”)、标题(“3-mo国债”网格)

图包含3个轴。标题为Real GDP的坐标轴1包含一个类型为line的对象。标题为M1的坐标轴2包含一个line类型的对象。标题为3-mo T-bill的轴3包含类型为line的对象。

前两列的比例大约是第三列的100倍。将前两列乘以100,以便时间序列都大致在相同的刻度上。这种缩放可以很容易地在同一个图上绘制所有系列。更重要的是,这种类型的缩放使优化在数值上更稳定(例如,最大化对数可能性)。

数据{:,1:2}= 100*数据{:,1:2};图绘制(Data.Time Data.RGDP,“r”);持有情节(Data.Time Data.M1SL,“b”);datetick (“x”网格)情节(Data.Time Data.TB3MS,“k”);传奇(实际国内生产总值的“M1”“3-mo国债”);持有

图中包含一个轴。坐标轴包含3个line类型的对象。这些对象代表实际GDP, M1, 3个月国库券。

选择并适合模型

您可以为数据选择许多不同的模型。本例使用了四个模型。

  • VAR(2)具有对角自回归

  • VAR(2)完全自回归

  • VAR(4)具有对角自回归

  • VAR(4)具有完全自回归

删除系列开头的所有缺失值。

idx = all(~ismissing(Data),2);数据=数据(idx,:);

创建四个模型。

Numseries = 3;Dnan = diag(nan(numseries,1));Seriesnames = {实际国内生产总值的“M1”“3-mo国债”};VAR2diag = varm(基于“增大化现实”技术的, {dnan dnan},“SeriesNames”, seriesnames);VAR2full = varm(numseries,2);VAR2full。SeriesNames = SeriesNames;VAR4diag = varm(基于“增大化现实”技术的,{dnan dnan dnan dnan},“SeriesNames”, seriesnames);VAR4full = varm(numseries,4);VAR4full。SeriesNames = SeriesNames;

矩阵dnan对角线矩阵是值沿着它的主对角线。通常,缺失值指定了模型中参数的存在,并表明参数需要适合数据。MATLAB®持有非对角线元素,0,在估计时固定。相比之下,规范为VAR2full而且VAR4full矩阵由值。因此,估计拟合自回归矩阵的全矩阵。

为了评估模型的质量,可以创建指数向量,将响应数据分为三个阶段:预采样、估计和预测。将模型与估计数据进行拟合,利用预采样周期提供滞后数据。将拟合模型的预测结果与预测数据进行比较。估计期在样本内,预测期在样本外(也称为val).

对于两个VAR(4)模型,预采样周期为的前四行数据.对VAR(2)模型使用相同的预采样周期,以便所有模型都适合相同的数据。这对于模型拟合比较是必要的。对于这两个模型,预测周期是行的最后10%数据.模型的估计周期从第5行到90%行。定义这些数据周期。

idxPre = 1:4;T = ceil(.9*size(Data,1));idxEst = 5:T;idxF = (T+1):size(Data,1);fh =数字(idxF);

现在已有了模型和时间序列,您可以轻松地将模型与数据拟合。

[EstMdl1,EstSE1,logL1,E1] =估计(VAR2diag,数据{idxEst,:},...“Y0”、数据{idxPre:});[EstMdl2,EstSE2,logL2,E2] =估计(VAR2full,数据{idxEst,:},...“Y0”、数据{idxPre:});[EstMdl3,EstSE3,logL3,E3] =估计(VAR4diag,数据{idxEst,:},...“Y0”、数据{idxPre:});[EstMdl4,EstSE4,logL4,E4] =估计(VAR4full,数据{idxEst,:},...“Y0”、数据{idxPre:});
  • EstMdl模型对象是拟合的模型。

  • EstSE结构包含拟合模型的标准误差。

  • logL值是拟合模型的对数可能性,您可以使用它来帮助选择最佳模型。

  • E向量是残差,其大小与估计数据相同。

检查模型充分性

属性,可以检查估计的模型是否稳定和可逆描述属性。(在这些模型中没有MA项,所以模型必然是可逆的。)结果表明,所有估计模型都是稳定的。

EstMdl1。描述
ans = "AR-Stationary 3-Dimensional VAR(2) Model"
EstMdl2。描述
ans = "AR-Stationary 3-Dimensional VAR(2) Model"
EstMdl3。描述
ans = "AR-Stationary 3-Dimensional VAR(4) Model"
EstMdl4。描述
ans = "AR-Stationary 3-Dimensional VAR(4) Model"

AR-Stationary出现在输出中,表明自回归过程是稳定的。

您可以将受限(对角线)AR模型与不受限(完整)AR模型进行比较lratiotest.测试拒绝或未能拒绝限制模型是充分的假设,默认公差为5%。这是一个样本内测试。

应用似然比检验。必须从返回的摘要结构中提取估计参数的数目总结.然后,将估计参数的数量和对数可能性的差异传递给lratiotest执行测试。

results1 = summary (EstMdl1);np1 = results1.NumEstimatedParameters;results2 = summary (EstMdl2);np2 = results2.NumEstimatedParameters;results3 = summary (EstMdl3);np3 = results3.NumEstimatedParameters;results4 = summary (EstMdl4);np4 = results4.NumEstimatedParameters;reject1 = lratiotest(logL2,logL1,np2 - np1)
reject1 =逻辑1
rejt3 = lratiotest(logL4,logL3,np4 - np3)
reject3 =逻辑1
reject4 = lratiotest(logL4,logL2,np4 - np2)
reject4 =逻辑0

1结果表明,似然比检验拒绝了两种受限模型,而选择了相应的非受限模型。因此,基于这个检验,不受限制的VAR(2)和VAR(4)模型是更可取的。然而,检验并没有拒绝无限制VAR(2)模型,而支持无限制VAR(4)模型。(本检验将VAR(2)模型视为VAR(4)模型,限制自回归矩阵AR(3)和AR(4)为0。)因此,无限制VAR(2)模型似乎是最好的模型。

为了在集合中找到最佳模型,最小化赤池信息准则(AIC)。使用样本内数据计算AIC。计算四种模型的判据。

AIC = aicbic([logL1 logL2 logL3 logL4],[np1 np2 np3 np4])
AIC =1×4103.× 1.4794 1.4396

根据这一准则的最佳模型是无限制VAR(2)模型。还要注意,不受限制的VAR(4)模型比任何一个受限制的模型具有更低的Akaike信息。基于这一标准,无限制VAR(2)模型是最好的,其次是无限制VAR(4)模型。

要将四个模型的预测与预测数据进行比较,请使用预测.这个函数返回一个平均时间序列的预测,以及一个给出均值置信区间的误差协方差矩阵。这是一个样本外计算。

[FY1,FYCov1] = forecast(EstMdl1,fh,Data{idxEst,:});[FY2,FYCov2] = forecast(EstMdl2,fh,Data{idxEst,:});[FY3,FYCov3] = forecast(EstMdl3,fh,Data{idxEst,:});[FY4,FYCov4] = forecast(EstMdl4,fh,Data{idxEst,:});

为最佳拟合模型估计大约95%的预测区间。

extractMSE = @(x)diag(x)';MSE = cellfun(extractMSE,FYCov2,“UniformOutput”、假);SE = sqrt(cell2mat(MSE));YFI = 0 (fh,EstMdl2.NumSeries,2);Yfi (:,:,1) = fy2 - 2* se;Yfi (:,:,2) = fy2 + 2* se;

该图显示了在右边阴影区域的最佳拟合模型的预测。

图;j = 1:EstMdl2。NumSeries次要情节(3 1 j);h1 =情节(Data.Time ((end-49):结束),数据{(end-49):最终,j});持有;h2 = plot(Data.Time(idxF),FY2(:,j));h3 = plot(Data.Time(idxF),YFI(:,j,1),“k——”);情节(Data.Time (idxF) YFI (: j 2),“k——”);标题(EstMdl2.SeriesNames {j});H = gca;填充([Data.Time (idxF (1) h.XLim (2 [2]) Data.Time (idxF (1))),...h.YLim([1 1 2 2]),“k”“FaceAlpha”, 0.1,“EdgeColor”“没有”);图例([h1 h2 h3],“真正的”“预测”“95%预测区间”...“位置”“西北”)举行结束

图包含3个轴。标题为“真实GDP”的坐标轴1包含5个类型为直线、贴片的对象。这些对象表示True、Forecast、95% Forecast区间。标题为M1的坐标轴2包含5个类型为line, patch的对象。这些对象表示True、Forecast、95% Forecast区间。标题为3-mo T-bill的轴3包含5个类型为line, patch的对象。这些对象表示True、Forecast、95% Forecast区间。

现在计算预测和数据之间的平方和误差就很简单了。

Error1 = Data{idxF,:} - FY1;Error2 = Data{idxF,:} - FY2;Error3 = Data{idxF,:} - FY3;Error4 = Data{idxF,:} - FY4;SSerror1 = Error1(:)' * Error1(:);SSerror2 = Error2(:)' * Error2(:);SSerror3 = Error3(:)' * Error3(:);SSerror4 = Error4(:)' * Error4(:);figure bar([SSerror1 SSerror2 SSerror3 SSerror4],.5)误差平方和甘氨胆酸)组(,“XTickLabel”...“AR2诊断接头的“AR2完整”“AR4诊断接头的“AR4完整”})标题(“预测误差平方和”

图中包含一个轴。标题为Sum of Squared Forecast Errors的轴包含一个类型为bar的对象。

四种模型的预测性能相似。

完整的AR(2)模型似乎是最好的和最节俭的拟合。其模型参数如下:

总结(EstMdl2)
ar平稳三维VAR(2)模型有效样本量:176估计参数数:21 LogLikelihood: -698.801 AIC: 1439.6 BIC:1506.18 Value standderror TStatistic PValue __________ _____________ __________ __________ Constant(1) 0.34832 0.11527 3.0217 0.0025132 Constant(2) 0.55838 0.1488 3.7526 0.00017502 Constant(3) -0.45434 0.15245 -2.9803 0.0028761 AR{1}(2,1) -0.029371 0.095485 -0.3076 0.75839 AR{1}(3,1) 0.22324 0.097824 2.2821 0.022484 AR{1}(1,2) -0.074627 0.054476 -1.3699 0.17071 AR{1}(2,2) 0.2531 0.070321 3.5992 0.00031915 AR{1}(3,2) -0.017245 0.072044 -0.239360.81082 AR{1}(1,3) 0.032692 0.056182 0.58189 0.56064 AR{1}(2,3) -0.35827 0.072523 -4.94 7.8112e-07 AR{1}(3,3) -0.29179 0.071243 -3.9272 8.5943e-05 AR{2}(1,1) 0.21378 0.071283 2.9991 0.0027081 AR{2}(2,1) -0.078493 0.0993 2016 -0.85304 0.39364 AR{2}(3,1) 0.24919 0.094271 2.6433 0.0082093 AR{2}(1,2) 0.13137 0.051691 2.5415 0.011038 AR{2}(2,2) 0.38189 0.066726 5.7233 1.045e-08 AR{2}(3,3) -0.22794 0.059203 -3.85 0.00011809 AR{2}(2,3) -0.0052932 0.076423-0.069262 0.94478 AR{2}(3,3) -0.37109 0.078296 -4.7397 2.1408e-06创新相关矩阵:0.5931 0.0611 0.1705 0.0611 0.9882 -0.1217 0.1705 -0.1217 1.0372创新相关矩阵:1.0000 0.0798 0.2174 0.0798 1.0000 -0.1202 0.2174 -0.1202 1.0000

预测的观察

你可以使用拟合模型(EstMdl2)或由:

  • 调用预测经过最后几排YF

  • 模拟多个时间序列模拟

在这两种情况下,转换预测,使它们与原始时间序列直接比较。

从拟合的模型生成10个预测,从最晚的时间开始使用预测

[YPred,YCov] = forecast(EstMdl2,10,Data{idxF,:});

通过撤销应用于原始数据的缩放和差异来转换预测。在使用之前,请确保在时间序列的开头插入最后一个观测值cumsum来消除差异。并且,由于取对数后才有差异,所以在使用之前先插入对数cumsum

YFirst =数据表(idx,{“RGDP”“M1SL”“TB3MS”});EndPt = YFirst{end,:};EndPt(:,1:2) = log(EndPt(:,1:2));YPred(:,1:2) = YPred(:,1:2)/100;%缩放百分比YPred = [EndPt;YPred];做好准备YPred(:,1:3) = cumsum(YPred(:,1:3));YPred(:,1:2) = exp(YPred(:,1:2));fdates = dateshift(YFirst.Time(end),“结束”“季”, 0:10);插入预测水平数字j = 1:EstMdl2。NumSeries subplot(3,1,j) plot(fdates,YPred(:,j),“——b”)举行情节(YFirst。时间,YFirst {: j},“k”网格)title(EstMdl2.SeriesNames{j}) h = gca;fill([fdates(1) h. xlim ([2 2]) fdates(1)],h. xlim ([2 2])YLim([1 1 2 2]),“k”...“FaceAlpha”, 0.1,“EdgeColor”“没有”);持有结束

图包含3个轴。标题为Real GDP的坐标轴1包含类型为直线、补丁的3个对象。标题为M1的坐标轴2包含3个类型为line, patch的对象。标题为3-mo T-bill的轴3包含类型为line, patch的3个对象。

图中浅灰色预测水平线上的蓝色虚线表示外推,原始数据序列用纯黑色表示。

看看这幅图中过去几年的情况,就能了解这些预测是如何与最新数据点联系起来的。

YLast = YFirst(170:end,:);数字j = 1:EstMdl2。NumSeries subplot(3,1,j) plot(fdates,YPred(:,j),“b——”)举行情节(YLast。时间,YLast {: j},“k”网格)title(EstMdl2.SeriesNames{j}) h = gca;fill([fdates(1) h. xlim ([2 2]) fdates(1)],h. xlim ([2 2])YLim([1 1 2 2]),“k”...“FaceAlpha”, 0.1,“EdgeColor”“没有”);持有结束

图包含3个轴。标题为Real GDP的坐标轴1包含类型为直线、补丁的3个对象。标题为M1的坐标轴2包含3个类型为line, patch的对象。标题为3-mo T-bill的轴3包含类型为line, patch的3个对象。

预测显示实际GDP和M1增长,利率略有下降。然而,预测没有误差条。

或者,您可以从拟合的模型生成10个预测,从最晚的时间开始使用模拟.该方法模拟2000次时间序列,然后生成每个周期的均值和标准差。每个时期的偏差的平均值是该时期的预测。

从拟合的模型中模拟一个从最近时间开始的时间序列。

rng (1);%用于再现性YSim =模拟(EstMdl2,10,“Y0”、数据{idxF:}“NumPaths”, 2000);

通过撤销应用于原始数据的缩放和差异来转换预测。在使用之前,请确保在时间序列的开头插入最后一个观测值cumsum来消除差异。并且,由于取对数后才有差异,所以在使用之前先插入对数cumsum

EndPt = YFirst{end,:};EndPt(1:2) = log(EndPt(1:2));YSim(:,1:2,:) = YSim(:,1:2,:)/100;YSim = [repmat(EndPt,[1,1,2000]);YSim];YSim(:,1:3,:) = cumsum(YSim(:,1:3,:));YSim(:,1:2,:) = exp(YSim(:,1:2,:));

计算每个系列的平均值和标准偏差,并绘制结果。图中黑色表示均值,红色表示+/- 1标准差。

YMean = mean(YSim,3);YSTD = std(YSim,0,3);数字j = 1:EstMdl2。NumSeries subplot(3,1,j) plot(fdates,YMean(:,j),“k”网格)持有情节(YLast.Time (end-10:结束),YLast {end-10:结束,j},“k”,YMean(:,j) + YSTD(:,j),“——r”) plot(fdates,YMean(:,j) - YSTD(:,j),“——r”) title(EstMdl2.SeriesNames{j}) h = gca;fill([fdates(1) h. xlim ([2 2]) fdates(1)],h. xlim ([2 2])YLim([1 1 2 2]),“k”...“FaceAlpha”, 0.1,“EdgeColor”“没有”);持有结束

图包含3个轴。标题为“真实GDP”的坐标轴1包含5个类型为直线、贴片的对象。标题为M1的坐标轴2包含5个类型为line, patch的对象。标题为3-mo T-bill的轴3包含5个类型为line, patch的对象。

这些图表显示了GDP的增长,M1的适度增长,以及国库券利率走向的不确定性。

另请参阅

对象

功能

相关的话题