我有S& P500的每日数据,并在 my_data $ Return 中存储近似收益。我的目标是在这段时间内每天重新安装一个GARCH(1,1)(所以从 startDate 开始,这是01/01/2004),然后计算30天的预测。 换句话说,我需要模拟在我使用的时间段内每个时间点的GARCH(1,1)30天预测。 为了做到这一点,我有功能 myFit 来校准模型并进行预测。然后, apply.fromstart 调用此函数,以便我可以每天从 startDate 开始应用它。
如果我发布这个,R抱怨因为 ugarchfit 需要运行至少100个数据点。
library(quantmod)
library(PerformanceAnalytics)
library(rugarch)
symbolLst <- c("^GSPC","^VIX")
startDate = as.Date("2004-01-01")
myForHorizon = 30
myData <- new.env()
getSymbols(symbolLst, env = myData, src = "yahoo", from = startDate)
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)))
myFit <- function(myVector)
{
myVec <- myVector
fit = ugarchfit(spec=spec, data=myVec)
forecast = ugarchforecast(fit, n.ahead=myForHorizon)
myForecast = sigma(forecast)[myForHorizon,] * sqrt(252) * 100
return(myForecast)
}
forecastVec <- apply.fromstart(my_data$Return, FUN=myFit)
我看到该函数至少需要100个数据但是如何更改函数以避免错误? 我也尝试用以下代码替换最后一行:
forecastVec <- rollapply(my_data$Return, width = 252, FUN=myFit)
但是 R 显示错误,因为解算器无法收敛。另外, rollapply 不允许我使用扩展窗口,这是我想要做的事情。事实上,我在这里申请了一年的滚动窗口。
关于如何在此期间每天获得预测的任何想法?
非常感谢你的帮助。