В этом примере показано, как сгенерировать данные из известной модели, соответствуйте рассеянной модели в пространстве состояний к данным, и затем предскажите состояния и состояния наблюдений от подобранной модели.
Предположим, что скрытый процесс включает AR (2) и модель MA (1). Существует 50 периодов и MA (1), процесс выпадает из модели в течение итоговых 25 периодов. Следовательно, уравнение состояния в течение первых 25 периодов
и в течение последних 25 периодов, это
где и являются Гауссовыми со средним значением 0 и стандартным отклонением 1.
Предположение, что ряд запускается в 1,5 и 1, соответственно, генерирует случайную последовательность 50 наблюдений от и
T = 50; ARMdl = arima('AR',{0.7,-0.2},'Constant',0,'Variance',1); MAMdl = arima('MA',0.6,'Constant',0,'Variance',1); x0 = [1.5 1; 1.5 1]; rng(1); x = [simulate(ARMdl,T,'Y0',x0(:,1)),... [simulate(MAMdl,T/2,'Y0',x0(:,2));nan(T/2,1)]];
Последними 25 значениями для симулированного MA (1) данные является NaN
значения.
Скрытые процессы измеряются с помощью
в течение первых 25 периодов, и
в течение последних 25 периодов, где является Гауссовым со средним значением 0 и стандартным отклонением 1.
Используйте случайный скрытый процесс состояния (x
) и уравнение наблюдения, чтобы сгенерировать наблюдения.
y = 2*nansum(x')'+randn(T,1);
Вместе, скрытые уравнения процесса и наблюдения составляют модель в пространстве состояний. Если коэффициенты являются неизвестными параметрами, модель в пространстве состояний
в течение первых 25 периодов,
в течение периода 26, и
в течение последних 24 периодов.
Запишите функцию, которая задает как параметры в params
сопоставьте с матрицами модели в пространстве состояний, значениями начального состояния и типом состояния.
% Copyright 2015 The MathWorks, Inc. function [A,B,C,D,Mean0,Cov0,StateType] = diffuseAR2MAParamMap(params,T) %diffuseAR2MAParamMap Time-variant diffuse state-space model parameter %mapping function % % This function maps the vector params to the state-space matrices (A, B, % C, and D) and the type of state (StateType). From periods 1 to T/2, the % state model is an AR(2) and an MA(1) model, and the observation model is % the sum of the two states. From periods T/2 + 1 to T, the state model is % just the AR(2) model. The AR(2) model is diffuse. A1 = {[params(1) params(2) 0 0; 1 0 0 0; 0 0 0 params(3); 0 0 0 0]}; B1 = {[1 0; 0 0; 0 1; 0 1]}; C1 = {params(4)*[1 0 1 0]}; Mean0 = []; Cov0 = []; StateType = [2 2 0 0]; A2 = {[params(1) params(2) 0 0; 1 0 0 0]}; B2 = {[1; 0]}; A3 = {[params(1) params(2); 1 0]}; B3 = {[1; 0]}; C3 = {params(5)*[1 0]}; A = [repmat(A1,T/2,1);A2;repmat(A3,(T-2)/2,1)]; B = [repmat(B1,T/2,1);B2;repmat(B3,(T-2)/2,1)]; C = [repmat(C1,T/2,1);repmat(C3,T/2,1)]; D = 1; end
Сохраните этот код как файл с именем diffuseAR2MAParamMap
на вашем пути MATLAB®.
Создайте рассеянную модель в пространстве состояний путем передачи функционального diffuseAR2MAParamMap
как указатель на функцию к dssm
.
Mdl = dssm(@(params)diffuseAR2MAParamMap(params,T));
dssm
неявно создает рассеянную модель в пространстве состояний. Обычно, вы не можете проверить рассеянные модели в пространстве состояний, которые неявно создаются.
Чтобы оценить параметры, передайте наблюдаемые ответы (y
) к estimate
. Задайте произвольный набор положительных начальных значений для неизвестных параметров.
params0 = 0.1*ones(5,1); EstMdl = estimate(Mdl,y,params0);
Method: Maximum likelihood (fminunc) Effective Sample size: 48 Logarithmic likelihood: -110.313 Akaike info criterion: 230.626 Bayesian info criterion: 240.186 | Coeff Std Err t Stat Prob --------------------------------------------------- c(1) | 0.44041 0.27687 1.59069 0.11168 c(2) | 0.03949 0.29585 0.13349 0.89380 c(3) | 0.78364 1.49223 0.52515 0.59948 c(4) | 1.64260 0.66736 2.46133 0.01384 c(5) | 1.90409 0.49374 3.85648 0.00012 | | Final State Std Dev t Stat Prob x(1) | -0.81932 0.46706 -1.75420 0.07940 x(2) | -0.29909 0.45939 -0.65107 0.51500
EstMdl
dssm
модель, содержащая предполагаемые коэффициенты. Поверхности вероятности моделей в пространстве состояний могут содержать локальные максимумы. Поэтому попробуйте несколько начальных значений параметров или рассмотрите использование refine
.
Предскажите наблюдения, и утверждает пять периодов в будущее. Кроме того, получите меры изменчивости для прогнозов.
numPeriods = 5; [fY,yMSE,FX,XMSE] = forecast(EstMdl,numPeriods,y);
forecast
использование EstMdl.A{end}
..., EstMdl.D{end}
предсказывать рассеянную модель в пространстве состояний. fY
и yMSE
numPeriods
- 1 числовой вектор предсказанных наблюдений и отклонения предсказанных наблюдений, соответственно. FX
и XMSE
numPeriods
- 2 матрицы прогнозов состояния и отклонения прогнозов состояния. Столбцы указывают на состояние, и строки указывают на период. Для всех выходных аргументов последняя строка соответствует последнему прогнозу.
Постройте наблюдения, истинные состояния, предсказал наблюдения и прогнозы состояния.
figure; plot(T-10:T,x(T-10:T,1),'-k',T+1:T+numPeriods,FX(:,1),'-r',... T-10:T,y(T-10:T),'--g',T+1:T+numPeriods,fY,'--b',... T:T+1,[y(T),fY(1);x(T,1),FX(1,1)]',':k','LineWidth',2); xlabel('Period') ylabel('States and Observations') legend({'True state values','State forecasts',... 'Observed responses','Forecasted responses'});