S&P500 の毎日のデータがあり、終値間近のリターンをmy_data$Returnに保存しています。私の目標は、その期間中毎日 GARCH(1,1) を修正し (2004 年 1 月 1 日であるstartDateから開始)、30 日間の予測を計算することです。つまり、使用している期間の各時点で GARCH(1, 1) の 30 日間の予測をシミュレートする必要があります。そのために、モデルを調整して予測を行う関数myFitがあります。この関数はapply.fromstartによって呼び出されるため、 startDateから毎日適用できます。
これを起動すると、ugarchfitを実行するには少なくとも 100 個のデータ ポイントが必要なため、R が文句を言います。
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では拡大ウィンドウを操作できません。これは、私が代わりにやりたいことです。実際、私はここで 1 年間のローリング ウィンドウを申請しています。
期間中に毎日予測を取得する方法について何か考えはありますか?
助けてくれてありがとう。