【问题标题】:dlm package in R: What is causing this error: `tsp<-`(`*tmp*`, value = c(1, 200, 1))R 中的 dlm 包:导致此错误的原因:`tsp<-`(`*tmp*`, value = c(1, 200, 1))
【发布时间】: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&lt;-(*tmp*, value = c(1, 200, 1))`。

我试图寻找错误的位置。似乎过滤工作正常,即正确估计了均值和方差,直到代码分配tsp(ans$a) &lt;- ytsp的最后一部分出现错误。

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

【问题讨论】:

  • 很可能我设置的时间序列不正确。抱歉,我在 R 中处理时间序列的经验有限。基本上我在 3 个时间点观察 200x1 向量。
  • 我很想这么说,因为设置tsp(tseries) &lt;- NULL 不会出错。

标签: r time-series


【解决方案1】:

尝试将您的代码更改为:

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))

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

【讨论】:

    猜你喜欢
    • 2014-01-14
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多