【问题标题】:Fitting Markov Switching Models to data in R将马尔可夫切换模型拟合到 R 中的数据
【发布时间】:2016-05-28 01:18:17
【问题描述】:

我正在尝试使用 R 中的包 MSwM 将两种马尔可夫切换模型拟合到对数返回的时间序列。我正在考虑的模型是只有截距的回归模型和 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 对象,这是一个适合函数参数的类。

【问题讨论】:

    标签: r time-series linear-regression data-fitting markov-models


    【解决方案1】:

    当您将数据传递给 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)
    

    【讨论】:

    • 很好,它有效。对 AR(1) 模型有任何想法吗?通过使用 p=0 函数可以工作,而通过使用 p=1 我收到以下错误消息: 解析错误(文本 = x,keep.source = FALSE)::1:19:意外输入 1:~ .+ftse.ret[2:360]_
    【解决方案2】:

    当您设置 p = 1 时,msmFit 模型会为您添加一个 AR(1) 系数。所以你可以简单地只用intercept (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)
    

    【讨论】:

    • 是不是说如果我想用ARMA(1,1)做马尔可夫切换,我只需要指定p=3?如果没有,你能帮我看看如何在 R 中做到这一点吗?
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2019-09-14
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多