Прогнозируйте выборки из модели динамической регрессии переключения Маркова
возвращает оптимальные прогнозы точек YF
= forecast(Mdl
,Y
,numPeriods
)YF
полностью заданной модели динамической регрессии Маркова-переключения Mdl
по прогнозному горизонту длины numPeriods
. Прогнозируемые отклики представляют продолжение данных отклика Y
.
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, YF
= forecast(Mdl
,Y
,numPeriods
,Name,Value
)'X',X
задает экзогенные данные в горизонте прогноза для оценки регрессионых компонентов в модели.
Предсказать путь отклика из модели динамической регрессии с двумя состояниями Маркова-переключения для процесса 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
Рассмотрим модель в Вычислении Оптимальных Прогнозов Точек.
Создайте полностью заданную модель для 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 шагами путем возврата предполагаемых отклонений ошибки прогноза. Задайте 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
в командной строке.
Преобразуйте данные в годовую последовательность скоростей путем:
Преобразование данных в квартальный тариф в течение периода оценки
Ежегодный расчет ежеквартальных ставок
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")
Вычислите оптимальные и оцененные прогнозы и соответствующие ковариационные матрицы ошибки прогноза из модели динамической регрессии с тремя состояниями Маркова-переключения для 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
Прогнозная модель, включающая регрессионный компонент
Симулируйте экзогенные данные для трех регрессоров, сгенерировав 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
Mdl
- Полностью заданная модель динамической регрессии Маркова-переключенияmsVAR
объект моделиY
- Данные откликаДанные отклика, которые обеспечивают начальные значения для прогнозов, заданные как numObs
-by- numSeries
числовая матрица.
numObs
- размер выборки. numSeries
- количество переменных отклика (Mdl.NumSeries
).
Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. Столбцы соответствуют отдельным переменным отклика.
Прогнозы YF
представление продолжения Y
.
Типы данных: double
numPeriods
- Прогнозный горизонтГоризонт прогноза или количество временных точек в прогнозном периоде, заданное в виде положительного целого числа.
Типы данных: double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'X',X
использует матрицу X
как экзогенные данные в прогнозном горизонте для оценки регрессионых компонентов в модели.'S0'
- Вероятности начального состоянияИсходные вероятности состояния, из которых можно спрогнозировать, заданные как разделенная разделенными запятой парами, состоящая из 'S0'
и неотрицательный числовой вектор длины numStates
. S0
соответствует концу выборки данных отклика Y
.
forecast
нормализует S0
для создания распределения.
По умолчанию, forecast
применяется smooth
на Y
используя настройки по умолчанию, затем устанавливает S0
к терминальному распределению состояний в данных.
Пример: 'S0',[0.2 0.2 0.6]
Пример: 'S0',[0 1]
задает начальное состояние 2.
Типы данных: double
'X'
- Данные предиктораПредикторные данные в прогнозном горизонте, используемые для оценки регрессионых компонентов во всех подмоделях Mdl
, заданная как разделенная разделенными запятой парами, состоящая из 'X'
и числовую матрицу или вектор камеры из числовых матриц. Первая строка X
содержит наблюдения за периодом после периода, представленного последним наблюдением в Y
.
Чтобы использовать подмножество тех же предикторов в каждом состоянии, задайте X
как матрица с numPreds
столбцы и не менее numPeriods
строки. Столбцы соответствуют отдельным переменным предиктора. Подмодели используют начальные столбцы связанной матрицы, по порядку до количества предикторов подмоделей. Количество столбцов в Beta
свойство Mdl.SubModels
определяет количество экзогенных переменных в регрессионном компоненте подмодели (j
)
. Если количество строк превышает j
numPeriods
, затем forecast
использует самые ранние наблюдения.
Чтобы использовать различные предикторы в каждом состоянии, задайте вектор камеры таких матриц с длиной numStates
.
По умолчанию, forecast
игнорирует компоненты регрессии в Mdl
.
Типы данных: double
'NumPaths'
- Количество выборочных путей для генерации100
(по умолчанию) | положительное целое числоКоличество путей расчета для генерации для симуляции, заданное как разделенная разделенными запятой парами, состоящая из 'NumPaths'
и положительное целое число. Если forecast
возвращает только YF
, он игнорирует NumPaths
.
Пример: 'NumPaths',1000
Типы данных: double
YF
- Точечные прогнозыПрогнозы точек, возвращенные как numPeriods
-by- numSeries
числовая матрица.
Если forecast
возвращает только YF
, тогда прогнозы точек оптимальны. В противном случае, forecast
использует симуляцию Монте-Карло, чтобы оценить прогнозы точек.
EstCov
- Прогнозные ковариации ошибокПрогнозируйте ковариации ошибок, возвращенные как числовой вектор-столбец или числовой массив.
Если подмодели 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.