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

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

  • Изменения в уровнях действительного валового внутреннего продукта (rGDP) (y1t)

  • Действительная денежная масса (rM1SL) уровни (y2t)

  • Краткосрочные процентные ставки (i.e., трехмесячный доход по казначейским векселям, 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 действительно знает имеют в распоряжении структуру для компонента регрессии. However, 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 1 000 числовых массивов симулированных откликов. Строки 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 objects. Axes object 1 with title dLRGDP contains 1007 objects of type line. Axes object 2 with title dLRM1SL contains 1007 objects of type line. Axes object 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 года 1 000 будущих серийных путей к ответу из предполагаемой модели с помощью симулированных внешних данных. 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 1 000 числовых массивов симулированных откликов.

Отобразите на графике данные об ответе и симулированные отклики. Идентифицируйте 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 objects. Axes object 1 with title dLRGDP with Simulated Unemployment Rate contains 1007 objects of type line. Axes object 2 with title dLRM1SL with Simulated Unemployment Rate contains 1007 objects of type line. Axes object 3 with title d3MTB with Simulated Unemployment Rate contains 1007 objects of type line. These objects represent Simulated Series, Simulation Mean, Simulation Quartile, Data.

Смотрите также

Объекты

Функции

Похожие темы

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