В этом примере показано, как использовать forecast
для прогноза модели VAR.
forecast
позволяет вам генерировать прогнозы MMSE с оценками ошибок. forecast
требует:
Полностью заданная модель (например EstMdl
в следующем)
Количество периодов для прогноза (для примера, numperiods
в следующем)
Предварительный образец временных рядов (например Y(end-3:end,:)
в следующем)
forecast
опционально принимает:
Экзогенный ряд данных
Дополнительные пути
Загрузите Data_USEconModel
набор данных. Этот пример использует два временных рядов: логарифм реального ВВП и реальный 3-месячный тариф T-векселя, оба по-разному являются приблизительно стационарными. Предположим, что модель VAR (4) подходит для описания временных рядов.
load Data_USEconModel DEF = log(DataTable.CPIAUCSL); GDP = log(DataTable.GDP); rGDP = diff(GDP - DEF); % Real GDP is GDP - deflation TB3 = 0.01*DataTable.TB3MS; dDEF = 4*diff(DEF); % Scaling rTB3 = TB3(2:end) - dDEF; % Real interest is deflated Y = [rGDP,rTB3];
Подбор спецификации модели VAR (4):
Mdl = varm(2,4); Mdl.SeriesNames = {'Transformed real GDP','Transformed real 3-mo T-bill rate'}; EstMdl = estimate(Mdl,Y);
Предсказать эволюцию временных рядов:
numperiods = 21; FDates = dateshift(DataTable.Time(end),'end','quarter',1:numperiods); [Forecast,ForecastMSE] = forecast(EstMdl,numperiods,Y(end-3:end,:));
Извлеките основные диагональные элементы из матриц в каждой камере ForecastMSE
. Примените квадратный корень результата, чтобы получить стандартные ошибки.
extractMSE = @(x)diag(x)';
MSE = cellfun(extractMSE,ForecastMSE,'UniformOutput',false);
SE = sqrt(cell2mat(MSE));
Оцените примерно 95% интервалов прогноза для каждой серии ответов.
ForecastFI = zeros(numperiods,Mdl.NumSeries,2); ForecastFI(:,:,1) = Forecast - 2*SE; ForecastFI(:,:,2) = Forecast + 2*SE;
Постройте график прогнозов и данных.
figure; h1 = plot(DataTable.Time((end-49):end),Y((end-49):end,1)); hold on; h2 = plot(FDates,Forecast(:,1)); h3 = plot(FDates,ForecastFI(:,1,1),'k--'); plot(FDates,ForecastFI(:,1,2),'k--'); title('Real GDP Growth Rate'); h = gca; fill([FDates(1) h.XLim([2 2]) FDates(1)],h.YLim([1 1 2 2]),'k',... 'FaceAlpha',0.1,'EdgeColor','none'); legend([h1 h2 h3],'True','Forecast','95% Forecast interval',... 'Location','northwest') hold off;
figure; h1 = plot(DataTable.Time((end-49):end),Y((end-49):end,2)); hold on; h2 = plot(FDates,Forecast(:,2)); h3 = plot(FDates,ForecastFI(:,2,1),'k--'); plot(FDates,ForecastFI(:,2,2),'k--'); title('3-month T-bill rate'); h = gca; fill([FDates(1) h.XLim([2 2]) FDates(1)],h.YLim([1 1 2 2]),'k',... 'FaceAlpha',0.1,'EdgeColor','none'); legend([h1 h2 h3],'True','Forecast','95% Forecast interval',... 'Location','northwest') hold off;