这个例子展示了如何分析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国债”网格)在
实际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国债”网格)在
前两列的比例大约是第三列的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国债”);持有从
您可以为数据选择许多不同的模型。本例使用了四个模型。
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%预测区间”,...“位置”,“西北”)举行从;结束
现在计算预测和数据之间的平方和误差就很简单了。
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完整”})标题(“预测误差平方和”)
四种模型的预测性能相似。
完整的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”,“没有”);持有从结束
图中浅灰色预测水平线上的蓝色虚线表示外推,原始数据序列用纯黑色表示。
看看这幅图中过去几年的情况,就能了解这些预测是如何与最新数据点联系起来的。
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”,“没有”);持有从结束
预测显示实际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”,“没有”);持有从结束
这些图表显示了GDP的增长,M1的适度增长,以及国库券利率走向的不确定性。