首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的dlm包:导致此错误的原因:`tmp<-`(`*tmp*`,value = c(1,200,1))

R中的dlm包:导致此错误的原因:`tmp<-`(`*tmp*`,value = c(1,200,1))
EN

Stack Overflow用户
提问于 2012-01-14 23:05:06
回答 1查看 703关注 0票数 2

我正在使用R中的dlm包对以下模拟数据执行卡尔曼滤波。

代码语言:javascript
复制
## 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的代码都能正常工作。它在值中给出一个错误,即`tsp<-(*tmp*dlmFilter(tseries, kalmanMod) = c(1,200,1))`。

我试着寻找错误的位置。似乎滤波工作得很好,也就是说,可以正确估计均值和方差,直到最后代码分配tsp(ans$a) <- ytsp时,才会出现错误。

还有没有人遇到过这个问题?如果是,那么我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-06-30 01:46:05

尝试将您的代码更改为:

代码语言:javascript
复制
obsTimeSeries <- rbind(rnorm(200, 1, 2), rnorm(200, 2, 2), rnorm(200, 3, 2))

而不是:

代码语言:javascript
复制
obsTimeSeries <- cbind(rnorm(200, 1, 2), rnorm(200, 2, 2), rnorm(200, 3, 2))

您的时间序列设置为200个时间点的3个序列。如果您将其更改为rbind,您将在3个时间点拥有200个系列的ts。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8863182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档