Этот пример показывает, как сгенерировать прогнозы Монте-Карло от VEC (q) модель. Пример сравнивает сгенерированные прогнозы с прогнозами минимальной среднеквадратической ошибки (MMSE) и прогнозами от VAR (q+1) образцовый эквивалент VEC (q) модель.
Предположим, что модель VEC(2) с H1 форма Йохансена соответственно описывает динамику 3D многомерных временных рядов, состоявших из ежегодных коротких, средних уровней, и долгосрочной облигации от 1 954 до 1994. Предположим, что ряды имеют ранг коинтеграции 2.
Загрузите набор данных Data_Canada
. Извлеките данные о процентной ставке, которые занимают третье через последние столбцы данных.
load Data_Canada
Y = DataTable{:,3:end};
names = DataTable.Properties.VariableNames(3:end);
T = size(Y,1)
T = 41
numSeries = size(Y,2)
numSeries = 3
Постройте ряд в той же фигуре.
figure plot(dates,Y,'LineWidth',2) xlabel 'Year'; ylabel 'Percent'; legend(names,'Location','NW') title '{\bf Canadian Interest Rates, 1954-1994}'; axis tight grid on
Создайте 3D модель VEC(2), имеющую ранг коинтеграции 2.
numLags = 2; r = 2; Mdl = vecm(numSeries,r,numLags);
Оцените модель VEC(2).
EstMdl = estimate(Mdl,Y);
По умолчанию estimate
применяет H1 форма Йохансена и использует первый q + 1 = 3 наблюдения как преддемонстрационные данные.
Сгенерируйте прогнозы Монте-Карло из предполагаемой модели VEC по 10-летнему горизонту при помощи simulate
. Обеспечьте последние три строки данных, чтобы инициализировать прогнозы и задать генерацию 1 000 путей к ответу.
numPaths = 1000; horizon = 10; Y0 = Y((end-2):end,:); rng(1); % For reproducibility YSimVEC = simulate(EstMdl,horizon,'NumPaths',numPaths,'Y0',Y0);
YSimVEC
является 10 3 1 000 числовых массивов моделируемых значений ряда ответа. Строки соответствуют периодам в горизонте прогноза, столбцы соответствуют ряду в Y
, и страницы соответствуют моделируемым путям
Оцените средние значения прогнозов для каждого периода и временных рядов по всем путям. Создайте 95% интервалов прогноза процентили в течение каждого периода и временных рядов.
YMCVEC = mean(YSimVEC,3); YMCVECCI = quantile(YSimVEC,[0.025,0.975],3);
YMCVEC
является 10 3 числовой матрицей, содержащей прогнозы Монте-Карло для каждого периода (строка) и временные ряды (столбец). YMCVECCI
является 10 3 2 числовыми массивами, содержащими процентили на 97,5% и на 2,5% (страницы) ничьих в течение каждого периода (строка) и временные ряды (столбец).
Постройте эффективно-демонстрационные наблюдения, средние прогнозы, и 95% доверительных интервалов процентили.
fDates = dates(end) + (0:horizon)'; figure; h1 = plot([dates; fDates(2:end)],[Y; YMCVEC],'LineWidth',2); h2 = gca; hold on h3 = plot(repmat(fDates,1,3),[Y(end,:,:); YMCVECCI(:,:,1)],'--',... 'LineWidth',2); h3(1).Color = h1(1).Color; h3(2).Color = h1(2).Color; h3(3).Color = h1(3).Color; h4 = plot(repmat(fDates,1,3),[Y(end,:,:); YMCVECCI(:,:,2)],'--',... 'LineWidth',2); h4(1).Color = h1(1).Color; h4(2).Color = h1(2).Color; h4(3).Color = h1(3).Color; patch([fDates(1) fDates(1) fDates(end) fDates(end)],... [h2.YLim(1) h2.YLim(2) h2.YLim(2) h2.YLim(1)],'b','FaceAlpha',0.1) xlabel('Year') ylabel('Percent') title('{\bf VEC Model Monte Carlo Forecasts}') axis tight grid on legend(h1,DataTable.Properties.VariableNames(3:end),'Location','Best');
Оцените прогнозы MMSE из предполагаемой модели VEC по 10-летнему горизонту при помощи forecast
. Обеспечьте последние три строки данных, чтобы инициализировать прогнозы. Возвратите прогнозы и соответствующие, многомерные среднеквадратические ошибки.
[YMMSE,YMMSEMSE] = forecast(EstMdl,horizon,Y0);
YMMSE
является 10 3 числовой матрицей прогнозов MMSE. Строки соответствуют периодам в горизонте прогноза, и столбцы соответствуют ряду в Y
. YMMSEMSE
является вектором ячейки 10 на 1 3х3 числовых матриц. Матрица в ячейке j является предполагаемым, многомерным MSE трех предсказанных значений в период j. Диагональные значения матрицы являются прогнозом MSEs и недиагональные значения ковариаций прогноза.
Оцените интервалы прогноза 95% вальдового типа. Постройте прогнозы MMSE и интервалы прогноза.
YMMSECI = zeros(horizon,numSeries,2); % Preallocation YMMSEMSE = cell2mat(cellfun(@(x)diag(x)',YMMSEMSE,'UniformOutput',false)); YMMSECI(:,:,1) = YMMSE - 1.96*sqrt(YMMSEMSE); YMMSECI(:,:,2) = YMMSE + 1.96*sqrt(YMMSEMSE); figure; h1 = plot([dates; fDates(2:end)],[Y; YMMSE],'LineWidth',2); h2 = gca; hold on h3 = plot(repmat(fDates,1,3),[Y(end,:,:); YMMSECI(:,:,1)],'--',... 'LineWidth',2); h3(1).Color = h1(1).Color; h3(2).Color = h1(2).Color; h3(3).Color = h1(3).Color; h4 = plot(repmat(fDates,1,3),[Y(end,:,:); YMMSECI(:,:,2)],'--',... 'LineWidth',2); h4(1).Color = h1(1).Color; h4(2).Color = h1(2).Color; h4(3).Color = h1(3).Color; patch([fDates(1) fDates(1) fDates(end) fDates(end)],... [h2.YLim(1) h2.YLim(2) h2.YLim(2) h2.YLim(1)],'b','FaceAlpha',0.1) xlabel('Year') ylabel('Percent') title('{\bf VEC Model MMSE Forecasts}') axis tight grid on legend(h1,DataTable.Properties.VariableNames(3:end),'Location','Best');
Представляйте предполагаемый VEC (2) как модель VAR (3).
EstMdlVAR = varm(EstMdl)
EstMdlVAR = varm with properties: Description: "AR-Nonstationary 3-Dimensional VAR(3) Model" SeriesNames: "Y1" "Y2" "Y3" NumSeries: 3 P: 3 Constant: [-1.73631 -0.313676 0.0649337]' AR: {3×3 matrices} at lags [1 2 3] Trend: [3×1 vector of zeros] Beta: [3×0 matrix] Covariance: [3×3 matrix]
MdlVAR
является объектом модели varm
.
Оцените прогнозы MMSE из модели VAR по 10-летнему горизонту при помощи forecast
. Обеспечьте последние три строки данных, чтобы инициализировать прогнозы. Возвратите прогнозы и соответствующие, многомерные среднеквадратические ошибки.
[YMMSEVAR,YMMSEMSEVAR] = forecast(EstMdlVAR,horizon,Y0);
Размерности YMMSEVAR
и YMMSEMSEVAR
совпадают с YMMSE
и YMMSEMSE
, соответственно.
Оцените интервалы прогноза 95% вальдового типа. Постройте прогнозы MMSE и интервалы прогноза.
YMMSEVARCI = zeros(horizon,numSeries,2); YMMSEMSEVAR = cell2mat(cellfun(@(x)diag(x)',YMMSEMSEVAR,'UniformOutput',false)); YMMSEVARCI(:,:,1) = YMMSE - 1.96*sqrt(YMMSEMSEVAR); YMMSEVARCI(:,:,2) = YMMSE + 1.96*sqrt(YMMSEMSEVAR); figure; h1 = plot([dates; fDates(2:end)],[Y; YMMSE],'LineWidth',2); h2 = gca; hold on h3 = plot(repmat(fDates,1,3),[Y(end,:,:); YMMSEVARCI(:,:,1)],'--',... 'LineWidth',2); h3(1).Color = h1(1).Color; h3(2).Color = h1(2).Color; h3(3).Color = h1(3).Color; h4 = plot(repmat(fDates,1,3),[Y(end,:,:); YMMSEVARCI(:,:,2)],'--',... 'LineWidth',2); h4(1).Color = h1(1).Color; h4(2).Color = h1(2).Color; h4(3).Color = h1(3).Color; patch([fDates(1) fDates(1) fDates(end) fDates(end)],... [h2.YLim(1) h2.YLim(2) h2.YLim(2) h2.YLim(1)],'b','FaceAlpha',0.1) xlabel('Year') ylabel('Percent') title('{\bf VAR Model MMSE Forecasts}') axis tight grid on legend(h1,DataTable.Properties.VariableNames(3:end),'Location','Best');
Подтвердите, что прогнозы MMSE из моделей VEC и VAR являются тем же самым.
(YMMSE - YMMSEVAR)'*(YMMSE - YMMSEVAR) > eps
ans = 3x3 logical array
0 0 0
0 0 0
0 0 0
Прогнозы MMSE между моделями идентичны.