Я использую пакет dlm
в R для выполнения фильтрации Калмана для следующих смоделированных данных.
## 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*
, значение = c (1, 200, 1)) `.
Я пытался найти место ошибки.Кажется, что фильтрация работает нормально, то есть средние значения и дисперсии оцениваются правильно, пока в самой последней части, когда код назначит tsp(ans$a) <- ytsp
, не произойдет ошибка.
Кто-нибудь еще сталкивался с этой проблемой?Если да, то что я делаю не так.