forecast

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

Предскажите путь к ответу из переключающей Маркова модели динамической регрессии с двумя состояниями для 1D процесса ответа. Этот пример использует произвольные значения параметров в генерирующем данные процессе (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

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

Создайте полностью заданную модель для 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

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 шагов вперед прогнозы точки Монте-Карло путем возвращения предполагаемых дисперсий ошибки прогноза. Задайте 1 000 демонстрационных путей для симуляции Монте-Карло. Обработайте наблюдения y как предварительная выборка для прогноза.

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

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

Считайте переключающую Маркова модель динамической регрессии с двумя состояниями послевоенных США действительным темпом роста GDP. Модели представили оценки параметра в [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 требует, чтобы наблюдения инициализировали модель. Загрузите набор данных GDP США.

load Data_GDP

Data содержит ежеквартальные измерения США действительный GDP в период 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

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

Предскажите уровни GDP США

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

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

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

Постройте наблюдаемый пересчитанный на год уровень GDP от 1 980 с прогнозами модели.

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

Вычислите оптимальные и предполагаемые прогнозы и соответствующие ковариационные матрицы ошибки прогноза из переключающей Маркова модели динамической регрессии с тремя состояниями для 2D процесса ответа 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

Предскажите модель включая компонент регрессии

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

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

свернуть все

Полностью заданная переключающая Маркова модель динамической регрессии, заданная как 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- 1 вектор. Если Mdl.SubModels представляйте многомерные модели VARX, EstCov numSeries- numSeries- numPeriods массив.

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

Алгоритмы

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

Ссылки

[1] Chauvet, M. и Дж. Д. Гамильтон. "Датируя Поворотные моменты Делового цикла". В Нелинейном Анализе Деловых циклов (Вклады в Экономический анализ, Объем 276). C. Милас, П. Ротмен, и Д. ван Дейк, редакторы). Амстердам: Emerald Group Publishing Limited, 2006.

[2] Гамильтон, J. D. "Анализ Временных рядов Согласно Изменениям в Режиме". Журнал Эконометрики. Издание 45, 1990, стр 39–70.

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

Смотрите также

Объекты

Функции

Введенный в R2019b

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