exponenta event banner

Выбрать спецификацию модели State-Space с помощью обратного тестирования

В этом примере показано, как выбрать спецификацию модели state-space с наилучшей прогностической производительностью с помощью скользящего окна. Анализ скользящего окна для явно определенной модели пространства состояний является простым, поэтому в этом примере основное внимание уделяется неявно определенным моделям пространства состояний.

Предположим, что интерес представляет линейная зависимость между изменением наблюдаемого уровня безработицы и номинальным темпом роста валового национального продукта (нВНП). Предположим далее, что вы хотите выбрать между моделью AR (1) или AR (2) для первой разницы уровня безработицы (т.е. штата). То есть

$$\begin{array}{*{20}{l}}
{{\rm{Model 1:}}\begin{array}{*{20}{c}}
{{x_t} = {\phi _{11}}{x_{t - 1}} + {\phi _{12}}{x_{t - 1}} + {\varepsilon _t}}\\
{{y_t} - {\beta _1}{z_t} = {x_t} + {u_t}}
\end{array}}\\
{{\rm{Model 2:}}\begin{array}{*{20}{c}}
{{x_t} = {\phi _{21}}{x_{t - 1}} + {\varepsilon _t}}\\
{{y_t} - {\beta _2}{z_t} = {x_t} + {u_t}}
\end{array}}
\end{array}.$$

  • $\varepsilon_t$ и$u_t$ являются гауссовым процессом со средним значением 0 и дисперсией 1.

  • $x_t$ - истинный уровень безработицы в то время.$t$

  • $y_t$ - наблюдаемая безработица.

  • $z_t$ - ставка nGNP.

Объявление функций rwParamMap.m и rwAR2ParamMap.m, которые определяют, каким образом параметры в params сопоставить с матрицами модели state-space, начальными значениями состояния и типом состояния. Сохраните их в рабочей папке.

function [A,B,C,D,Mean0,Cov0,StateType,deflateY] = rwParamMap(params,y,Z)
%rwParamMap Parameter-to-matrix mapping function for rolling window example
%using ssm
%   The state space model specified by rwParamMap contains a stationary
%   AR(1) state, the observation model includes a regression component, and
%   the variances of the innovation and disturbances are 1. The response y
%   is deflated by the regression component specified by the predictor
%   variables x.
A = params(1);
B = 1;
C = 1;
D = 1;
Mean0 = [];
Cov0 = [];
StateType = 0;
deflateY = y - params(2)*Z;
end

function [A,B,C,D,Mean0,Cov0,StateType,deflateY] = rwAR2ParamMap(params,y,Z)
%rwParamMap Parameter-to-matrix mapping function for rolling window example
%using ssm and specifying an ARMA state model
%   The state space model specified by rwParamMap contains a stationary
%   AR(2) state, the observation model includes a regression component, and
%   the variances of the innovation and disturbances are 1. The response y
%   is deflated by the regression component specified by the predictor
%   variables x.
A = [params(1) params(2); 1 0];
B = [1; 0];
C = [1 0];
D = 1;
Mean0 = [];
Cov0 = [];
StateType = [0 0];
deflateY = y - params(3)*Z;
end

Загрузите набор данных Нельсона-Плоссера, который содержит, среди прочего, уровень безработицы и ряды nGNP.

load Data_NelsonPlosser

Выполните предварительную обработку данных, взяв натуральный логарифм ряда nGNP и первую разность каждого. Также снимите пусковую NaN значения из каждой серии.

isNaN = any(ismissing(DataTable),2); % Flag periods containing NaNs
gnpn = DataTable.GNPN(~isNaN);
ur = DataTable.UR(~isNaN);           % Sample size
Z = diff(log(gnpn));
y = diff(ur);
T = size(y,1);

При неявном определении модели состояния-пространства и данных ответа и предиктора (т. е. y и Z) существуют в MATLAB ® Workspace, то программное обеспечение создает связь из функции отображения параметров в матрицу этих рядов. Если данные не существуют в MATLAB ® Workspace, программа создает модель, но при оценке модели необходимо предоставить данные с использованием соответствующих аргументов пары имя-значение.

Поэтому для выполнения анализа скользящего окна при неявном определении модели «состояние-пространство» и наличии регрессионного компонента необходимо указать модель «состояние-пространство», указывающую индексы данных, подлежащих анализу для каждого окна. Выполните анализ скользящего окна моделируемых данных. Пусть длина перекатываемого окна (mбыть 40 периодами и прогнозным горизонтом (h) 10 периодов. Для этого примера предположим, что временные ряды стабильны (т.е. все параметры инвариантны по времени).

m = 40;
N = T - m + 1;      % Number of rolling windows
h = 10;

fError1 = nan(N,h); % Preallocation
fError2 = nan(N,h);

for j = 1:N;
    idxRW = j:(m + j - h - 1);
		idxFH = (m + j - h):(m + j - 1);
    Mdl1 = ssm(@(c)rwParamMap(c,y(idxRW),Z(idxRW)));
    Mdl2 = ssm(@(c)rwAR2ParamMap(c,y(idxRW),Z(idxRW)));
    [EstMdl1,estParams1] = estimate(Mdl1,y(idxRW),[0.5 -20]',...
        'Display','off');
    [EstMdl2,estParams2] = estimate(Mdl2,y(idxRW),[0.5 0.1 -20]',...
       'Display','off');
    fY1 = forecast(EstMdl1,h,y(idxRW),'Predictors0',Z(idxRW),...
        'PredictorsF',Z(idxFH),'Beta',estParams1(end));
    fY2 = forecast(EstMdl2,h,y(idxRW),'Predictors0',Z(idxRW),...
        'PredictorsF',Z(idxFH),'Beta',estParams2(end));
		fError1(j,:) = y(idxFH) - fY1;
		fError2(j,:) = y(idxFH) - fY2;
end

Вычислите RMSE для каждого перспективного прогноза и сравните их для каждой модели.

fRMSE1 = sqrt(mean(fError1.^2));
fRMSE2 = sqrt(mean(fError2.^2));
fRMSE1 < fRMSE2
ans =

  1x10 logical array

   1   1   1   0   0   0   0   0   0   0

В целом, прогностическая эффективность модели AR (2) лучше, чем модели AR (1).

В качестве альтернативы можно сравнить прогностическую производительность моделей с помощью теста Дибольда-Мариано. Для получения дополнительной информации см. [1].

См. также

| |

Связанные темы