【问题标题】:Adding EGARCH flavor into a loop over fGARCH-flavor models将 EGARCH 风味添加到 fGARCH 风味模型的循环中
【发布时间】:2017-06-03 01:50:40
【问题描述】:

假设我有以下“for”循环。具体来说,我构建的这段代码首先计算所有指定风格的 ARCH(1) 模型的 AIC,然后计算所述风格的 GARCH(1,1) 模型的 AIC。

library(rugarch)
bchain_2012_logreturns=diff(log(prices))
aic_2012=matrix(NA,14,1)
garch_flavor=c("GARCH","AVGARCH","TGARCH","GJRGARCH","NGARCH","NAGARCH","APARCH")
k=1
for (i in 0:1){
for (j in garch_flavor){
model_2012=ugarchspec(variance.model = list(model="fGARCH", submodel = j, garchOrder = c(1, i)),mean.model = list(armaOrder = c(0, 0)))
modelfit_2012=ugarchfit(spec=model_2012, data=bchain_2012_logreturns, solver="hybrid") 
aic_2012[k,]=infocriteria(modelfit_2012)[1]
k=k+1
}
}

如 R CRAN 上的“rugarch”包小插图中所述(参见链接:https://cran.r-project.org/web/packages/rugarch/vignette/Introduction_to_the_rugarch_package.pdf),“eGARCH”模型风格不包括在 GARCH 系列(即“fGARCH”)子模型中。使用“rugarch”包估计 eGARCH 模型所需的命令如下:

model_2012=ugarchspec(variance.model = list(model="eGARCH",garchOrder = c(1, 1)),mean.model = list(armaOrder = c(0, 0)))
modelfit_2012=ugarchfit(spec=model_2012, data=bchain_2012_logreturns, solver="hybrid") 

我需要同时做的是:

1) 将 eGARCH 估计的最后一个命令集成到循环中,这样我就只有一个命令来计算所有 8 个 GARCH 模型风格的 AIC。

2) 将“统一”循环设置为仅在 (1,1) 阶的 eGARCH 上进行迭代。

我是 R 编程的新手,这对我来说是个不小的问题。

提前谢谢你。

【问题讨论】:

    标签: r loops


    【解决方案1】:

    使用lapply 和你可以做的条件:

    #Combine all model names into one vector
    model_names =c("eGARCH","GARCH","AVGARCH","TGARCH","GJRGARCH","NGARCH","NAGARCH","APARCH")
    
    #If model name equals "eGARCH" use formula1 else formula2, compute for order (1,1) only
    #for other models compute for orders (1,0) and (1,1)
    #calculate AIC for each model and rbind to form a combined data.frame
    
    
    AIC_2012 = do.call(rbind,lapply(model_names,function( x ) {
    
       if ( x=="eGARCH" ){
    
       model_2012_0 = ugarchspec(variance.model = list(model= x,garchOrder = c(1, 1)),mean.model = list(armaOrder = c(0, 0)))
       modelfit_2012_0 =ugarchfit(spec=model_2012_0   , data=bchain_2012_logreturns, solver="hybrid")
    
       DF = data.frame(model_name = x,order= "1,1" ,AIC = infocriteria(modelfit_2012_0)[1])
    
       }else {
    
       model_2012_0 = ugarchspec(variance.model = list(model="fGARCH", submodel = x, garchOrder = c(1, 0)),mean.model = list(armaOrder = c(0, 0)))
       model_2012_1 = ugarchspec(variance.model = list(model="fGARCH", submodel = x, garchOrder = c(1, 1)),mean.model = list(armaOrder = c(0, 0)))
    
       modelfit_2012_0 =ugarchfit(spec=model_2012_0   , data=bchain_2012_logreturns, solver="hybrid")
       modelfit_2012_1 =ugarchfit(spec=model_2012_1, data=bchain_2012_logreturns, solver="hybrid")
    
       DF_0 = data.frame(model_name = x, order= "1,0" , AIC = infocriteria(modelfit_2012_0)[1])
       DF_1 = data.frame(model_name = x, order= "1,1" , AIC = infocriteria(modelfit_2012_1)[1])
    
       DF = rbind(DF_0,DF_1)
    
       }
    
       return(DF)
    
    }))
    

    【讨论】:

    • 是的,我正在尝试解决 if 语句。但对我来说,构建这样一个命令可能太难了。所以谢谢。无论如何,通过运行你的代码,我遇到了这个错误消息“object x not found”。
    • 您是否仍然面临错误,如果是,您可以尝试traceback() 并提及输出
    • 抱歉,我的 CTRL+K 用于 mini-markdown 格式似乎不起作用。这是我得到的错误消息: + else { 错误:意外的'else' in:“ else” > > model_2012_0 = ugarchspec(variance.model = list(model="fGARCH", submodel = x, garchOrder = c(1, 0)),mean.model = list(armaOrder = c(0, 0))) ugarchspec 中的错误(variance.model = list(model = "fGARCH", submodel = x, : object "x" not found
    • 抱歉有错别字,已更正,您现在可以试试。
    • 我现在收到此错误消息:ugarchfit 中的错误(spec = modelfit_2012_1, data = bchain_2012_logreturns, : object "modelfit_2012_1" not found
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多