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','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")

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