exponenta event banner

прогноз

Отклики модели авторегрессии вектора прогноза (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) по умолчанию с использованием краткого синтаксиса.

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.

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

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) по умолчанию с использованием краткого синтаксиса.

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около-numseries числовая матрица или numpreobsоколо-numseriesоколо-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' и числовую матрицу или 3-D массив, содержащий 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 является массивом 3-D, то forecast выполняет эти шаги.

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

  2. Удалить любую строку, содержащую хотя бы одну NaN из объединенных данных.

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

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

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

свернуть все

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

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

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

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

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

Алгоритмы

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

    y^t =Φ^1y^t−1 +... + Φ^py^t−p+c^ +δ^t +β^xt,

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

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

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

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

      y^t =Φ^1y^t−1 +... + Φ^py^t−p+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 устанавливает начало времени моделей, которые включают линейные временные тренды (t0) в size(Y0,1)Mdl.P (после удаления отсутствующих значений). Поэтому время в компоненте тренда равно t = t0 + 1, t0 + 2,..., t0 + numobs. Это соглашение согласуется с поведением по умолчанию оценки модели, в которой estimate удаляет первый Mdl.P ответы, уменьшая эффективный размер выборки. Хотя forecast явно использует первый Mdl.P предварительный отбор ответов в Y0 для инициализации модели общее количество наблюдений (исключая отсутствующие значения) определяет t0.

Ссылки

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

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

[3] Джуселиус, К. Коинтегрированная модель VAR. Oxford: Oxford University Press, 2006.

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

Представлен в R2017a