Этот пример показывает, как разбить временную шкалу на предопределенные, оценочные и прогнозные периоды, и он показывает, как предоставить соответствующее количество наблюдений, чтобы инициализировать динамическую модель для оценки и прогнозирования.
Рассмотрите оценку и прогнозирование динамической модели, содержащей авторегрессивные и движущиеся средние значения условия, и регрессионый компонент для экзогенных переменных предиктора (для примера, модель ARMAX). Чтобы оценить и спрогнозировать модель, estimate
должны иметь достаточное количество откликов пресса, чтобы инициализировать условия авторегрессии, и у него должно быть достаточно инноваций, чтобы инициализировать условия скользящего среднего значения. Если вы не задаете примитивные отклики, то estimate
backcasts на необходимую сумму, и он устанавливает необходимые предварительные нововведения в 0.
Точно так же, чтобы предсказать ответы от подобранной модели, forecast
должны иметь достаточно примитивных откликов и инноваций. Несмотря на то, что вы должны задать отклики прессования, прогнозирование устанавливает необходимые нововведения presample на 0. Кроме того, регрессионный компонент в прогнозируемом периоде требует прогнозируемых или будущих данных предиктора; без будущих данных предиктора, forecast
отбрасывает регрессионный компонент из модели, когда она генерирует прогнозы.
Хотя поведение по умолчанию estimate
и forecast
являются разумными для большинства рабочих процессов, хорошей практикой является инициализация модели самостоятельно путем разбиения временной шкалы вашей выборки на предварительные, оценочные и прогнозные периоды и предоставления соответствующего количества наблюдений.
Рассмотрим модель ARMAX (1,2), которая предсказывает текущий реальный валовой национальный продукт США (GNPR
) темп с текущим индексом промышленного производства (IPI
), занятость (E
), и реальная заработная плата (WR
) скорости как экзогенные переменные. Разделите временную шкалу выборки на предварительные выборки, оценки и прогнозные периоды. Подгонка модели к выборке оценки и использование прицельных откликов для инициализации авторегрессивного термина. Затем спрогнозируйте GNPR
скорость от подобранной модели. Когда вы прогнозируете:
Задайте отклики в конце периода оценки как предварительная выборка, чтобы инициализировать авторегрессивный термин
Задайте данные предиктора в конце периода оценки как предварительная выборка, чтобы инициализировать компонент скользящего среднего значения. forecast
выводит необходимые инновации из заданных припадков откликов и данных предиктора.
Включите эффекты переменных предиктора в предсказанные отклики путем определения будущих данных предиктора.
Загрузите набор данных Нельсона-Плоссера.
load Data_NelsonPlosser
Для получения дополнительной информации о наборе данных отобразите Description
.
Таблица DataTable
содержит ежегодные измерения, но набор данных является агностическим для временной основы. Чтобы применить временную основу к данным, преобразуйте DataTable
в расписание.
DataTable = table2timetable(DataTable,"RowTimes",datetime(DataTable.Dates,"Format","yyyy"));
Среди серий в DataTable
, некоторые даты начала выборки начинаются в разные годы. DataTable
синхронизирует все серии путем предварительной обработки достаточного количества ведущих NaN
s так, чтобы все серии имели одинаковое количество элементов.
Econometrics Toolbox™ ARIMA model удаляет все строки (временные точки) из данных отклика и предиктора, если отсутствует хотя бы одно наблюдение. Это поведение по умолчанию может усложнить разбиение временной шкалы. Один из способов избежать поведения по умолчанию - удалить все строки, содержащие по крайней мере одно отсутствующее значение, самостоятельно.
Удалите все ведущие NaN
s из данных путем listwise удаления.
varnames = ["GNPR" "IPI" "E" "WR"]; Tbl = rmmissing(DataTable(:,varnames));
Стабилизируйте переменные отклика и предиктора путем преобразования их в возвраты.
StblTbl = varfun(@price2ret,Tbl);
StblTbl.Properties.VariableNames = varnames;
T = size(StblTbl,1) % Total sample size
T = 61
GNPR = StblTbl.GNPR; X = StblTbl{:,varnames(2:end)};
Преобразование в возвраты уменьшает размер выборки на единицу.
Чтобы подогнать модель ARMAX (1,2) к данным, estimate
необходимо инициализировать условное среднее значение первого отклика при помощи предыдущего ответа и двух предыдущих нововведений и . Если вы не задаете значения предварительной выборки, estimate
backcasts, чтобы получить и устанавливает предварительный образец инноваций равным 0, что является их ожидаемым значением.
Создайте векторы индекса для предварительной выборки, оценки и прогноза. Рассмотрим 5-летний прогнозный горизонт.
idxpresample = 1; idxestimate = 2:56; idxforecast = 57:T;
Подбор модели ARMAX (1,2) к данным. Задайте предварительные данные отклика и экзогенные данные оценки-выборки. Поскольку нет модели, из которой можно вывести предварительные примеры инноваций, позволяйте estimate
для установки необходимых предварительных образцов инноваций в 0
.
Mdl = arima(1,0,2); y0est = GNPR(idxpresample); % Presample response data for estimation yest = GNPR(idxestimate); % Response data for estimation XEst = X(idxestimate,:); % Estimation sample exogenous data Mdl = estimate(Mdl,yest,'Y0',y0est,'X',XEst,'Display','off');
Чтобы спрогнозировать модель ARMAX (1,2) в прогнозный период, forecast
необходимо инициализировать первый прогноз при помощи предыдущего ответа и предыдущие два нововведения и . Однако, если вы поставляете достаточно отклика и экзогенных данных, чтобы инициализировать модель, то forecast
выводит инновации для вас. Чтобы предсказать модель ARMAX (1,2), прогноз требует трех ответов и двух наблюдений от экзогенных данных непосредственно перед прогнозным периодом. Когда вы предоставляете предварительные данные для прогнозирования, forecast
использует только последние необходимые наблюдения. Однако этот пример выполняется путем определения только необходимого количества предварительных наблюдений.
Спрогнозируйте подобранную модель ARMAX (1,2) в прогнозный период. Укажите только необходимые наблюдения в конце выборки оценки в качестве предварительных данных. Задайте экзогенные данные прогнозного периода.
y0f = yest((end - 2):end); % Presample response data for forecasting X0f = XEst((end - 1):end,:); % Presample exogenous data for forecasting XF = X(idxforecast,:); % Forecast period exogenous data for model regression component yf = forecast(Mdl,5,y0f,'X0',X0f,'XF',XF);
yf
вектор 5 на 1 прогнозируемых ответов, представляющий продолжение выборки оценки yest
в прогнозный период.
Постройте график последней половины данных отклика и прогнозов.
yrs = year(StblTbl.Time(30:end)); figure; plot(yrs,StblTbl.GNPR(30:end),"b","LineWidth",2); hold on plot(yrs(end-4:end),yf,"r--","LineWidth",2); h = gca; px = yrs([end - 4 end end end - 4]); py = h.YLim([1 1 2 2]); hp = patch(px,py,[0.9 0.9 0.9]); uistack(hp,"bottom"); axis tight title("Real GNP Rate"); legend(["Forecast period" "Observed" "Forecasted"])