看看如何将 BSM 结构时间序列模型或 ARMA 模型表述为 MARSS 模型,也就是多元状态空间模型。这将使您了解如何以多变量状态空间形式改革您的模型。
基本上,你的 x 看起来像
看看 x_2 如何只是一个被强制为 x(t-1) 的虚拟对象?
现在是 y 方程
d 和 a 是你的 D 和 A。我用小写来说明它们是标量。但它们通常可以是矩阵(如果 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)
它可能会抱怨它需要 x0 的初始条件。任何事情都会奏效。 EM 算法对 BFGS 或牛顿算法不敏感。但method="BFGS" 实际上通常更适合这种结构 ts 模型,在这种情况下为 x 选择一个合理的初始条件(我认为在这种情况下合理 = 接近您的数据)。