時間序列
嘗試估計 R 中的馬爾可夫切換 Var 模型時出錯
我正在嘗試使用命令msvar估計**R中的馬爾可夫切換 VAR。這是我的兩個時間序列的前 10 個條目。我有798。當我嘗試執行它時,我收到一條錯誤消息
a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537) b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209) x <- matrix (NA,10,2) x[,1] <- a x[,2] <- b time.seriesx <- ts(x) markov.switchingx <- msvar(time.seriesx, p = 2, h = 2, niterblkopt = 10)
我收到的錯誤消息如下:
optim(par = c(beta0.it), fn = llf.msar, Y = Yregmat, X = Xregmat, 中的錯誤:“vmmin”中的初始值不是有限的
有誰能幫助我嗎?謝謝
對於任何尋找與 OP 類似問題的答案的人:
MS-VAR 僅適用於固定時間序列(據我所知)。您需要對時間序列進行去趨勢化:通過減去均值、減去線性趨勢、移動平均線、平滑曲線等 - 任何最適合您目前問題的方法或有理論支持的方法。
程式碼給出的錯誤非常神秘,但基本思想是您的案例中的對數損失函式(用於參數的 ML 估計)未初始化,因為模型假設不成立。
看起來,下面的 R 程式碼可以滿足您的需求。我最近才開始使用 MS-VAR 模型,所以對此持保留態度,但這至少是一個實際的答案……(減去線性趨勢提供了一個更容易理解的製度變數,而不是僅僅減去平均值)。
library("MSBVAR") a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537, 2.647573, 2.735317, 2.705269, 2.699783, 2.659748, 2.641353, 2.641825, 2.613648, 2.627755, 2.627383) b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209, 0.9079720, 0.9455602, 0.9426856, 0.9234943, 0.9072791, 0.9194827, 0.9021116, 0.8971606, 0.9047334, 0.8965786) library("pracma") xa = detrend(a) #a - mean(a) #detrend this xb = detrend(b) #b - mean(b) #detrend this x <- matrix (NA,20,2) x[,1] <- xa x[,2] <- xb ts_x <- ts(x) set.seed(1) m_x <- msvar(ts_x, p = 2, h = 2, niterblkopt = 10) fp <- ts(m_x$fp) plot(ts_x) plot(fp)
我認為你的時間序列太短了。你的長度為 10,你用參數估計
niterblkopt = 10
。例如,如果您有兩倍長的時間序列,那麼它可以工作:
library(MSBVAR) a <- c(1.998513, 1.995302, 2.030693, 2.122130, 2.236770, 2.314639, 2.365214, 2.455784, 2.530696, 2.596537) b <- c(0.6421369, 0.6341437, 0.6494933, 0.6760939, 0.7113511, 0.7173038, 0.7250545, 0.7812490, 0.7874657, 0.8275209) x <- matrix (NA,10,2) x[,1] <- a x[,2] <- b x = rbind(x,x) time.seriesx <- ts(x) markov.switchingx <- msvar(time.seriesx, p = 2, h = 2, niterblkopt = 10)
你能用更多的數據嗎?模型的數據似乎太少了——或者至少對於算法來說是這樣。