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

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

  • Изменения в уровнях действительного валового внутреннего продукта (rGDP) (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 array
  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);

Симулируйте пути к ответу из выборки Используя случайные внешние данные

Предположим, что изменение в уровне безработицы является моделью 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)

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

Объекты

Функции

Похожие темы

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