В этом примере показано, как сглаживать состояния независимого от времени, модель в пространстве состояний, которая содержит компонент регрессии.
Предположим, что линейное соотношение между изменением в уровне безработицы и темпом роста номинального валового национального продукта (nGNP) представляет интерес. Предположим далее, что первым различием уровня безработицы является серия ARMA(1,1). Символически, и в форме пространства состояний, модель
где:
изменение в уровне безработицы во время t.
фиктивное состояние для MA (1) эффект.
наблюдаемое изменение в уровне безработицы, выкачиваемом темпом роста nGNP ().
серия Gaussian воздействий состояния, имеющих среднее значение 0 и стандартное отклонение 1.
серия Gaussian инноваций наблюдения, имеющих среднее значение 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);
Хотя этот пример удаляет отсутствующие значения, программное обеспечение может вместить ряд, содержащий отсутствующие значения в среде Фильтра Калмана.
Задайте содействующие матрицы.
A = [NaN NaN; 0 0]; B = [1; 1]; C = [1 0]; D = NaN;
Задайте модель в пространстве состояний с помощью ssm
.
Mdl = ssm(A,B,C,D);
Оцените параметры модели. Задайте компонент регрессии и его начальное значение для оптимизации с помощью 'Predictors'
и 'Beta0'
аргументы пары "имя-значение", соответственно. Ограничьте оценку ко всем положительным, вещественным числам.
params0 = [0.2 0.2 0.1]; [EstMdl,estParams] = estimate(Mdl,y,params0,'Predictors',Z,... 'Beta0',[0.2 0.1],'lb',[-Inf,-Inf,0,-Inf,-Inf]);
Method: Maximum likelihood (fmincon) Sample size: 61 Logarithmic likelihood: -99.7245 Akaike info criterion: 209.449 Bayesian info criterion: 220.003 | Coeff Std Err t Stat Prob ---------------------------------------------------------- c(1) | -0.34098 0.29608 -1.15164 0.24948 c(2) | 1.05003 0.41377 2.53771 0.01116 c(3) | 0.48592 0.36790 1.32079 0.18658 y <- z(1) | 1.36121 0.22338 6.09358 0 y <- z(2) | -24.46711 1.60018 -15.29024 0 | | Final State Std Dev t Stat Prob x(1) | 1.01264 0.44690 2.26592 0.02346 x(2) | 0.77718 0.58917 1.31912 0.18713
EstMdl
ssm
модель, и можно получить доступ к ее свойствам с помощью записи через точку.
Сглаживайте состояния. EstMdl
не хранит данные или коэффициенты регрессии, таким образом, необходимо передать в них в использовании аргументов пары "имя-значение" 'Predictors'
и 'Beta'
, соответственно. Постройте сглаживавшие состояния. Вспомните, что первое состояние является изменением в уровне безработицы, и второе состояние помогает создать первое.
SmoothedX = smooth(EstMdl,y,'Predictors',Z,'Beta',estParams(end-1:end)); figure plot(dates(end-(T-1)+1:end),SmoothedX(:,1)); xlabel('Period') ylabel('Change in the unemployment rate') title('Smoothed Change in the Unemployment Rate')
ssm
| estimate
| filter
| smooth