我试图在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值
我想询问的是为什么这两个值存在差异。此外,如果有人也可以向我解释如何使用包装fgarch而不是rugarch以及两者之间的区别,那将是非常有益的。
由于数据可用性,请告知我很难进行分析。 如果问题没有得到妥善处理,请道歉。
答案 0 :(得分:0)
这可能有点晚了但是这已经在this post或this post中的Cross Validated上得到了回答。
总结上述答案:
某些套餐(例如fgarch
,rugarch
或rmgarch
)使用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
模型中使用日志返回,则可以比较两组非常不同的数据。