forecast

Прогнозируйте выборки из модели динамической регрессии переключения Маркова

Описание

пример

YF = forecast(Mdl,Y,numPeriods) возвращает оптимальные прогнозы точек YF полностью заданной модели динамической регрессии Маркова-переключения Mdl по прогнозному горизонту длины numPeriods. Прогнозируемые отклики представляют продолжение данных отклика Y.

пример

YF = forecast(Mdl,Y,numPeriods,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, 'X',X задает экзогенные данные в горизонте прогноза для оценки регрессионых компонентов в модели.

пример

[YF,EstCov] = forecast(___) возвращает основанные на симуляции прогнозы YF и соответствующие ковариации ошибок прогноза EstCov, использование любой комбинации входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Предсказать путь отклика из модели динамической регрессии с двумя состояниями Маркова-переключения для процесса 1-D отклика. Этот пример использует произвольные значения параметров для процесса генерации данных (DGP).

Создайте полностью заданную модель для DGP

Создайте модель дискретной цепи Маркова с двумя состояниями, которая описывает механизм переключения режима. Пометьте режимы.

P = [0.9 0.1; 0.3 0.7];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);

mc является полностью заданным dtmc объект.

Для каждого режима используйте arima для создания модели AR, которая описывает процесс ответа в режиме. Сохраните подмодели в векторе.

mdl1 = arima('Constant',5,'AR',[0.3 0.2],...
    'Variance',2);
mdl2 = arima('Constant',-5,'AR',0.1,...
    'Variance',1);
mdl = [mdl1; mdl2];

mdl1 и mdl2 полностью заданы arima объекты.

Создайте модель динамической регрессии переключения Маркова из механизма переключения mc и вектор подмоделей mdl.

Mdl = msVAR(mc,mdl);

Mdl является полностью заданным msVAR объект.

Моделирование данных отклика от DGP

Для прогноза требуется достаточно данных перед прогнозным горизонтом, чтобы инициализировать модель. Симулируйте 120 наблюдений от DGP.

rng(1); % For reproducibility
y = simulate(Mdl,120);

y является 120 на 1 случайным путем откликов.

Вычисление оптимальных прогнозов точек

Обработайте первые 100 наблюдений за данными симулированными откликами как предварительная выборка для прогноза и обработайте последние 20 наблюдений как выборку удержания.

idx0 = 1:100;
idx1 = 101:120;
y0 = y(idx0);
y1 = y(idx1);

Вычислите оптимальные прогнозы точек с 1 по 20 шагов от модели.

yf = forecast(Mdl,y0,20);

yf является вектором оптимальных точечных прогнозов 20 на 1.

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

figure
hold on
plot(idx0,y0,'b');
h = plot(idx1,y1,'b--');
h1 = plot(idx1,yf,'r');
yfill = [ylim fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1],["Actual" "Optimal"],'Location','NorthWest')
title('Forecasts')
hold off

Figure contains an axes. The axes with title Forecasts contains 4 objects of type line, patch. These objects represent Actual, Optimal.

Рассмотрим модель в Вычислении Оптимальных Прогнозов Точек.

Создайте полностью заданную модель для DGP

Создайте полностью заданную модель динамической регрессии Маркова-переключения.

P = [0.9 0.1; 0.3 0.7];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);
mdl1 = arima('Constant',5,'AR',[0.3 0.2],...
    'Variance',2);
mdl2 = arima('Constant',-5,'AR',0.1,...
    'Variance',1);
mdl = [mdl1; mdl2];
Mdl = msVAR(mc,mdl);

Моделирование данных отклика от DGP

forecast требуется достаточно данных перед прогнозным горизонтом, чтобы инициализировать модель. Симулируйте 120 наблюдений от DGP.

rng(10); % For reproducibility
y = simulate(Mdl,120);

y является 120 на 1 случайным путем откликов.

Вычисление прогнозов точек Монте-Карло

Обработайте первые 100 наблюдений за данными симулированными откликами как предварительная выборка для прогноза и обработайте последние 20 наблюдений как выборку удержания.

idx0 = 1:100;
idx1 = 101:120;
y0 = y(idx0);
y1 = y(idx1);

Вычислите оптимальные прогнозы точек с 1 по 20 шагов от модели.

yf1 = forecast(Mdl,y0,20);

yf2 является вектором оптимальных точечных прогнозов 20 на 1.

Вычислите прогнозы точки Монте-Карло с 1 по 20 шагами путем возврата предполагаемых отклонений ошибки прогноза.

[yf2,estVar] = forecast(Mdl,y0,20);

yf2 является вектором 20 на 1 прогнозов точек Монте-Карло. estVAR является вектором 20 на 1 соответствующих расчетных отклонений ошибки прогноза.

Постройте графики симулированного отклика данных, прогнозов и 95% интервалов прогноза с помощью оценок Монте-Карло.

figure
hold on
plot(idx0,y0,'b');
h = plot(idx1,y1,'b--');
h1 = plot(idx1,yf1,'r');
h2 = plot(idx1,yf2,'m');
ciu = yf2 + 1.96*sqrt(estVar); % Upper 95% confidence level
cil = yf2 - 1.96*sqrt(estVar); % Lower 95% confidence level
plot(idx1,ciu,'m-.');
plot(idx1,cil,'m-.'); 
yfill = [ylim,fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1 h2],["Actual" "Optimal" "Estimated"],...
    'Location',"NorthWest")
title("Point and Interval Forecasts")
hold off

Figure contains an axes. The axes with title Point and Interval Forecasts contains 7 objects of type line, patch. These objects represent Actual, Optimal, Estimated.

forecast оценивает прогнозы и соответствующие отклонения ошибки прогноза путем выполнения симуляции Монте-Карло. Можно настроить количество путей к выборке, задав 'NumPaths' аргумент пары "имя-значение". Рассмотрим модель в Вычислении Оптимальных Прогнозов Точек.

Создайте полностью заданную модель динамической регрессии Маркова-переключения.

P = [0.9 0.1; 0.3 0.7];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);
mdl1 = arima('Constant',5,'AR',[0.3 0.2],...
    'Variance',2);
mdl2 = arima('Constant',-5,'AR',0.1,...
    'Variance',1);
mdl = [mdl1; mdl2];
Mdl = msVAR(mc,mdl);

Симулируйте 100 наблюдений от DGP.

rng(10); % For reproducibility
y = simulate(Mdl,100);

Вычислите прогнозы точки Монте-Карло с 1 по 20 шагами путем возврата предполагаемых отклонений ошибки прогноза. Задайте 1000 путей расчета для симуляции Монте-Карло. Обрабатывайте наблюдения y в качестве предварительной выборки для прогноза.

[yf,estVar] = forecast(Mdl,y,20,'NumPaths',1000);

yf является вектором 20 на 1 прогнозов точек Монте-Карло. estVAR является вектором 20 на 1 соответствующих расчетных отклонений ошибки прогноза.

Рассмотрим двухгосударственную марковскую динамическую регрессионую модель послевоенного реального темпа роста ВВП США. Модель имеет оценки параметров, представленные в [1].

Создайте модель динамической регрессии Маркова-Переключения

Создайте полностью заданную модель дискретной цепи Маркова, которая описывает механизм переключения режима. Пометьте режимы.

P = [0.92 0.08; 0.26 0.74];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);

Создайте отдельные, полностью определенные модели AR (0) для этих двух режимов .

sigma = 3.34; % Homoscedastic models across states
mdl1 = arima('Constant',4.62,'Variance',sigma^2);
mdl2 = arima('Constant',-0.48,'Variance',sigma^2);
mdl = [mdl1 mdl2];

Создайте модель динамической регрессии Маркова-переключения из механизма переключения mc и подмодели для конкретного состояния mdl.

Mdl = msVAR(mc,mdl);

Mdl является полностью заданным msVAR объект.

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

forecast требует наблюдений, чтобы инициализировать модель. Загрузите набор данных ВВП США.

load Data_GDP

Data содержит ежеквартальные измерения реального ВВП США в период 1947: Q1-2005: Q2. Период интереса в [1] 1947:Q2-2004:Q2. Для получения дополнительной информации о наборе данных введите Description в командной строке.

Преобразуйте данные в годовую последовательность скоростей путем:

  1. Преобразование данных в квартальный тариф в течение периода оценки

  2. Ежегодный расчет ежеквартальных ставок

qrate = diff(Data(2:230))./Data(2:229); % Quarterly rate
arate = 100*((1 + qrate).^4 - 1);       % Annualized rate

Преобразование снижает первое наблюдение.

Прогноз темпов ВВП США

Прогнозируйте модель по прогнозному горизонту на 12 кварталов. Инициализируйте модель путем предоставления годового ряда ставок.

numPeriods = 12;
yf = forecast(Mdl,arate,numPeriods);

yf является вектором модельных прогнозов 12 на 1. yf(j) является j- оптимальный прогноз точки.

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

dates = datetime(dates(3:230),'ConvertFrom','datenum',...
    'Format','yyyy:QQQ','Locale','en_US');
dt1980Q1 = datetime("1980:Q1",'InputFormat','yyyy:QQQ',...
    'Locale','en_US'); % Specify US date format for 1980:Q1. 
idx = dates >= dt1980Q1;
figure;
plot(dates(idx),arate(idx),'k',...
    dates(end) + calquarters(1:numPeriods),yf,'r--')
xlabel("Year")
ylabel("GDP (Annualized Rate)")
recessionplot
legend("Observations","Forecasts")

Figure contains an axes. The axes contains 6 objects of type line, patch. These objects represent Observations, Forecasts.

Вычислите оптимальные и оцененные прогнозы и соответствующие ковариационные матрицы ошибки прогноза из модели динамической регрессии с тремя состояниями Маркова-переключения для 2-D процесса отклика VARX. Этот пример использует произвольные значения параметров для DGP.

Создайте полностью заданную модель для DGP

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

P = [10 1 1; 1 10 1; 1 1 10];
mc = dtmc(P);

mc является полностью заданным dtmc объект. dtmc нормализует строки P чтобы они суммировали 1.

Для каждого режима используйте varm для создания модели VAR, которая описывает процесс отклика в режиме. Задайте все значения параметров.

% Constants
C1 = [1;-1];
C2 = [2;-2];
C3 = [3;-3];

% Autoregression coefficients
AR1 = {};                            
AR2 = {[0.5 0.1; 0.5 0.5]};          
AR3 = {[0.25 0; 0 0] [0 0; 0.25 0]}; 

% Regression coefficients
Beta1 = [1;-1];           
Beta2 = [2 2;-2 -2];      
Beta3 = [3 3 3;-3 -3 -3]; 

% Innovations covariances
Sigma1 = [1 -0.1; -0.1 1];
Sigma2 = [2 -0.2; -0.2 2];
Sigma3 = [3 -0.3; -0.3 3];

% VARX submodels
mdl1 = varm('Constant',C1,'AR',AR1,'Beta',Beta1,'Covariance',Sigma1);
mdl2 = varm('Constant',C2,'AR',AR2,'Beta',Beta2,'Covariance',Sigma2);
mdl3 = varm('Constant',C3,'AR',AR3,'Beta',Beta3,'Covariance',Sigma3);
mdl = [mdl1; mdl2; mdl3];

mdl содержит три полностью заданных varm объекты модели.

Для DGP создайте полностью заданную модель динамической регрессии Маркова-переключения из механизма переключения mc и подмодели mdl.

Mdl = msVAR(mc,mdl);

Mdl является полностью заданным msVAR модель.

Прогнозная модель, игнорирующая регрессионый компонент

Если вы не поставляете экзогенные данные, simulate и forecast игнорируйте компоненты регрессии в подмоделях. forecast требуется достаточно данных перед прогнозным горизонтом, чтобы инициализировать модель. Симулируйте 120 наблюдений от DGP.

rng('default'); % For reproducibility
Y = simulate(Mdl,120);

Y - матрица 120 на 2 симулированные отклики. Строки соответствуют временным точкам, а столбцы - переменным в системе.

Обработайте первые 100 наблюдений за данными симулированными откликами как предварительная выборка для прогноза и обработайте последние 20 наблюдений как выборку удержания.

idx0 = 1:100;
idx1 = 101:120;
Y0 = Y(idx0,:); % Forecast sample
Y1 = Y(idx1,:); % Holdout sample

Вычислите оптимальные и оцененные прогнозы точек от 1 до 20 моделей. Вычислите ковариационные матрицы ошибки прогноза, соответствующие оцененным прогнозам.

YF1 = forecast(Mdl,Y0,20); 
[YF2,EstCov] = forecast(Mdl,Y0,20);

YF1 и YF2 представляют собой 20 на 2 матрицы оптимальных и предполагаемых прогнозов, соответственно. EstCov массив ковариаций ошибки прогноза 2 на 2 на 20.

Извлеките прогнозные отклонения ошибок каждого отклика для каждого периода в горизонте прогноза.

estVar1(:) = EstCov(1,1,:);
estVar2(:) = EstCov(2,2,:);

estVar1 и estVar2 являются 1 на 20 векторами прогнозируемых отклонений ошибок.

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

figure

subplot(2,1,1)
hold on
plot(idx0,Y0(:,1),'b');
h = plot(idx1,Y1(:,1),'b--');
h1 = plot(idx1,YF1(:,1),'r');
h2 = plot(idx1,YF2(:,1),'m');
ciu = YF2(:,1) + 1.96*sqrt(estVar1');   % Upper 95% confidence level
cil = YF2(:,1) - 1.96*sqrt(estVar1');   % Lower 95% confidence level
plot(idx1,ciu,'m-.'); 
plot(idx1,cil,'m-.'); 
yfill = [ylim,fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1 h2],["Actual" "Optimal" "Estimated"],...
    'Location',"NorthWest")
title("Point and Interval Forecasts: Series 1")
hold off

subplot(2,1,2)
hold on
plot(idx0,Y0(:,2),'b');
h = plot(idx1,Y1(:,2),'b--');
h1 = plot(idx1,YF1(:,2),'r');
h2 = plot(idx1,YF2(:,2),'m');
ciu = YF2(:,2) + 1.96*sqrt(estVar2');   % Upper 95% confidence level
cil = YF2(:,2) - 1.96*sqrt(estVar2');   % Lower 95% confidence level
plot(idx1,ciu,'m-.'); 
plot(idx1,cil,'m-.'); 
yfill = [ylim,fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1 h2],["Actual" "Optimal" "Estimated"],...
    'Location',"NorthWest")
title("Point and Interval Forecasts: Series 2")
hold off

Figure contains 2 axes. Axes 1 with title Point and Interval Forecasts: Series 1 contains 7 objects of type line, patch. These objects represent Actual, Optimal, Estimated. Axes 2 with title Point and Interval Forecasts: Series 2 contains 7 objects of type line, patch. These objects represent Actual, Optimal, Estimated.

Прогнозная модель, включающая регрессионный компонент

Симулируйте экзогенные данные для трех регрессоров, сгенерировав 120 случайных наблюдений из 3-D стандартного Гауссова распределения.

X = randn(120,3);

Симулируйте 120 наблюдений от DGP. Задайте экзогенные данные для регрессионного компонента.

rng('default') 
Y = simulate(Mdl,120,'X',X);

Обработайте первые 100 наблюдений за симулированным откликом и экзогенными данными как предварительная выборка для прогноза и обработайте последние 20 наблюдений как выборку удержания.

idx0 = 1:100;
idx1 = 101:120;
Y0 = Y(idx0,:);
Y1 = Y(idx1,:);
X1 = X(idx1,:);

Вычислите оптимальные и оцененные прогнозы точек от 1 до 20 моделей. Вычислите ковариационные матрицы ошибки прогноза, соответствующие оцененным прогнозам. Задайте экзогенные данные прогноза-периода для регрессионного компонента.

YF1 = forecast(Mdl,Y0,20,'X',X1); 
[YF2,EstCov] = forecast(Mdl,Y0,20,'X',X1);
estVar1(:) = EstCov(1,1,:);
estVar2(:) = EstCov(2,2,:);

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

figure

subplot(2,1,1)
hold on
plot(idx0,Y0(:,1),'b');
h = plot(idx1,Y1(:,1),'b--');
h1 = plot(idx1,YF1(:,1),'r');
h2 = plot(idx1,YF2(:,1),'m');
ciu = YF2(:,1) + 1.96*sqrt(estVar1');   % Upper 95% confidence level
cil = YF2(:,1) - 1.96*sqrt(estVar1');   % Lower 95% confidence level
plot(idx1,ciu,'m-.');
plot(idx1,cil,'m-.');
yfill = [ylim,fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1 h2],["Actual" "Optimal" "Estimated"],...
    'Location',"NorthWest")
title("Point and Interval Forecasts: Series 1")
hold off

subplot(2,1,2)
hold on
plot(idx0,Y0(:,2),'b');
h = plot(idx1,Y1(:,2),'b--');
h1 = plot(idx1,YF1(:,2),'r');
h2 = plot(idx1,YF2(:,2),'m');
ciu = YF2(:,2) + 1.96*sqrt(estVar2');   % Upper 95% confidence level
cil = YF2(:,2) - 1.96*sqrt(estVar2');   % Lower 95% confidence level
plot(idx1,ciu,'m-.'); 
plot(idx1,cil,'m-.'); 
yfill = [ylim,fliplr(ylim)];
xfill = [idx0(end) idx0(end) idx1(end) idx1(end)];
fill(xfill,yfill,'k','FaceAlpha',0.05)
legend([h h1 h2],["Actual" "Optimal" "Estimated"],...
    'Location',"NorthWest")
title("Point and Interval Forecasts: Series 2")
hold off

Figure contains 2 axes. Axes 1 with title Point and Interval Forecasts: Series 1 contains 7 objects of type line, patch. These objects represent Actual, Optimal, Estimated. Axes 2 with title Point and Interval Forecasts: Series 2 contains 7 objects of type line, patch. These objects represent Actual, Optimal, Estimated.

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

свернуть все

Полностью заданная модель динамической регрессии Маркова-переключения, заданная как msVAR объект модели, возвращенный msVAR или estimate. Свойства полностью заданного объекта модели не содержат NaN значения.

Данные отклика, которые обеспечивают начальные значения для прогнозов, заданные как numObs-by- numSeries числовая матрица.

numObs - размер выборки. numSeries - количество переменных отклика (Mdl.NumSeries).

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

Прогнозы YF представление продолжения Y.

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

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

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

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

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

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

Исходные вероятности состояния, из которых можно спрогнозировать, заданные как разделенная разделенными запятой парами, состоящая из 'S0' и неотрицательный числовой вектор длины numStates. S0 соответствует концу выборки данных отклика Y.

forecast нормализует S0 для создания распределения.

По умолчанию, forecast применяется smooth на Y используя настройки по умолчанию, затем устанавливает S0 к терминальному распределению состояний в данных.

Пример: 'S0',[0.2 0.2 0.6]

Пример: 'S0',[0 1] задает начальное состояние 2.

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

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

Чтобы использовать подмножество тех же предикторов в каждом состоянии, задайте X как матрица с numPreds столбцы и не менее numPeriods строки. Столбцы соответствуют отдельным переменным предиктора. Подмодели используют начальные столбцы связанной матрицы, по порядку до количества предикторов подмоделей. Количество столбцов в Beta свойство Mdl.SubModels (j) определяет количество экзогенных переменных в регрессионном компоненте подмодели j. Если количество строк превышает numPeriods, затем forecast использует самые ранние наблюдения.

Чтобы использовать различные предикторы в каждом состоянии, задайте вектор камеры таких матриц с длиной numStates.

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

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

Количество путей расчета для генерации для симуляции, заданное как разделенная разделенными запятой парами, состоящая из 'NumPaths' и положительное целое число. Если forecast возвращает только YF, он игнорирует NumPaths.

Пример: 'NumPaths',1000

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

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

свернуть все

Прогнозы точек, возвращенные как numPeriods-by- numSeries числовая матрица.

Если forecast возвращает только YF, тогда прогнозы точек оптимальны. В противном случае, forecast использует симуляцию Монте-Карло, чтобы оценить прогнозы точек.

Прогнозируйте ковариации ошибок, возвращенные как числовой вектор-столбец или числовой массив.

Если подмодели Mdl.SubModels представление одномерных моделей ARX, EstCov является numPeriods-by-1 вектор. Если Mdl.SubModels представляют многомерные модели VARX, EstCov является numSeries-by- numSeries-by- numPeriods массив.

forecast выполняет симуляцию Монте-Карло для вычисления EstCov.

Алгоритмы

Hamilton [2] обеспечивает статистически оптимальный, одноэтапный прогноз точки YF для модели динамической регрессии с переключением Маркова. forecast вычисляет YF итеративно к горизонту прогноза при вызове с одним выходом. Нелинейность модели динамической регрессии Маркова-переключения приводит к ненормальным ошибкам прогноза, которые усложняют прогнозы интервала и плотности [3]. В результате, forecast переключается на методы Монте-Карло, когда возвращается EstCov.

Ссылки

[1] Шове, М. и Дж. Д. Гамильтон. «Поворотные точки делового цикла знакомств». В нелинейном анализе бизнес-циклов (вклад в экономический анализ, том 276). (C. Milas, P. Rothman, and D. van Dijk, eds.). Амстердам: Emerald Group Publishing Limited, 2006.

[2] Гамильтон, Дж. Д. «Анализ временных рядов, подверженных изменениям в режиме». Журнал эконометрики. Том 45, 1990, стр. 39-70.

[3] Krolzig, H.-M. Марковско-переключательные векторные авторегрессии. Берлин: Спрингер, 1997.

См. также

Объекты

Функции

Введенный в R2019b