exponenta event banner

Прогнозные наблюдения модели состояния-пространства, содержащей компонент регрессии

В этом примере показано, как оценить регрессионную модель, содержащую компонент регрессии, а затем спрогнозировать наблюдения из подогнанной модели.

Предположим, что интерес представляет линейная зависимость между изменением уровня безработицы и номинальным темпом роста валового национального продукта (нВНП). Предположим далее, что первой разницей уровня безработицы является серия ARMA (1,1). Символично и в форме state-space модель

[x1, tx2, t] = [startstart00] [x1, t-1x2, t-1] + [11] u1, tyt-βZt = x1, t +

где:

  • x1, t - изменение уровня безработицы в момент времени t.

  • x2, t - фиктивное состояние для эффекта MA (1).

  • y1, t - наблюдаемое изменение уровня безработицы, сдуваемое темпами роста nGNP (Zt).

  • u1, t - гауссова серия возмущений состояния, имеющих среднее значение 0 и стандартное отклонение 1.

  • δ t - гауссова серия инноваций в области наблюдений, имеющих среднее значение 0 и стандартное отклонение,

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

load Data_NelsonPlosser

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

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

Несмотря на то, что в этом примере удаляются отсутствующие значения, программа может разместить ряд, содержащий отсутствующие значения в структуре фильтра Калмана.

Чтобы определить, насколько хорошо модель прогнозирует наблюдения, удалите последние 10 наблюдений для сравнения.

numPeriods = 10;                   % Forecast horizon
isY = y(1:end-numPeriods);         % In-sample observations
oosY = y(end-numPeriods+1:end);    % Out-of-sample observations
ISZ = Z(1:end-numPeriods,:);       % In-sample predictors
OOSZ = Z(end-numPeriods+1:end,:);  % Out-of-sample predictors

Укажите матрицы коэффициентов.

A = [NaN NaN; 0 0];
B = [1; 1];
C = [1 0];
D = NaN;

Укажите модель состояния-пространства с помощью ssm.

Mdl = ssm(A,B,C,D);

Оцените параметры модели. Укажите компонент регрессии и его начальное значение для оптимизации с помощью 'Predictors' и 'Beta0' аргументы пары имя-значение соответственно. Ограничьте оценку λ всеми положительными, вещественными числами. Для обеспечения числовой стабильности укажите гессен, когда программное обеспечение вычисляет ковариационную матрицу параметров, используя 'CovMethod' аргумент пары имя-значение.

params0 = [0.3 0.2 0.1]; % Chosen arbitrarily
[EstMdl,estParams] = estimate(Mdl,isY,params0,'Predictors',ISZ,...
    'Beta0',[0.1 0.2],'lb',[-Inf,-Inf,0,-Inf,-Inf],'CovMethod','hessian');
Method: Maximum likelihood (fmincon)
Sample size: 51
Logarithmic  likelihood:     -87.2409
Akaike   info criterion:      184.482
Bayesian info criterion:      194.141
           |      Coeff       Std Err    t Stat     Prob  
----------------------------------------------------------
 c(1)      |  -0.31780       0.19429    -1.63572  0.10190 
 c(2)      |   1.21242       0.48882     2.48031  0.01313 
 c(3)      |   0.45583       0.63930     0.71301  0.47584 
 y <- z(1) |   1.32407       0.26313     5.03201   0      
 y <- z(2) | -24.48733       1.90115   -12.88024   0      
           |                                              
           |    Final State   Std Dev     t Stat    Prob  
 x(1)      |  -0.38117       0.42842    -0.88971  0.37363 
 x(2)      |   0.23402       0.66222     0.35339  0.72380 

EstMdl является ssm и доступ к его свойствам можно получить с помощью точечной нотации.

Прогнозные наблюдения на горизонте прогноза. EstMdl не сохраняет набор данных, поэтому необходимо передать его в соответствующие аргументы пары имя-значение.

[fY,yMSE] = forecast(EstMdl,numPeriods,isY,'Predictors0',ISZ,...
    'PredictorsF',OOSZ,'Beta',estParams(end-1:end));

fY является вектором 10 на 1, содержащим прогнозируемые наблюдения, и yMSE - вектор 10 на 1, содержащий дисперсии прогнозируемых наблюдений.

Получение 95% интервалов прогноза типа Wald. Постройте график прогнозируемых наблюдений с их истинными значениями и интервалами прогноза.

ForecastIntervals(:,1) = fY - 1.96*sqrt(yMSE);
ForecastIntervals(:,2) = fY + 1.96*sqrt(yMSE);

figure
h = plot(dates(end-numPeriods-9:end-numPeriods),isY(end-9:end),'-k',...
    dates(end-numPeriods+1:end),oosY,'-k',...
    dates(end-numPeriods+1:end),fY,'--r',...
    dates(end-numPeriods+1:end),ForecastIntervals,':b',...
    dates(end-numPeriods:end-numPeriods+1),...
    [isY(end)*ones(3,1),[oosY(1);ForecastIntervals(1,:)']],':k',...
    'LineWidth',2);
xlabel('Period')
ylabel('Change in the unemployment rate')
legend(h([1,3,4]),{'Observations','Forecasted responses',...
    '95% forecast intervals'})
title('Observed and Forecasted Changes in the Unemployment Rate')

Figure contains an axes. The axes with title Observed and Forecasted Changes in the Unemployment Rate contains 8 objects of type line. These objects represent Observations, Forecasted responses, 95% forecast intervals.

Эта модель, похоже, хорошо предсказывает изменения в уровне безработицы.

См. также

| | |

Связанные примеры

Подробнее