В этом примере показано, как сгенерировать симулированные ответы в горизонте прогноза, когда некоторые значения ответа известны. Проиллюстрировать условную генерацию симуляции, модели в качестве примера ежеквартальные меры индекса потребительских цен (CPI) и уровня безработицы как модель VAR (4).
Загрузите Data_USEconModel
набор данных.
load Data_USEconModel
Постройте два ряда на отдельных графиках.
figure; plot(DataTable.Time,DataTable.CPIAUCSL); title('Consumer Price Index'); ylabel('Index'); xlabel('Date');
figure; plot(DataTable.Time,DataTable.UNRATE); title('Unemployment Rate'); ylabel('Percent'); xlabel('Date');
CPI, кажется, растет экспоненциально.
Стабилизируйте CPI путем преобразования его в серию темпов роста. Синхронизируйте два ряда путем удаления первого наблюдения из ряда уровня безработицы. Создайте новый набор данных, содержащий преобразованные переменные, и не включайте строки, содержащие по крайней мере одно недостающее наблюдение.
rcpi = price2ret(DataTable.CPIAUCSL); unrate = DataTable.UNRATE(2:end); Data = array2timetable([rcpi unrate],'RowTimes',DataTable.Time(2:end),... 'VariableNames',{'rcpi','unrate'});
Создайте модель VAR (4) по умолчанию с помощью краткого синтаксиса.
Mdl = varm(2,4)
Mdl = varm with properties: Description: "2-Dimensional VAR(4) Model" SeriesNames: "Y1" "Y2" NumSeries: 2 P: 4 Constant: [2×1 vector of NaNs] AR: {2×2 matrices of NaNs} at lags [1 2 3 ... and 1 more] Trend: [2×1 vector of zeros] Beta: [2×0 matrix] Covariance: [2×2 matrix of NaNs]
Mdl
varm
объект модели. Это служит шаблоном для оценки модели.
Подбирайте модель к данным.
EstMdl = estimate(Mdl,Data.Variables)
EstMdl = varm with properties: Description: "AR-Stationary 2-Dimensional VAR(4) Model" SeriesNames: "Y1" "Y2" NumSeries: 2 P: 4 Constant: [0.00171639 0.316255]' AR: {2×2 matrices} at lags [1 2 3 ... and 1 more] Trend: [2×1 vector of zeros] Beta: [2×0 matrix] Covariance: [2×2 matrix]
EstMdl
varm
объект модели. EstMdl
структурно то же самое как Mdl
, но все параметры известны.
Предположим, что экономист ожидает, что уровень безработицы останется то же самое как последний наблюдаемый уровень за следующие два года. Создайте 8 2 матрица, в которой первый столбец содержит NaN
значения и второй столбец содержат последний наблюдаемый уровень безработицы.
YF = [nan(8,1) repmat(Data.unrate(end),8,1)];
Используя предполагаемую модель, симулируйте 1 000 путей ежеквартального темпа роста CPI в течение следующих двух лет. Примите, что уровень безработицы остается то же самое в течение следующих двух лет. Задайте целый набор данных как преддемонстрационные наблюдения и известные значения в горизонте прогноза.
numpaths = 1000; rng(1); % For reproducibility Y = simulate(EstMdl,8,'Y0',Data.Variables,'NumPaths',numpaths,'YF',YF);
Y
8 2 1 000 массивов путей к ответу. Несмотря на то, что первый столбец на каждой странице содержит симулированные значения, второй столбец состоит полностью из последнего наблюдаемого уровня безработицы.
Оцените средний темп роста CPI в каждой точке в горизонте прогноза.
MCForecast = mean(Y,3)
MCForecast = 8×2
-0.0075 8.5000
-0.0134 8.5000
-0.0010 8.5000
-0.0050 8.5000
-0.0052 8.5000
-0.0022 8.5000
-0.0032 8.5000
-0.0026 8.5000
Учитывая, что уровень безработицы 8.5 в течение следующих двух лет, темп роста CPI, как ожидают, уменьшится.