В этом примере показано, как оценить многомерную модель временных рядов, которая содержит изолированные эндогенные и внешние переменные, и как симулировать ответы. Ряды ответа являются ежеквартальным изданием:
Изменения в уровнях действительного валового внутреннего продукта (rGDP) ()
Действительная денежная масса (rM1SL) уровни ()
Краткосрочные процентные ставки (i.e., трехмесячный доход по казначейским векселям, )
с марта 1959 до марта 2009. Внешний ряд является ежеквартальными изменениями в показателях безработицы ().
Предположим, что модель для ответов является этой моделью VARX(4,3)
Загрузите американский макроэкономический набор данных. Отметьте ряд и их периоды, которые содержат отсутствующие значения (обозначенный 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(4) с помощью varm
.
Mdl = varm(n,4);
Mdl
varm
объект модели, служащий шаблоном для оценки. В настоящее время, Mdl
действительно знает имеют в распоряжении структуру для компонента регрессии. However, MATLAB® создает необходимую структуру во время оценки.
Оцените параметры модели 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)