时间序列-拟合马尔可夫切换模型的数据在R



我试图使用r中的MSwM包将两种马尔可夫切换模型拟合到log-return的时间序列。我正在考虑的模型是一个只有截距的回归模型和一个AR(1)模型。下面是我使用的代码:

library(tseries)
#Prices
ftse<-get.hist.quote(instrument="^FTSE", start="1984-01-03", end="2014-01-01", quote="AdjClose", compression="m")
#Log-returns
ftse.ret<-diff(log(ftse))
library(MSwM)
#Model with only intercept
mod<-lm(ftse.ret ~ 1)
#Fit regime-switching model
msmFit(mod, k=2, sw=c(T,T), p=0, data=ftse.ret)
#AR(1) model
mod<-lm(ftse.ret[2:360] ~ ftse.ret[1:359])
#Fit regime-switching model
msmFit(mod, k=2, sw=c(T,T,T), p=1, data=ftse.ret)

在这两种情况下,函数msmFit不起作用。下面是我得到的错误信息:

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘msmFit’ for signature ‘"lm", "numeric", "logical", "numeric", "zoo", "missing"’

我不知道为什么我得到这个错误消息,因为我使用作为msmFit函数的第一个参数,lm对象,这是一个适合函数参数的类。

在将数据传递给msmFit时,有一个不必要的参数,这是不必要的。数据已经包含在mod中。下面的代码为我运行:

library(tseries)
#Prices
ftse<-get.hist.quote(instrument="^FTSE", start="1984-01-03", end="2014-01-01", quote="AdjClose",     compression="m")
#Log-returns
ftse.ret<-diff(log(ftse))
library(MSwM)
#Model with only intercept
mod<-lm(ftse.ret ~ 1)
#Fit regime-switching model
mod.mswm=msmFit(mod, k=2, sw=c(T,T), p=0)
plot(mod.mswm)

当您设置p = 1时,msmFit模型将为您添加AR(1)系数。因此,您可以简单地传入只有截距(mod)的模型,并设置p = 1。下面的代码应该可以工作。

library(tseries)
#Prices 
ftse<-get.hist.quote(instrument="^FTSE", start="1984-01-03", end="2014-01-01", quote="AdjClose", compression="m")
#Log-returns
ftse.ret<-diff(log(ftse))
library(MSwM)
#Model with only intercept
mod<-lm(ftse.ret ~ 1)
#Fit regime-switching model
msm_intercept <- msmFit(mod, k=2, sw=c(T,T), p=0)
#Fit regime-switching model with AR(1) model
msm_ar1 <- msmFit(mod, k=2, sw=c(T,T,T), p=1)

最新更新