Симулируйте ответы предполагаемой модели 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.

См. также

Объекты

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте