Пакет dlm в R: Что вызывает эту ошибку: `tsp <-` (` * tmp * `, value = c (1, 200, 1)) - PullRequest
2 голосов
/ 14 января 2012

Я использую пакет 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, не произойдет ошибка.

Кто-нибудь еще сталкивался с этой проблемой?Если да, то что я делаю не так.

1 Ответ

1 голос
/ 29 июня 2012

Попробуйте изменить код на:

obsTimeSeries <- rbind(rnorm(200, 1, 2), rnorm(200, 2, 2), rnorm(200, 3, 2))

вместо:

obsTimeSeries <- cbind(rnorm(200, 1, 2), rnorm(200, 2, 2), rnorm(200, 3, 2))

Ваш временной ряд был настроен на 3 серии в 200 временных точках. Если вы измените его на rbind, вы получите серию 200 с 3 временными точками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...