GARCH预测扩展窗口:rollapplyr()和apply.fromstart()

时间:2014-09-19 17:41:35

标签: r quantmod performanceanalytics volatility rollapply

我的目的是使用扩展窗口中的数据使用GARCH(1,1)生成预测。每天新的返回进入数据集,我将重做GARCH拟合和预测。函数myFit执行此操作但现在我需要传递一个返回窗口,该窗口每天都在增加。 两种方法是apply.fromstart()和rollapplyr()。

在下面的代码中,我决定在收集至少100个回报后开始滚动计算,因为这是ugarchforecast()执行预测所需的最小数据量。

最后两行调用myFit,窗口为100,它们在扩展窗口中应用该函数。如果设置如下,我期望apply.fromstart()和rollapplyr()都提供相同的数据。毕竟他们将相同的功能(myFit)应用于相同的数据。不幸的是,只有第一个值相同,因此预测不再对齐。

library(quantmod)
library(PerformanceAnalytics)
library(rugarch)
source('~/Dropbox/myFit.R')

symbolLst <- c("^GSPC","^VIX")
startDate = as.Date("2004-01-01")
endDate = as.Date("2004-06-01")
myForHorizon = 22
myLag = 10

myData <- new.env() 
getSymbols(symbolLst, env = myData, src = "yahoo", from = startDate, to = endDate)

args = eapply(myData, 
              function(x){OHLC(x)})

my_data = do.call(cbind,
                  args,
                  envir = myData)

my_data$Return <- ClCl(myData$GSPC) 
my_data$Return[is.na(my_data$Return)] <- 0

spec = ugarchspec(
  variance.model=list(garchOrder=c(1,1)))

forecastVec1 <- apply.fromstart(my_data$Return, FUN=myFit, gap = 100)
forecastVec2 <- rollapplyr(my_data$Return, width = seq(100, 104, 1), FUN=myFit)

这是myFit

myFit <- function(myVector)
{
  #library(rugarch)
  myVec <- myVector
  tryCatch(
{
  fit = ugarchfit(spec=spec, data=myVec)
  forecast = ugarchforecast(fit, n.ahead=myForHorizon)
  myForecast = sigma(forecast)[myForHorizon,] * sqrt(252) * 100
  print(myForecast)
  return(myForecast)
},
warning = function(warn) FALSE,
error = function(err) FALSE
  )
}

这些是forecastVec1的元素(因此使用apply.fromstart()时的预测):

[1] 12.35142
[1] 12.1961
[1] 12.45849
[1] 11.95578
[1] 12.08832

这些是forecastVec2的元素(使用rollapplyr()):

[1] 12.35142
[1] 12.15684
[1] 12.10457
[1] 11.89805
[1] 11.94493

如上所述,只有第一个元素是相同的。我在rollapplyr()中应用增加的窗口的方式可能是错误的?我正在传递宽度向量,所以我希望在每次迭代时,函数将使用100,然后是101,然后是102 ... 103,最后是104.这应该是相同的逻辑,然后是apply.fromstart()因为我设置了gap = 100,它应该每次迭代增加窗口1。

你能帮我找错吗?谢谢。

0 个答案:

没有答案