我有大约五年的一年期利率数据。我想为这个利率创建一个模型,我得出的结论是ARMA(3,2)与GARCH(1,1)是合适的。因此,我使用下面的代码来估算。
> stibor1ydarmagarch=garchFit(formula=~arma(3,2)+garch(1,1),
data=stibor1yd,
cond.dist="std",
trace=FALSE)
这很好用,我得到了很好的估计。但是,当涉及预测时,我收到一个错误。有人知道为什么我会得到错误以及如何解决它?
> predict(stibor1ydarmagarch, n.ahead=10)
Error in a_vec[(i - 1):(i - u2)] : only 0's may be mixed with negative subscripts
答案 0 :(得分:4)
此问题似乎与较旧的帖子重复,但不包含答案:R error when using predict() function with class = fGarch
错误源于(i - 1)
或(i - u2)
变为负数的情况,因此索引类似于-1:2,这是不允许的。
通过getMethod("predict","fGARCH")
检查拟合对象的预测方法后,看起来错误发生在此处(省略了相关部分):
a_vec <- rep(0, (n.ahead))
u2 <- length(ar)
a_vec[1] = ar[1] + ma[1]
if ((n.ahead - 1) > 1) {
for (i in 2:(n.ahead - 1)) {
a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)]
}
}
因为i
总是大于1,所以错误发生是因为
(i - u2) < 0 <==> i < u2 <==> i < length(ar)
这有什么意义吗?对我来说它没有,因为看起来如果你的模型的ar部分大于2,这总是会产生错误。
代码有点奇怪,因为a_vec[i]
是标量和
ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + ...
可以是长度大于1的向量。
编辑:
预测函数中存在错误或者未记录的限制可以预测哪种模型,因为即使fGarch
手册中的示例在稍微修改时也会出错:
set.seed(123)
fit = garchFit(~arma(2,0)+garch(1,1), data = garchSim(), trace = FALSE)
predict(fit, n.ahead = 4)
meanForecast meanError standardDeviation
1 -7.512452e-04 0.004161189 0.004161189
2 -1.107497e-03 0.003958535 0.003878321
3 2.617933e-04 0.003782362 0.003665391
4 6.264252e-05 0.003616971 0.003507209
Warning message:
In a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + :
number of items to replace is not a multiple of replacement length
基于Changelog of fGarch package几年前这个问题似乎得到纠正,但显然它已经重新浮出水面,或者从未得到妥善解决:
2009-11-05 chalabi
* R/methods-predict.R: small changes in predict,fGARCH-method to
correct its output when n.ahead=1 since addition of conditional
errors.
我建议你联系包裹的维护者。