forecast

Прогнозирование вектора авторегрессия (VAR) ответы модели

Описание

пример

Y = forecast(Mdl,numperiods,Y0) возвращает путь прогнозов минимальной квадратичной невязки (MMSE) (Y) по длине numperiods прогнозируемый горизонт с использованием полностью заданной модели VAR (p) Mdl. Прогнозируемые отклики представляют продолжение предварительных образцов данных Y0.

пример

Y = forecast(Mdl,numperiods,Y0,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Например, вы можете задать будущие экзогенные данные предиктора или включить будущие ответы для условного прогнозирования.

пример

[Y,YMSE] = forecast(___) возвращает соответствующую среднюю квадратичную невязку (MSE) каждого прогнозируемого отклика, используя любой из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Подбор модели VAR (4) к данным индекса потребительских цен (ИПЦ) и уровня безработицы. Затем прогнозируйте безусловные ответы MMSE от оценочной модели.

Загрузите Data_USEconModel набор данных.

load Data_USEconModel

Постройте график двух серий на отдельных графиках.

figure;
plot(DataTable.Time,DataTable.CPIAUCSL);
title('Consumer Price Index');
ylabel('Index');
xlabel('Date');

Figure contains an axes. The axes with title Consumer Price Index contains an object of type line.

figure;
plot(DataTable.Time,DataTable.UNRATE);
title('Unemployment Rate');
ylabel('Percent');
xlabel('Date');

Figure contains an axes. The axes with title Unemployment Rate contains an object of type line.

Стабилизируйте ИПЦ путем преобразования его в ряд темпов роста. Синхронизируйте две серии путем удаления первого наблюдения из ряда уровней безработицы.

rcpi = price2ret(DataTable.CPIAUCSL);
unrate = DataTable.UNRATE(2:end);
Data = array2timetable([rcpi unrate],'RowTimes',DataTable.Time(2:end),...
    'VariableNames',{'rcpi','unrate'});

Создайте модель VAR (4) по умолчанию с помощью синтаксиса shorthand.

Mdl = varm(2,4);

Оцените модель, используя весь набор данных.

EstMdl = estimate(Mdl,Data.Variables);

EstMdl является полностью заданным, предполагаемым varm объект модели.

Прогнозные отклики от предполагаемой модели на трехлетний горизонт. Задайте весь набор данных как предварительные наблюдения.

numperiods = 12;
Y0 = Data.Variables;
Y = forecast(EstMdl,numperiods,Y0);

Y является матрицей 12 на 2 прогнозируемых ответов. Первый и второй столбцы содержат моделируемые темпы роста ИПЦ и уровень безработицы, соответственно.

Постройте график прогнозируемых откликов и последних 50 истинных откликов.

fh = dateshift(Data.Time(end),'end','quarter',1:12);

figure;
h1 = plot(Data.Time((end-49):end),Data.rcpi((end-49):end));
hold on;
h2 = plot(fh,Y(:,1));
title('CPI Growth Rate');
ylabel('Growth rate');
xlabel('Date');
h = gca;
fill([Data.Time(end) fh([end end]) Data.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast')
hold off;

Figure contains an axes. The axes with title CPI Growth Rate contains 3 objects of type line, patch. These objects represent True, Forecast.

figure;
h1 = plot(Data.Time((end-49):end),Data.unrate((end-49):end));
hold on;
h2 = plot(fh,Y(:,2));
title('Unemployment Rate');
ylabel('Percent');
xlabel('Date');
h = gca;
fill([Data.Time(end) fh([end end]) Data.Time(end)],h.YLim([1 1 2 2]),'k',...
    'FaceAlpha',0.1,'EdgeColor','none');
legend([h1 h2],'True','Forecast','Location','northwest')
hold off;

Figure contains an axes. The axes with title Unemployment Rate contains 3 objects of type line, patch. These objects represent True, Forecast.

Оценка модели авторегрессии вектора четырех степенях, включая экзогенные предикторы (VARX (4)) индекса потребительских цен (ИПЦ), уровня безработицы и валового внутреннего продукта (ВВП). Включить линейный регрессионный компонент, содержащий текущий квартал и последние четыре квартала государственных расходов и инвестиций (GCE). Спрогнозируйте путь отклика из предполагаемой модели.

Загрузите Data_USEconModel набор данных. Вычислите реальный ВВП.

load Data_USEconModel
DataTable.RGDP = DataTable.GDP./DataTable.GDPDEF*100;

Постройте график всех переменных на отдельных графиках.

figure;
subplot(2,2,1)
plot(DataTable.Time,DataTable.CPIAUCSL);
ylabel('Index');
title('Consumer Price Index');
subplot(2,2,2)
plot(DataTable.Time,DataTable.UNRATE);
ylabel('Percent');
title('Unemployment Rate');
subplot(2,2,3)
plot(DataTable.Time,DataTable.RGDP);
ylabel('Output');
title('Real Gross Domestic Product');
subplot(2,2,4)
plot(DataTable.Time,DataTable.GCE);
ylabel('Billions of $');
title('Government Expenditures');

Figure contains 4 axes. Axes 1 with title Consumer Price Index contains an object of type line. Axes 2 with title Unemployment Rate contains an object of type line. Axes 3 with title Real Gross Domestic Product contains an object of type line. Axes 4 with title Government Expenditures contains an object of type line.

Стабилизируйте ИПЦ, ВВП и GCE путем преобразования каждого из них в ряд темпов роста. Синхронизируйте ряд показателей безработицы с другими, удалив его первое наблюдение.

inputVariables = {'CPIAUCSL' 'RGDP' 'GCE'};
Data = varfun(@price2ret,DataTable,'InputVariables',inputVariables);
Data.Properties.VariableNames = inputVariables;
Data.UNRATE = DataTable.UNRATE(2:end);

Разверните ряд скоростей GCE к матрице, которая включает в себя его текущее значение и вверх до четырех отстающих значений. Удалите GCE переменная от Data.

rgcelag4 = lagmatrix(Data.GCE,0:4);
Data.GCE = [];

Создайте модель VAR (4) по умолчанию с помощью синтаксиса shorthand.

Mdl = varm(3,4);
Mdl.SeriesNames = ["rcpi" "unrate" "rgdpg"];

Оцените модель, используя все, кроме последних трех лет данных. Задайте матрицу GCE как данные для регрессионного компонента.

bfh = Data.Time(end) - years(3);
estIdx = Data.Time < bfh;
EstMdl = estimate(Mdl,Data(estIdx,:).Variables,'X',rgcelag4(estIdx,:));

Прогнозируйте путь ежеквартальных ответов на три года в будущее.

Y0 = Data(estIdx,:).Variables;
Y = forecast(EstMdl,12,Data(estIdx,:).Variables,'X',rgcelag4(~estIdx,:));

Y является матрицей 12 на 3 симулированные отклики. Столбцы соответствуют темпам роста ИПЦ, безработице и реальным темпам роста ВВП, соответственно.

Постройте график прогнозируемых откликов и последних 50 истинных откликов.

figure;
for j = 1:Mdl.NumSeries
    subplot(2,2,j)
    h1 = plot(Data.Time((end-49):end),Data{(end-49):end,j});
    hold on;
    h2 = plot(Data.Time(~estIdx),Y(:,j));
    title(Mdl.SeriesNames{j});
    h = gca;
    fill([bfh h.XLim([2 2]) bfh],h.YLim([1 1 2 2]),'k',...
        'FaceAlpha',0.1,'EdgeColor','none');
    hold off;
end

hl = legend([h1 h2],'Data','Forecast');
hl.Position = [0.6 0.25 hl.Position(3:4)];

Figure contains 3 axes. Axes 1 with title rcpi contains 3 objects of type line, patch. Axes 2 with title unrate contains 3 objects of type line, patch. Axes 3 with title rgdpg contains 3 objects of type line, patch. These objects represent Data, Forecast.

Анализ точности прогноза с помощью интервалов прогноза на трехлетнем горизонте. Этот пример следует из Прогнозирования Безусловного Ряда Отклика из Модели VAR (4).

Загрузите Data_USEconModel набор данных и предварительная обработка данных.

load Data_USEconModel

rcpi = price2ret(DataTable.CPIAUCSL);
unrate = DataTable.UNRATE(2:end);
Data = array2timetable([rcpi unrate],'RowTimes',DataTable.Time(2:end),...
    'VariableNames',{'rcpi','unrate'});

Оцените модель VAR (4) двух рядов откликов. Резервируйте последние три года данных.

bfh = Data.Time(end) - years(3);
estIdx = Data.Time < bfh;
Mdl = varm(2,4);
EstMdl = estimate(Mdl,Data{estIdx,:});

Прогнозные отклики от предполагаемой модели на трехлетний горизонт. Задайте весь набор данных как предварительные наблюдения. Возвращает MSE прогнозов.

numperiods = 12;
Y0 = Data{estIdx,:};
[Y,YMSE] = forecast(EstMdl,numperiods,Y0);

Y является матрицей 12 на 2 прогнозируемых ответов. YMSE является вектором камеры 12 на 1 соответствующих матриц MSE.

Извлеките основные диагональные элементы из матриц в каждой камере YMSE. Примените квадратный корень результата, чтобы получить стандартные ошибки.

extractMSE = @(x)diag(x)';
MSE = cellfun(extractMSE,YMSE,'UniformOutput',false);
SE = sqrt(cell2mat(MSE));

Оцените примерно 95% интервалов прогноза для каждой серии ответов.

YFI = zeros(numperiods,Mdl.NumSeries,2);

YFI(:,:,1) = Y - 2*SE;
YFI(:,:,2) = Y + 2*SE;

Постройте график прогнозируемых откликов и последних 50 истинных откликов.

figure;
h1 = plot(Data.Time((end-49):end),Data.rcpi((end-49):end));
hold on;
h2 = plot(Data.Time(~estIdx),Y(:,1));
h3 = plot(Data.Time(~estIdx),YFI(:,1,1),'k--');
plot(Data.Time(~estIdx),YFI(:,1,2),'k--');
title('CPI Growth Rate');
ylabel('Growth rate');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],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 contains an axes. The axes with title CPI Growth Rate contains 5 objects of type line, patch. These objects represent True, Forecast, 95% Forecast interval.

figure;
h1 = plot(Data.Time((end-49):end),Data.unrate((end-49):end));
hold on;
h2 = plot(Data.Time(~estIdx),Y(:,2));
h3 = plot(Data.Time(~estIdx),YFI(:,2,1),'k--');
plot(Data.Time(~estIdx),YFI(:,2,2),'k--');
title('Unemployment Rate');
ylabel('Percent');
xlabel('Date');
h = gca;
fill([bfh h.XLim([2 2]) bfh],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 contains an axes. The axes with title Unemployment Rate contains 5 objects of type line, patch. These objects represent True, Forecast, 95% Forecast interval.

Входные параметры

свернуть все

Модель VAR, заданная как varm объект модели, созданный varm или estimate. Mdl должен быть полностью задан.

Горизонт прогноза или количество временных точек в прогнозном периоде, заданное в виде положительного целого числа.

Типы данных: double

Примитивируйте отклики, которые обеспечивают начальные значения для прогнозов, заданные как numpreobs-by- numseries числовая матрица или numpreobs-by- numseries-by- numprepaths числовой массив.

numpreobs - количество предварительных наблюдений. numseries Количество серий отклика (Mdl.NumSeries). numprepaths - количество предварительно выбранных путей отклика.

Строки соответствуют предварительным образцам наблюдений, а последняя строка содержит последнее наблюдение. Y0 должен содержать не менее Mdl.P строки. Если вы поставляете больше строк, чем нужно, forecast использует только последние Mdl.P наблюдения.

Столбцы должны соответствовать именам ответных рядов в Mdl.SeriesNames.

Страницы соответствуют отдельным, независимым путям.

  • Если вы не задаете YF аргумент пары "имя-значение", затем forecast инициализирует каждый прогнозируемый путь (страницу) с помощью соответствующей страницы Y0. Поэтому выходной аргумент Y имеет numprepaths страниц.

  • Если вы задаете YF аргумент пары "имя-значение", затем forecast выполняет одно из таких действий.

    • Если Y0 является матрицей, тогда forecast инициализирует каждый путь прогноза (страница) в YF использование Y0. Поэтому все пути в выходном аргументе Y получают из общих начальных условий.

    • В противном случае, forecast применяется Y0 (:,:, j) для инициализации пути прогнозирования j. Y0 должно иметь по крайней мере numpaths страниц, и forecast использует только первое numpaths страниц.

    Среди всех страниц наблюдения в определенной строке происходят одновременно.

Типы данных: double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'X',X,'YF',YF использует матрицу X как данные предиктора в регрессионном компоненте и матрице YF как частично известные будущие ответы для условного прогнозирования.

Предсказанные временные ряды предикторов для включения в компонент регрессии модели, заданные как разделенная разделенными запятой парами, состоящая из 'X' и числовую матрицу, содержащую numpreds столбцы.

numpreds - количество переменных предиктора (size(Mdl.Beta,2)).

Строки соответствуют наблюдениям. Строка j содержит j-теплового прогноза. X должно иметь по крайней мере numperiods строки. Если вы поставляете больше строк, чем нужно, forecast использует только самую раннюю numperiods наблюдения. Первая строка содержит самое раннее наблюдение.

Столбцы соответствуют отдельным переменным предиктора. Все переменные предиктора присутствуют в регрессионном компоненте каждого уравнения отклика.

forecast применяется X на каждый путь (страницу); то есть X представляет один путь наблюдаемых предикторов.

Чтобы сохранить согласованность модели в прогнозном горизонте, рекомендуется задать прогнозные предикторы при Mdl имеет регрессионный компонент.

По умолчанию, forecast исключает регрессионный компонент, независимо от его присутствия в Mdl.

Типы данных: double

Будущий многомерный ряд отклика для условного прогнозирования, заданный как разделенная разделенными запятой парами, состоящая из 'YF' и числовую матрицу или трехмерный массив, содержащую numseries столбцы.

Строки соответствуют наблюдениям в прогнозном горизонте, а первая строка является самым ранним наблюдением. В частности, строка j в пути расчета k (YF (j:, k)) содержит ответы j периоды в будущее. YF должно иметь по крайней мере numperiods строки для покрытия прогнозируемого горизонта. Если вы поставляете больше строк, чем нужно, forecast использует только первое numperiods строки.

Столбцы соответствуют переменным отклика в Y0.

Страницы соответствуют образцам путей. В частности, путь k (YF (:,:, k)) захватывает состояние, или знание, серии откликов по мере их развития из предварительной выборки прошлого (Y0) в будущее.

  • Если YF является матрицей, тогда forecast применяется YF каждому из numpaths выходные пути (см. Y0).

  • В противном случае YF должно иметь по крайней мере numpaths страниц. Если вы поставляете больше страниц, чем нужно, forecast использует только первое numpaths страниц.

Элементы YF могут быть числовыми скалярами или отсутствующими значениями (обозначенными NaN значения). forecast рассматривает числовые скаляры как детерминированные будущие отклики, которые известны заранее, например, заданные политикой. forecast прогнозирует ответы для соответствующих NaN значения, обусловленные известными значениями.

По умолчанию YF - массив, состоящий из NaN значения, указывающие на полное отсутствие знаний о будущем состоянии всех откликов в прогнозном горизонте. В этом случае, forecast оценивает обычные прогнозы MMSE.

Для получения дополнительной информации см. «Алгоритмы».

Пример: Рассмотрите прогнозирование одного пути модели VAR, состоящей из четырех рядов ответов, трех периодов в будущее. Предположим, что у вас есть предыдущие знания о некоторых будущих значениях ответов, и вы хотите предсказать неизвестные ответы, обусловленные вашими знаниями. Задайте YF как матрица, содержащая значения, которые вы знаете и используете NaN для значений, которые вы не знаете, но хотите предсказать. Для примера, 'YF',[NaN 2 5 NaN; NaN NaN 0.1 NaN; NaN NaN NaN NaN] указывает, что вы не знаете о будущих значениях первой и четвертой серии ответов; вы знаете значение для периода 1 во втором ряду ответов, но не знаете другого значения; и вы знаете значения для периодов 1 и 2 в третьей серии ответов, но не значение для периода 3.

Типы данных: double

Примечание

NaN значения в Y0 и X указать отсутствующие значения. forecast удаляет отсутствующие значения из данных путем перечисленного удаления. Если Y0 является трехмерный массив, тогда forecast выполняет эти шаги.

  1. Горизонтальная конкатенация страниц для формирования numpreobs-by- numpaths*numseries матрица.

  2. Удалите любую строку, содержащую по крайней мере одну NaN из конкатенированных данных.

В случае отсутствующих наблюдений результаты, полученные из нескольких путей Y0 может отличаться от результатов, полученных по каждому пути индивидуально.

Для отсутствующих значений в X, forecast удаляет соответствующую строку с каждой страницы YF. После удаления строки из X и YF, если количество строк меньше numperiods, затем forecast выдает ошибку.

Выходные аргументы

свернуть все

Прогнозы MMSE многомерной серии ответов, возвращенные как numobs-by- numseries числовая матрица или numobs-by- numseries-by- numpaths числовой массив. Y представляет продолжение настроек presample в Y0. Строки соответствуют наблюдениям, столбцы соответствуют переменным отклика, а страницы соответствуют путям расчета. Строка j является j-период-опережающий прогноз.

Если вы задаете будущие отклики для условного прогнозирования с помощью YF аргумент пары "имя-значение", затем известные значения в YF появляются на тех же позициях в Y. Однако Y содержит прогнозные значения для отсутствующих наблюдений в YF.

Матрицы MSE прогнозируемых ответов в Y, возвращается как numperiods-by-1 вектор камеры numseries-by- numseries числовые матрицы. Камеры YMSE составьте временные ряды ковариационных матриц прогнозной ошибки. Камеры j содержит j-period-award MSE матрица.

YMSE идентичен для всех путей.

Поскольку forecast обрабатывает переменные предиктора в X как экзогенный и нестохастический, YMSE отражает ковариацию ошибки, связанную с авторегрессивным компонентом модели входа Mdl только.

Алгоритмы

  • forecast оценивает безусловные прогнозы используя уравнение

    y^t=Φ^1y^t1+...+Φ^py^tp+c^+δ^t+β^xt,

    где t = 1,..., numperiods. forecast фильтрует numperiods-by- numseries матрица нулевых инноваций посредством Mdl. forecast использует указанные нововведения presample (Y0) при необходимости.

  • forecast оценивает условные прогнозы с помощью фильтра Калмана.

    1. forecast представляет модель VAR Mdl как модель пространства состояний (ssm объект модели) без ошибки наблюдения.

    2. forecast фильтрует данные прогноза YF через модель пространства состояний. В период t в прогнозном горизонте, любой неизвестный ответ

      y^t=Φ^1y^t1+...+Φ^py^tp+c^+δ^t+β^xt,

      где y^s, s < t, является отфильтрованной оценкой y по периодам s в прогнозном горизонте. forecast использует заданные значения предварительной выборки в Y0 для периодов перед прогнозным горизонтом.

    Для получения дополнительной информации смотрите filter и [4], стр. 612 и 615.

  • Путь forecast определяет numpaths, количество страниц в выходном аргументе Y, зависит от типа прогноза.

    • Если вы оцениваете безусловные прогнозы, что означает, что вы не задаете аргумент пары "имя-значение" YF, затем numpaths количество страниц в входной параметр Y0.

    • Если вы оцениваете условные прогнозы и Y0 и YF иметь более одной страницы, тогда numpaths количество страниц в массиве с меньшим количеством страниц. Если количество страниц в Y0 или YF превышает numpaths, затем forecast использует только первое numpaths страниц.

    • Если вы оцениваете условные прогнозы и Y0 или YF имеет одну страницу, затем numpaths количество страниц в массиве с наибольшим количеством страниц. forecast использует массив с одной страницей для каждого пути.

  • forecast устанавливает временный источник моделей, которые включают линейные временные тренды (t 0) в size(Y0,1)Mdl.P (после удаления отсутствующих значений). Поэтому время в компоненте тренда: t = t 0 + 1, t 0 + 2,..., t 0 + numobs. Это соглашение согласуется с поведением по умолчанию оценки модели, в которой estimate удаляет первый Mdl.P ответы, уменьшение эффективного размера выборки. Хотя forecast явно использует первое Mdl.P примитивируйте отклики в Y0 чтобы инициализировать модель, общее количество наблюдений (исключая отсутствующие значения) определяет t 0.

Ссылки

[1] Гамильтон, Джеймс Д. Анализ временных рядов. Princeton, NJ: Princeton University Press, 1994.

[2] Йохансен, С. Основанный на вероятностях вывод в коинтегрированных векторных авторегрессивных моделях. Oxford: Oxford University Press, 1995.

[3] Juselius, K. Cointegrated VAR Model. Oxford: Oxford University Press, 2006.

[4] Lütkepohl, H. Новое введение в анализ нескольких временных рядов. Берлин: Спрингер, 2005.

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