exponenta event banner

прогноз

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

Описание

пример

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.

Расчет прогнозов Monte Carlo Point

Обработайте первые 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около-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около-numSeries числовая матрица.

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

Ковариации ошибок прогноза, возвращаемые в виде вектора числового столбца или числового массива.

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

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

Алгоритмы

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

Ссылки

[1] Chauvet, M. и Дж. Д. Гамильтон. «Переломные моменты бизнес-цикла знакомств». В нелинейном анализе бизнес-циклов (вклад в экономический анализ, том 276). (К. Милас, П. Ротман и Д. ван Дийк, ред.). Амстердам: Emerald Group Publishing Limited, 2006.

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

[3] Кролциг, Х.-М. Авторегрессии вектора переключения Маркова. Берлин: Спрингер, 1997.

См. также

Объекты

Функции

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