2012-01-14 15 views
2

私は、カルマンフィルタを実行するためにRのdlmパッケージを使用しています。シミュレートされたデータに従う。Rのdlmパッケージ:このエラーの原因: `tsp <-`(` * tmp * `、value = c(1,200,1))

## 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を割り当てた最後の部分でエラーが発生するまで、フィルタリングがうまく動作する、つまり平均と分散が正しく推定されるようです。

他に誰かがこの問題に直面していますか?はいの場合、私は間違って何をしています。

+0

時系列を間違って設定している可能性があります。私はRで時系列を扱う経験が限られていることを申し訳ありません。基本的に私は3つの時点で200x1ベクトルを観測しています。 – suncoolsu

+0

'tsp(tseries)< - NULL'を設定するとエラーが発生しないので、これを言うと思います。 – suncoolsu

答えて

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が得られます。

関連する問題