在R

时间:2016-11-15 14:20:31

标签: r time-series rstudio

我试图在R中填充不同的GARCH模型,并通过AIC值进行比较(最小值是最合适的)。我使用了一个数据集并通过两种方法取出了AIC。

方法1:我获取了股票价格的数据集(截止日期为2010年1月4日至2016年11月9日的s& p cnx nifty数据),获取日志,然后是差异,然后通过自动arima(在记录值的差异,让我们将数据集称为A),发现最佳拟合是MA1,然后使用

得到残差的正方形
Res2<- (MA1$residuals)^2

在方法一中,我使用了语法

garchoutput <- garch(Res2,order=c(1,1))
  CIC<-AIC(garchoutput)

它给我的AIC值为-23682.50。使用的包'tseries'也是如此。

方法2:我使用另一个包即'rugarch',然后使用以下语法

spec <- ugarchspec(variance.model = list( garchOrder = c(1, 1), 
                                     submodel = NULL, 
                                     external.regressors = NULL, 
                                     variance.targeting = FALSE), 

               mean.model     = list(armaOrder = c(0, 1), 
                                     external.regressors = NULL, 
                                     distribution.model = "norm", 
                                     start.pars = list(), 
                                     fixed.pars = list()))

garch <- ugarchfit(spec = spec, data = A, solver.control = list(trace=0))
garch

这里我把它放在A中的数据和模型本身适用于带有ARIMA90,0,1的GARCH(1,1),即MA1。

我收到的输出有很多数据,但它也有AIC值

OUTPUT of Method 2

我想询问的是为什么这两个值存在差异。此外,如果有人也可以向我解释如何使用包装fgarch而不是rugarch以及两者之间的区别,那将是非常有益的。

由于数据可用性,请告知我很难进行分析。 如果问题没有得到妥善处理,请道歉。

1 个答案:

答案 0 :(得分:0)

这可能有点晚了但是这已经在this postthis post中的Cross Validated上得到了回答。

总结上述答案:

某些套餐(例如fgarchrugarchrmgarch)使用AIC的缩放版本,这基本上是&#34;正常& #34; AIC除以时间序列的长度(通常用 n N 表示)。

对于rugarch包,您可以看到AIC here on page 23的规范。

对于您的具体示例,您可以通过以下方式比较两者:

  • rugarch中的AIC与您的时间序列的长度相乘

  • tseries中的AIC与您的时间序列的长度分开,例如:

    CIC = AIC(garchoutput)/length(Res2)
    

还有一件事。据我所知,在将garch模型拟合到数据之前,不需要对拟合的auto.arima对象中的残差进行平方。如果您在tseries模型中使用平方reisidual并在rugarch模型中使用日志返回,则可以比较两组非常不同的数据。