В этом примере показано, как спрогнозировать изменяющуюся во времени модель пространства состояний, в которой происходит изменение режима в прогнозном горизонте.
Предположим, что вы наблюдали многомерный процесс для 75 периодов, и вы хотите спрогнозировать процесс 25 периодов в будущее. Кроме того, предположим, что можно задать процесс как модель пространства состояний. Для периодов с 1 по 50 модель пространства состояний имеет одно состояние: стационарную модель AR (2) с постоянным членом. В период 51 модель пространства состояний включает в себя случайную прогулку. Состояния наблюдаются непредвзято, но с аддитивной ошибкой измерения. Символически модель является
Для периодов с 1 по 50 процесс случайной ходьбы не находится в модели.
Задайте матрицы коэффициентов в выборке.
A1 = {[0.5 0.2 1; 1 0 0; 0 0 1]}; % A for periods 1 - 50 A2 = {[0.5 0.2 1; 1 0 0; 0 0 1; 0 0 0]}; % A for period 51 A3 = {[0.5 0.2 1 0; 1 0 0 0; 0 0 1 0; 0 0 0 1]}; % A for periods 51 - 75 A = [repmat(A1,50,1); A2; repmat(A3,24,1)]; B1 = {[0.1; 0; 0]}; % B for periods 1 - 50 B3 = {[0.1 0; 0 0; 0 0; 0 0.5]}; % B for periods 51 - 75 B = [repmat(B1,50,1); repmat(B3,25,1)]; C1 = {[1 0 0]}; % C for periods 1 - 50 C3 = {[1 0 0 0; 0 0 0 1]}; % C for periods 51 - 75 C = [repmat(C1,50,1); repmat(C3,25,1)]; D1 = {0.3}; % D for periods 1 - 50 D3 = {[0.3 0; 0 0.2]}; % D for periods 51 - 75 D = [repmat(D1,50,1); repmat(D3,25,1)];
Задайте модель пространства состояний, и начальное состояние означает и ковариационную матрицу. Лучшая практика задать типы каждого состояния, используя 'StateType'
аргумент пары "имя-значение". Задайте только параметры начального состояния для трех состояний, которые запускают модель пространства состояний.
Mean0 = [1/(1-0.5-0.2); 1/(1-0.5-0.2); 1]; Cov0 = [0.02 0.01 0; 0.01 0.02 0; 0 0 0]; StateType = [0; 0; 1]; Mdl = ssm(A,B,C,D,'Mean0',Mean0,'Cov0',Cov0,'StateType',StateType)
Mdl = State-space model type: ssm State vector length: Time-varying Observation vector length: Time-varying State disturbance vector length: Time-varying Observation innovation vector length: Time-varying Sample size supported by model: 75 State variables: x1, x2,... State disturbances: u1, u2,... Observation series: y1, y2,... Observation innovations: e1, e2,... State equations of period 1, 2, 3,..., 50: x1(t) = (0.50)x1(t-1) + (0.20)x2(t-1) + x3(t-1) + (0.10)u1(t) x2(t) = x1(t-1) x3(t) = x3(t-1) State equations of period 51: x1(t) = (0.50)x1(t-1) + (0.20)x2(t-1) + x3(t-1) + (0.10)u1(t) x2(t) = x1(t-1) x3(t) = x3(t-1) x4(t) = (0.50)u2(t) State equations of period 52, 53, 54,..., 75: x1(t) = (0.50)x1(t-1) + (0.20)x2(t-1) + x3(t-1) + (0.10)u1(t) x2(t) = x1(t-1) x3(t) = x3(t-1) x4(t) = x4(t-1) + (0.50)u2(t) Observation equation of period 1, 2, 3,..., 50: y1(t) = x1(t) + (0.30)e1(t) Observation equations of period 51, 52, 53,..., 75: y1(t) = x1(t) + (0.30)e1(t) y2(t) = x4(t) + (0.20)e2(t) Initial state distribution: Initial state means x1 x2 x3 3.33 3.33 1 Initial state covariance matrix x1 x2 x3 x1 0.02 0.01 0 x2 0.01 0.02 0 x3 0 0 0 State types x1 x2 x3 Stationary Stationary Constant
Mdl
является изменяющимся во времени, ssm
модель без неизвестных параметров. Программа устанавливает среднее начальное состояние и ковариационные значения на основе типа состояния.
Симулируйте 75 наблюдений за Mdl
.
rng(1); % For reproducibility
Y = simulate(Mdl,75);
y
является вектором камеры 75 на 1. Камеры с 1 по 50 содержат скаляры, а камеры с 51 по 75 содержат числовые векторы 2 на 1. Камера j соответствует наблюдениям периода j, заданным моделью наблюдения.
Постройте график симулированных откликов.
y1 = cell2mat(Y(51:75)); % Observations for periods 1 - 50 d1 = cell2mat(Y(51:75)); y2 = [d1(((1:25)*2)-1) d1((1:25)*2)]; % Observations for periods 51 - 75 figure plot(1:75,[y1;y2(:,1)],'-k',1:75,[nan(50,1);y2(:,2)],'-r','LineWidth',2') title('In-sample Observations') ylabel('Observations') xlabel('Period') legend({'AR(2)','Random walk'})
Предположим, что случайный процесс обхода выпадает из пространства состояний в 20-м периоде прогнозируемого горизонта.
Задайте матрицы коэффициентов для периода прогноза.
A4 = {[0.5 0.2 1 0; 1 0 0 0; 0 0 1 0; 0 0 0 1]}; % A for periods 76 - 95 A5 = {[0.5 0.2 1 0; 1 0 0 0; 0 0 1 0]}; % A for period 96 A6 = {[0.5 0.2 1; 1 0 0; 0 0 1]}; % A for periods 97 - 100 fhA = [repmat(A4,20,1); A5; repmat(A6,4,1)]; B4 = {[0.1 0; 0 0; 0 0; 0 0.5]}; % B for periods 76 - 95 B6 = {[0.1; 0; 0]}; % B for periods 96 - 100 fhB = [repmat(B4,20,1); repmat(B6,5,1)]; C4 = {[1 0 0 0; 0 0 0 1]}; % C for periods 76 - 95 C6 = {[1 0 0]}; % C for periods 96 - 100 fhC = [repmat(C4,20,1); repmat(C6,5,1)]; D4 = {[0.3 0; 0 0.2]}; % D for periods 76 - 95 D6 = {0.3}; % D for periods 96 - 100 fhD = [repmat(D4,20,1); repmat(D6,5,1)];
Прогнозные наблюдения за прогнозным горизонтом.
FY = forecast(Mdl,25,Y,'A',fhA,'B',fhB,'C',fhC,'D',fhD);
FY
является вектором камеры 25 на 1. Камеры с 1 по 20 содержат числовые векторы 2 на 1, а камеры с 51 по 75 содержат скаляры. Камера j соответствует наблюдениям периода j, заданным прогнозно-горизонтальной моделью наблюдения.
Постройте график прогнозов с помощью выборочных наблюдений.
d2 = cell2mat(FY(1:20)); FY1 = [d2(((1:20)*2)-1) d2((1:20)*2)]; % Forecasts for periods 76 - 95 FY2 = cell2mat(FY(21:25)); % Forecasts for periods 96 - 100 figure plot(1:75,[y1;y2(:,1)],'-k',1:75,[nan(50,1);y2(:,2)],'-r',... 76:100,[FY1(:,1); FY2],'.-k',76:100,[FY1(:,2); nan(5,1)],'.-r',... 75:76,[y2(end,1) FY1(1,1)],':k',75:76,[y2(end,2) FY1(1,2)],':r',... 'LineWidth',2') title('In-sample and Forecasted Observations') ylabel('Observations') xlabel('Period') xlim([50,100]) legend({'In-sample AR(2)','In-sample random walk',... 'AR(2), forecasted observations',... 'Random walk, forecasted observations'},'Location','Best')%% Title
estimate
| forecast
| refine
| ssm