【已解决,谢谢各位!】我觉得是for循环那块有问题,但也想了好久不知道如何改善代码,请大家赐教,非常感谢!或者问问有没有自己编写的AR-GARCH程序可让我参考学习的顺便还有两个问题我想问问:
1、进行极大似然估计时,程序输出下面这句话是什么意思,对参数估计结果有影响吗
Return code 8: successive function values within relative tolerance limit (reltol)2、如果估计时出现There were 50 or more warnings (use warnings() to see the first 50),但是最终也会输出参数估计结果,而且参数的值也没啥问题,这些警告信息要处理吗,有影响吗
1: In sqrt(ht) : NaNs produced 2: In log(ht) : NaNs produced 3: In sqrt(ht) : NaNs produced ... R输出结果是
Maximum Likelihood estimationNewton-Raphson maximisation, 0 iterations
Return code 100: Initial value out of range.
1. Return code 8: successive function values within relative tolerance limit (reltol)
code 8是个提示信息,而不是报错信息,因为你用maxlik函数进行参数估计,这是在告诉使用者对于目标MLE函数的最优解,寻优已经来到了一个接近稳定的结果了,迭代步数继续增加,似然值的变化也已经非常小,小到介于默认的设定范围内(即你的tolerance),如果出现一直不收敛,变化大于tolerance的情况,那才是不好的。
2. There were 50 or more warnings (use warnings() to see the first 50)
有超过50个以上的警告信息发出,所以提示你进一步用warnings()语句检视他们。
1: In sqrt(ht) : NaNs produced
2: In log(ht) : NaNs produced
3: In sqrt(ht) : NaNs produced
负数不能进行开根和取对数等运算,否则R语言按照设计会返回NaN(非值)的特殊数值对象予以提醒。ht是负责存储modelled volatility的numeric vector,里面的元素按照波动率的设定必须保持非负性,就是不能有负数出现,这一要求需由负责volatility process的GARCH process自身的正定性保证,具体表现为GARCH process中的三个待估计参数要满足各自的取值范围要求,即omega>0,0<alpha,beta<1,,0<alpha+beta<1。你的代码有给出待估计参数的寻优初始值但没有声明各自的寻优取值范围。所以你要给GARCH模型中的三个参数加入lower bound (LB)和upper bound (UB),并将arguments声明进maxlik函数中。你omega、alpha、beta分别设定的初始值是0.2、0、0.8,这样的初始值设定不影响最终寻优但不太快,建议改成0.1、0.15、0.8,这样有助于算法寻优。所以50warnings的出现是在侧面提示你模型的参数取值范围和初始值设定可能需要改进。如果这部分完善后偶有出现这类warnings,一般问题不大,只要最终寻优结果里的参数估计值们符合要求即可。