【发布时间】:2017-02-08 06:57:58
【问题描述】:
我正在使用 R 中的“KFAS”包来估计带有卡尔曼滤波器的状态空间模型。我的测量和转换方程是:
y_t = Z_t * x_t + \eps_t(测量值)
x_t = T_t * x_{t-1} + R_t * \eta_t(过渡),
与 \eps_t ~ N(0,H_t) 和 \eta_t ~ N(0,Q_t)。
所以,我想估计方差 H_t 和 Q_t,还有 T_t,即 AR(1) 系数。我的代码如下:
library(KFAS)
set.seed(100)
eps <- rt(200, 4, 1)
meas <- as.matrix((arima.sim(n=200, list(ar=0.6), innov = rnorm(200)*sqrt(0.5)) + eps),
ncol=1)
Zt <- 1
Ht <- matrix(NA)
Tt <- matrix(NA)
Rt <- 1
Qt <- matrix(NA)
ss_model <- SSModel(meas ~ -1 + SSMcustom(Z = Zt, T = Tt, R = Rt,
Q = Qt), H = Ht)
fit <- fitSSM(ss_model, inits = c(0,0.6,0), method = 'L-BFGS-B')
但它返回:"is.SSModel(do.call(updatefn, args = c(list(inits, model), update_args)) 中的错误:系统矩阵(不包括 Z)包含 NA 或无限值, 协方差矩阵包含大于 1e+07"的值
如包文件中所述,差异的 NA 定义效果很好。但是,对于 AR 系数,似乎无法做到这一点。有谁知道我该怎么做?
请注意,我知道 SSMarima 函数,它简化了将转换方程定义为 ARIMA 模型的过程。虽然我能够估计 AR(1) 系数。和 Q_t 这样,我仍然无法估计 \eps_t 方差(H_t)。此外,我正在将我的卡尔曼滤波器代码从 EViews 迁移到 R,因此我需要为其他更复杂的模型学习 SSMcustom。
谢谢!
【问题讨论】:
标签: r kalman-filter