想用aicbic确定ARMA的阶数,但用这个确定的阶数时会出现如下错误
Error using arima/validateModel (line 1314)
The non-seasonal moving average polynomial is non-invertible.
Error in arima/setLagOp (line 391)
Mdl = validateModel(Mdl);
Error in arima/estimate (line 1183)
Mdl = setLagOp(Mdl, 'MA' , LagOp([1 coefficients(iMA)' ], 'Lags', [0 LagsMA ]));
解决方法:
论坛有人说把p,q的阶数设置小点,我有300个数据呢,最后阶数只能设置为pMax=5; qMax=2; pMax设置为6都出错,如果这样的话,就感觉太小了,而且和eviews自相关函数和偏自相关函数的结果相差好大,能有人帮看下原因吗,谢谢
代码如下:
LogL = zeros(pMax,qMax);%pMax,qMax来自于自相关、偏自相关序列图显著阶数最(较)大值
SumPQ = LogL;
for p = 1:pMax
for q = 1:qMax
Mdl = arima(p,0,q);
[fit,~,LogL(p,q)] = estimate(Mdl,X,'print',false);%X是待检验序列
SumPQ(p,q) = p+q;
end
end
logL = reshape(LogL,pMax*qMax,1);
numParams = reshape(SumPQ,pMax*qMax,1) + 1;
[~,bic] = aicbic(logL,numParams,500);
BIC = reshape(bic,pMax,qMax);
minBIC = min(bic)
[BICbestP,BICbestQ] = find(BIC == minBIC)
Mdl = arima(BICbestP,0,BICbestQ);
%[fit,~,~] = estimate(Mdl,lnR,'print',false)