Посмотрите, как, скажем, модель структурных временных рядов BSM или модель ARMA формулируется как модель MARSS, также известная как многомерная модель в пространстве состояний. Это даст вам представление о том, как преобразовать вашу модель в многомерную форму пространства состояний.
По сути, ваш x будет выглядеть как
\ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t} = \ begin {bmatrix} b & 0 \\ 1 & 0 \ end {bmatrix} \ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t -1} + \ begin {bmatrix} w_1 \\ w_2 \ end {bmatrix} _ {t}, \ text {where} \ begin {bmatrix} w_1 \\ w_2 \ end {bmatrix} _ {t} \ sim MVN \ left (0, \ begin {bmatrix} q & 0 \\ 0 & 0 \ end {bmatrix} \ right)
Видите, как x_2 - это просто пустышка, которая вынуждена быть x (t-1)?
Теперь уравнение y
y_ {t} = \ begin {bmatrix} z & c \ end {bmatrix} \ begin {bmatrix} x_1 \\ x_2 \ end {bmatrix} _ {t} + \ begin {bmatrix} d & a \ end {bmatrix} \ begin {bmatrix } d_t \\ y_ {t-1} \ end {bmatrix} + v_ {t}
d и a - это ваши D и A. Я написал маленьким регистром в spe c, что они скаляры. Но они могут быть матрицами в целом (если, скажем, y многомерно). Ваши входные данные - это d_t и y_ {t-1}. Вы подготавливаете эту матрицу 2x1xT в качестве входных данных.
Будьте осторожны со спецификацией начальных условий. Вероятно, лучше / проще всего установить его на t = 1 и предварительно оценить или использовать диффузный.
Вы можете подогнать эту модель к MARSS. Вы можете использовать любую функцию фильтра Калмана, которая позволит вам передавать входные данные в уравнение y (некоторые делают, некоторые нет). KFAS :: KFS () позволяет использовать функцию SScustom ().
В MARSS список моделей будет выглядеть так
mod.list=list(
B=matrix(list("b",1,0,0),2,2),
U=matrix(0,2,1),
Q=matrix(list("q",0,0,0),2,2),
Z=matrix(c("z", "c"),1,2),
A=matrix(0),
R=matrix("r"),
D=matrix(c("d", "a"),1,2),
x0=matrix(c("x1","x2"),2,1),
tinitx=1,
d=rbind(dt[2:TT],y[1:(TT-1)])
)
dat <- y[2:TT] # since you need y_{t-1} in the d (inputs)
fit <- MARSS(dat, model=mod.list)
Вероятно, он пожалуется, что ему нужны начальные условия для х0. Все будет работать. Алгоритм EM нечувствителен к этому, как алгоритм BFGS или Ньютона. Но method="BFGS"
на самом деле часто лучше для этого типа структурной модели ts, и в этом случае выберите разумное начальное условие для x (разумное = близкое к вашим данным в этом случае, я думаю).