2012-01-14 52 views
2

我在R中使用dlm包進行卡爾曼濾波仿真數據。dlm package in R:是什麼導致這個錯誤:`tsp <-`(`* tmp *`,value = c(1,2,1,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*,value = c(1,200,1))``。

我試圖尋找錯誤的位置。看起來,過濾工作正常,也就是說,手段和差異估計是正確的,直到在代碼分配tsp(ans$a) <- ytsp的最後一部分,錯誤發生。

有沒有其他人面臨這個問題?如果是的話,那麼我做錯了什麼。

+0

我可能很有可能錯誤地設置了時間序列。我很抱歉,我在處理R中的時間序列方面經驗有限。基本上我在3個時間點觀察200x1向量。 – suncoolsu 2012-01-14 15:06:36

+0

我很想說這個,因爲設置'tsp(tseries)< - NULL'不會給出錯誤。 – suncoolsu 2012-01-14 15:12:30

回答

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個系列。如果你改變它,你會有3個時間點200個系列的ts。

相關問題