прогноз

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

Синтаксис

Y = forecast(Mdl,numperiods,Y0)
Y = forecast(Mdl,numperiods,Y0,Name,Value)
[Y,YMSE] = forecast(___)

Описание

пример

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) к данным об уровне безработицы и индексу потребительских цен (CPI). Затем прогноз безусловные ответы MMSE из предполагаемой модели.

Загрузите набор данных 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 путем преобразования его в серию темпов роста. Синхронизируйте два ряда путем удаления первого наблюдения из ряда уровня безработицы.

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 матрица предсказанных ответов. Первые и вторые столбцы содержат моделируемый темп роста CPI и уровень безработицы, соответственно.

Постройте предсказанные ответы и последние 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;
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;

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

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

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');

Стабилизируйте CPI, GDP и 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) по умолчанию с помощью краткого синтаксиса.

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 матрица моделируемых ответов. Столбцы соответствуют темпу роста CPI, уровню безработицы и действительному темпу роста GDP, соответственно.

Постройте предсказанные ответы и последние 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)];

Анализируйте точность прогноза с помощью интервалов прогноза по трехлетнему горизонту. Этот пример следует из Прогноза Безусловный Ряд Ответа от 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,:).Variables);

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

numperiods = 12;
Y0 = Data(estIdx,:).Variables;
[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;
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;

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

свернуть все

Модель 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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 представляет продолжение преддемонстрационных ответов в Y0. Строки соответствуют наблюдениям, столбцы соответствуют переменным отклика, и страницы соответствуют демонстрационным путям. Строкой j является j - прогноз периода вперед.

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

Матрицы MSE предсказанных ответов в Y, возвращенном как numperiods-by-1 вектор ячейки numseries-by-numseries числовые матрицы. Ячейки YMSE составляют временные ряды ковариационных матриц ошибки прогноза. Ячейка j содержит j - период вперед матрица 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 заданные преддемонстрационные инновации (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] Гамильтон, J. D. Анализ timeseries. Принстон, NJ: Издательство Принстонского университета, 1994.

[2] Йохансен, S. Основанный на вероятности вывод в векторных авторегрессивных моделях Cointegrated. Оксфорд: Издательство Оксфордского университета, 1995.

[3] Juselius, K. Модель VAR Cointegrated. Оксфорд: Издательство Оксфордского университета, 2006.

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

Введенный в R2017a