我正在尝试估计一个状态空间模型,以使用 R 从输出数据 (y) 和失业率 (u) 中获得潜在输出 (y_p)。该模型已在 EViews 中编程,我只想重现其结果. 该模型由以下方程描述(带有时间索引):
信号方程:
(i) y_t = y_p_t + eps_y_t
(ii) u_t = beta_0 + beta_1(y_t-y_p_t) + eps_u_t
状态方程:
(iii) y_p_t = y_p_(t-1) + g_(t-1)
(iv) g_t = g_(t-1) + eps_g_t
我尝试了不同的软件包。但是存在不同的问题:要么不允许截取(dlm 包),要么没有更平滑的功能(FKF 包)。所以我确实有两个问题,其中任何一个都可以解决我的问题。第一个(问题 1a 和 1b)与 dlm 包中适当的状态空间模型的规范有关;第二个(问题 2)涉及可以与 FKF 包一起使用的平滑函数。
- 问题 1a。在 dlm-package 中不允许截取。因此,我使用 JGG 矩阵将 beta_0 和输出间隙 (gap_t = y_t-y_p_t) 放入状态向量中以引用 y_t 数据,然后尝试通过最大似然估计 beta_1。但是,我没有得到合理的结果。
# States: x(1) y_pot, x(2) growth, x(3) y_gap, x(4) beta_0
# Signal: y(1) y, y(2) u
beta_1 <- -0.2
beta_0 <- 0.03
# Measurement
FF <- matrix(c(1, 0, 0, 0,
0, beta_1, 0, 1), 2, 4)
# Transition
GG <- matrix(c(1, 0, -1, 0,
1, 1, -1, 0,
0, 0, 1, 0,
0, 0, 0, beta_0), 4, 4)
JGG <- matrix(c(0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 1, 0,
0, 0, 0, 0), 4, 4)
# Covariance Transition
W <- diag(1e-2, 4)
# Covariance Measurement
V <- matrix(c(1e-2, 0,
0, 1e-2), 2, 2)
m0 <- c(11.4, 0.04, 0, 0.03)
C0 <- diag(1, 4) # 1e-7
C0[3,3] <- 0.1
C0[4,4] <- 0.1
# Now bring them into the dlm-object
myMod <- dlm(FF = FF,
GG = GG,
JGG = JGG,
X = dataMLE,
W = W,
V = V,
m0 = m0,
C0 = C0)
buildFun <- function(theta) {
V(myMod)[1,1] <- lambda_ss*exp(theta[1])
V(myMod)[2,2] <- exp(theta[2])
W(myMod)[2,2] <- exp(theta[1])
FF(myMod)[2,3] <- theta[3]
return(myMod)
}
myMod.mle <- dlmMLE(y = dataMLE, parm = c(-10, -10, -.2),
build = buildFun,
lower = c(rep(-1e6, 3)),
upper = c(rep(1e6, 3)),
control = list(trace = 1, REPORT = 5, maxit = 1000))
- 问题 1b。我还尝试使用状态向量 x(1) y_pot、x(2) growth、x(3) beta_1、x(4) beta_0,并使用 JFF 获取输出间隙的 y_t 数据-计算......但这种方法也没有成功。
问题 1:您知道在 dlm 包中实现这个相当简单的模型的方法吗?问题一方面是截断,另一方面是 beta_1 估计与输出间隙的相互作用,输出间隙本身由一个状态变量和一个外部信号组成。
- 一个更有希望的方法似乎是使用 FKF 包。但是,此包中没有提供更平滑的功能。
问题 2:有没有办法获得平滑输出而不是使用 FKF 包的卡尔曼滤波输出?
我非常感谢在这个问题上的任何帮助!
十分感谢!
塞缪尔