Симулируйте ответы предполагаемой модели VARX

Этот пример показывает, как оценить многомерную модель временных рядов, которая содержит отстающие эндогенные и экзогенные переменные, и как симулировать ответы. Серия ответов является ежеквартальной:

  • Изменения темпов реального валового внутреннего продукта (рВВП) (y1t)

  • Ставки реальной денежной массы (rM1SL) (y2t)

  • Краткосрочные процентные ставки (т.е. трехмесячный казначейский счет выражения, y3t)

с марта 1959 года по март 2009 года. Экзогенный ряд - это ежеквартальные изменения уровня безработицы (xt).

Предположим, что моделью для откликов является эта модель VARX (4,3)

[y1ty2ty3t]=[a1a2a3]+[xt000xt000xt][b1b2b3]+[ϕ11(1)ϕ12(1)ϕ13(1)ϕ21(1)ϕ22(1)ϕ23(1)ϕ31(1)ϕ32(1)ϕ33(1)][y1,t-1y2,t-1y3,t-1]+...+[ϕ11(4)ϕ12(4)ϕ13(4)ϕ21(4)ϕ22(4)ϕ23(4)ϕ31(4)ϕ32(4)ϕ33(4)][y1,t-1y2,t-1y3,t-1]+[ε1tε2tε3t]

Предварительная обработка данных

Загрузите набор макроэкономических данных США. Отметьте ряд и их периоды, которые содержат отсутствующие значения (обозначенные NaN значения).

load Data_USEconModel
varNaN = any(ismissing(DataTable),1); % Variables containing NaN values
seriesWithNaNs = series(varNaN)
seriesWithNaNs = 1x5 cell
  Columns 1 through 3

    {'(FEDFUNDS) Eff...'}    {'(GS10) Ten-yea...'}    {'(M1SL) M1 mone...'}

  Columns 4 through 5

    {'(M2SL) M2 mone...'}    {'(UNRATE) Unemp...'}

В этом наборе данных переменные, которые содержат отсутствующие значения, вводятся в выборку позже, чем другие переменные. Отсутствующие значения после начала выборки для конкретной переменной отсутствуют.

Отметьте все периоды, соответствующие отсутствующим значениям в переменных модели.

idx = all(~ismissing(DataTable(:,{'UNRATE' 'M1SL'})),2);

В остальном примере рассмотрите только те значения ряда, которые обозначены true в idx.

Расчет rGDP и rM1SL, и темпов роста rGDP, rM1SL, краткосрочных процентных ставок и уровня безработицы. Description содержит описание данных и имен переменных. Зарезервируйте последние три года данных, чтобы исследовать выходную эффективность предполагаемой модели.

rGDP = DataTable.GDP(idx)./(DataTable.GDPDEF(idx)/100);
rM1SL = DataTable.M1SL(idx)./(DataTable.GDPDEF(idx)/100);

dLRGDP = diff(log(rGDP));              % rGDP growth rate
dLRM1SL = diff(log(rM1SL));            % rM1SL growth rate
d3MTB = diff(DataTable.TB3MS(idx));    % Change in short-term interest rate (3MTB)
dUNRATE = diff(DataTable.UNRATE(idx)); % Change in unemployment rate

T = numel(d3MTB);    % Total sample size
oosT = 12;           % Out-of-sample size
estT = T - oosT;     % Estimation sample size
estIdx = 1:estT;     % Estimation sample indices
oosIdx = (T - 11):T; % Out-of-sample indices
dates = dates((end - T + 1):end);

EstY = [dLRGDP(estIdx) dLRM1SL(estIdx) d3MTB(estIdx)]; % In-sample responses
estX = dUNRATE(estIdx);                                % In-sample exogenous data
n = size(EstY,2);

OOSY = [dLRGDP(oosIdx) dLRM1SL(oosIdx) d3MTB(oosIdx)]; % Out-of-sample responses
oosX = dUNRATE(oosIdx);                                % Out-of-sample exogenous data

Создайте модель VARX

Создайте модель VARX (4) с помощью varm.

Mdl = varm(n,4);

Mdl является varm объект модели служит шаблоном для оценки. В настоящее время, Mdl известно, что существует структура для регрессионного компонента. Однако MATLAB ® создает необходимую структуру во время оценки.

Оцените модель VAR (4)

Оцените параметры модели VARX (4) с помощью estimate. Отобразите оценки параметров.

EstMdl = estimate(Mdl,EstY,'X',estX);
summarize(EstMdl)
 
   AR-Stationary 3-Dimensional VARX(4) Model with 1 Predictor
 
    Effective Sample Size: 184
    Number of Estimated Parameters: 42
    LogLikelihood: 1037.52
    AIC: -1991.04
    BIC: -1856.01
 
                      Value       StandardError    TStatistic      PValue  
                   ___________    _____________    __________    __________

    Constant(1)      0.0080266     0.00097087         8.2674     1.3688e-16
    Constant(2)     0.00063838      0.0015942        0.40044        0.68883
    Constant(3)       0.068361          0.143        0.47803        0.63263
    AR{1}(1,1)       -0.034045        0.06633       -0.51327        0.60776
    AR{1}(2,1)      -0.0024555        0.10891      -0.022546        0.98201
    AR{1}(3,1)         -1.7163           9.77       -0.17567        0.86056
    AR{1}(1,2)       -0.013882       0.046481       -0.29867        0.76519
    AR{1}(2,2)         0.17753       0.076323          2.326       0.020017
    AR{1}(3,2)         -6.7572         6.8464       -0.98697        0.32366
    AR{1}(1,3)       0.0010682     0.00048092         2.2212       0.026337
    AR{1}(2,3)      -0.0050252     0.00078967        -6.3636     1.9705e-10
    AR{1}(3,3)        -0.16256       0.070837        -2.2948       0.021744
    AR{2}(1,1)        0.077748       0.064014         1.2145        0.22454
    AR{2}(2,1)       0.0047257        0.10511       0.044959        0.96414
    AR{2}(3,1)          3.4244         9.4289        0.36318        0.71647
    AR{2}(1,2)        0.077867       0.046954         1.6584       0.097245
    AR{2}(2,2)         0.29087       0.077099         3.7727     0.00016148
    AR{2}(3,2)         0.39284         6.9161         0.0568         0.9547
    AR{2}(1,3)      -0.0010719     0.00056413        -1.9001       0.057423
    AR{2}(2,3)      -0.0016135     0.00092631        -1.7419       0.081533
    AR{2}(3,3)        -0.21556       0.083094        -2.5942      0.0094802
    AR{3}(1,1)       -0.090881       0.062563        -1.4526        0.14633
    AR{3}(2,1)        0.064249        0.10273        0.62542        0.53169
    AR{3}(3,1)         -7.9727         9.2152       -0.86517        0.38695
    AR{3}(1,2)       -0.024092        0.04631       -0.52024        0.60289
    AR{3}(2,2)        0.068565       0.076041        0.90168        0.36723
    AR{3}(3,2)          10.263         6.8212         1.5046        0.13242
    AR{3}(1,3)     -0.00055981     0.00056073       -0.99836        0.31811
    AR{3}(2,3)      -0.0021302     0.00092073        -2.3136        0.02069
    AR{3}(3,3)         0.22969       0.082593         2.7809      0.0054203
    AR{4}(1,1)        0.066151       0.056841         1.1638        0.24451
    AR{4}(2,1)        0.028826       0.093334        0.30885        0.75744
    AR{4}(3,1)          1.0379         8.3724        0.12397        0.90134
    AR{4}(1,2)       -0.078735       0.043804        -1.7975       0.072263
    AR{4}(2,2)       0.0096425       0.071926        0.13406        0.89335
    AR{4}(3,2)         -12.007         6.4521        -1.8609       0.062761
    AR{4}(1,3)     -0.00018454     0.00053356       -0.34586        0.72945
    AR{4}(2,3)     -0.00019036     0.00087611       -0.21728        0.82799
    AR{4}(3,3)        0.053812       0.078591        0.68471        0.49353
    Beta(1,1)        -0.016084      0.0016037        -10.029     1.1365e-23
    Beta(2,1)         -0.00154      0.0026333       -0.58482        0.55867
    Beta(3,1)          -1.5317        0.23622        -6.4841     8.9252e-11

 
   Innovations Covariance Matrix:
    0.0000    0.0000    0.0000
    0.0000    0.0001   -0.0019
    0.0000   -0.0019    0.7790

 
   Innovations Correlation Matrix:
    1.0000    0.1198    0.0011
    0.1198    1.0000   -0.2177
    0.0011   -0.2177    1.0000

EstMdl является varm объект модели, содержащий предполагаемые параметры.

Симулируйте внешние пути отклика

Симулируйте 1000, 3-летние пути серии откликов из предполагаемой модели, принимая, что экзогенный уровень безработицы является фиксированным рядом. Поскольку модель содержит 4 лага на эндогенную переменную, задайте последние 4 наблюдения в выборке оценки в качестве предварительных образцов данных.

numPaths = 1000;
Y0 = EstY((end-3):end,:);
rng(1); % For reproducibility
YSim = simulate(EstMdl,oosT,'X',oosX,'Y0',Y0,'NumPaths',numPaths);

YSim является числовым массивом симулированных откликов 12 на 3 на 1000. Строки YSim соответствуют внешним периодам, столбцы соответствуют ответной серии, а страницы - путям.

Постройте график данных отклика и симулированных откликов. Идентифицируйте 5%, 25%, 75% и 95% процентилей, а также среднее и среднее значение моделируемой серии в каждый период вне выборки.

YSimBar = mean(YSim,3);
YSimQrtl = quantile(YSim,[0.05 0.25 0.5 0.75 0.95],3);
RepDates = repmat(dates(oosIdx),1,1000);
respNames = {'dLRGDP' 'dLRM1SL' 'd3MTB'};

figure;
for j = 1:n
    subplot(3,1,j);
    h1 = plot(dates(oosIdx),squeeze(YSim(:,j,:)),'Color',0.75*ones(3,1));
    hold on;   
    h2 = plot(dates(oosIdx),YSimBar(:,j),'.-k','LineWidth',2);
    h3 = plot(dates(oosIdx),squeeze(YSimQrtl(:,j,:)),':r','LineWidth',1.5);
    h4 = plot(dates((end - 30):end),[EstY((end - 18):end,j);OOSY(:,j)],...
        'b','LineWidth',2);
    title(sprintf('%s',respNames{j}));
    datetick;
    axis tight;
    hold off;
end
legend([h1(1) h2(1) h3(1) h4],{'Simulated Series','Simulation Mean',...
    'Simulation Quartile','Data'},'Location',[0.4 0.1 0.01 0.01],...
    'FontSize',8);

Figure contains 3 axes. Axes 1 with title dLRGDP contains 1007 objects of type line. Axes 2 with title dLRM1SL contains 1007 objects of type line. Axes 3 with title d3MTB contains 1007 objects of type line. These objects represent Simulated Series, Simulation Mean, Simulation Quartile, Data.

Симулируйте внешние пути отклика с помощью случайных экзогенных данных

Предположим, что изменение уровня безработицы является моделью AR (4), и подбирает модель к оценочным выборочным данным.

MdlUNRATE = arima('ARLags',1:4);
EstMdlUNRATE = estimate(MdlUNRATE,estX,'Display','off');

EstMdlUNRATE является arima объект модели, содержащий оценки параметров.

Моделируйте пути 1000, 3 года из предполагаемой модели AR (4) для изменения уровня безработицы. Поскольку модель содержит 4 лага, задайте последние 4 наблюдения в выборке оценки в качестве предварительных данных .

XSim = simulate(EstMdlUNRATE,oosT,'Y0',estX(end-3:end),...
    'NumPaths',numPaths);

XSim является числовой матрицей 12 на 1000 для моделируемых экзогенных путей. Строки соответствуют точкам, а столбцы - путям.

Симулируйте 3 года 1000 путей будущих рядов откликов из предполагаемой модели с помощью моделируемых экзогенных данных. simulate не принимает несколько путей данных предиктора, поэтому необходимо моделировать ответы в цикле. Поскольку модель содержит 4 лага на эндогенную переменную, задайте последние 4 наблюдения в выборке оценки в качестве предварительных образцов данных.

YSimRX = zeros(oosT,n,numPaths); % Preallocate

for j = 1:numPaths
    YSimRX(:,:,j) = simulate(EstMdl,oosT,'X',XSim(:,j),'Y0',Y0);
end

YSimRX является числовым массивом симулированных откликов 12 на 3 на 1000.

Постройте график данных отклика и симулированных откликов. Идентифицируйте 5%, 25%, 75% и 95% процентилей, а также среднее и среднее значение моделируемой серии в каждый период вне выборки.

YSimBarRX = mean(YSimRX,3);
YSimQrtlRX = quantile(YSimRX,[0.05 0.25 0.5 0.75 0.95],3);

figure;
for j = 1:n;
    subplot(3,1,j);
    h1 = plot(dates(oosIdx),squeeze(YSimRX(:,j,:)),'Color',0.75*ones(3,1));
    hold on;   
    h2 = plot(dates(oosIdx),YSimBarRX(:,j),'.-k','LineWidth',2);
    h3 = plot(dates(oosIdx),squeeze(YSimQrtlRX(:,j,:)),':r','LineWidth',1.5);
    h4 = plot(dates((end - 30):end),[EstY((end - 18):end,j);OOSY(:,j)],...
        'b','LineWidth',2);
    title(sprintf('%s with Simulated Unemployment Rate',respNames{j}));
    datetick;
    axis tight;
    hold off;
end
legend([h1(1) h2(1) h3(1) h4],{'Simulated Series','Simulation Mean',...
    'Simulation Quartile','Data'},'Location',[0.4 0.1 0.01 0.01],...
    'FontSize',8)

Figure contains 3 axes. Axes 1 with title dLRGDP with Simulated Unemployment Rate contains 1007 objects of type line. Axes 2 with title dLRM1SL with Simulated Unemployment Rate contains 1007 objects of type line. Axes 3 with title d3MTB with Simulated Unemployment Rate contains 1007 objects of type line. These objects represent Simulated Series, Simulation Mean, Simulation Quartile, Data.

См. также

Объекты

Функции

Похожие темы