1

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 年間のローリング ウィンドウを申請しています。

期間中に毎日予測を取得する方法について何か考えはありますか?

助けてくれてありがとう。

4

0 に答える 0