時間序列

嘗試估計 R 中的馬爾可夫切換 Var 模型時出錯

  • March 25, 2017

我正在嘗試使用命令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)

你能用更多的數據嗎?模型的數據似乎太少了——或者至少對於算法來說是這樣。

引用自:https://quant.stackexchange.com/questions/24657