【发布时间】:2012-01-14 15:05:06
【问题描述】:
我在 R 中使用 dlm 包对以下模拟数据执行卡尔曼滤波。
## Multivariate time-series of dimension 200 and length 3
obsTimeSeries <- cbind(rnorm(200, 1, 2), rnorm(200, 2, 2), rnorm(200, 3, 2))
tseries <- ts(obsTimeSeries, frequency = 1)
kalmanBuild <- function (par) {
kalmanMod <- dlm(FF = diag(1, 200), GG = diag(1, 200),
V = exp(par[1]) * diag(1, 200),
W = exp(par[2]) * diag(1, 200),
m0 = rep(0, 200), C0 = 1e100 * diag(1, 200))
kalmanMod
}
kalmanMLE <- dlmMLE(tseries, parm = rep(0, 2), build = kalmanBuild)
kalmanMod <- kalmanBuild(kalmanMLE$par)
kalmanFilt <- dlmFilter (tseries, kalmanMod)
kalmanMod 之前的代码工作正常。它在dlmFilter(tseries, kalmanMod) 中给出错误,说`tsp<-(*tmp*, value = c(1, 200, 1))`。
我试图寻找错误的位置。似乎过滤工作正常,即正确估计了均值和方差,直到代码分配tsp(ans$a) <- ytsp的最后一部分出现错误。
还有其他人遇到过这个问题吗?如果是,那我做错了什么。
【问题讨论】:
-
很可能我设置的时间序列不正确。抱歉,我在 R 中处理时间序列的经验有限。基本上我在 3 个时间点观察 200x1 向量。
-
我很想这么说,因为设置
tsp(tseries) <- NULL不会出错。
标签: r time-series