В этом примере показано, как оценить регрессионную модель, содержащую компонент регрессии, а затем спрогнозировать наблюдения из подогнанной модели.
Предположим, что интерес представляет линейная зависимость между изменением уровня безработицы и номинальным темпом роста валового национального продукта (нВНП). Предположим далее, что первой разницей уровня безработицы является серия ARMA (1,1). Символично и в форме state-space модель
tyt-βZt = x1, t +
где:
t - изменение уровня безработицы в момент времени t.
t - фиктивное состояние для эффекта MA (1).
t - наблюдаемое изменение уровня безработицы, сдуваемое темпами роста nGNP Zt).
t - гауссова серия возмущений состояния, имеющих среднее значение 0 и стандартное отклонение 1.
- гауссова серия инноваций в области наблюдений, имеющих среднее значение 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')

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