大家帮我看看predict函数的问题
			 
			 
			
		
		
		
			
			最近接触到了用ARIMA模型进行时间序列预测,其中Xtrain是200个训练数据,Xfor是100个待预测的数据,程序如下: 
  SourceData=[Xtrain;Xfor]; 
   nfor=size(Xfor,1); %待预测的数据个数 
   step=1;               %1步预测 
  TempData=SourceData; 
     %----------差分,平稳化时间序列--------- 
    [H,PValue,TestStat,CriticalValue] = dfARDTest(TempData,[],0.05,'T'); 
    SaveDiffData=[]; 
    while ~H 
        SaveDiffData=[SaveDiffData;TempData(1,1)];%保存去掉的数 
      TempData=diff(TempData);%差分,平稳化时间序列 
      TempData2=TempData; 
      [H,PValue,TestStat,CriticalValue] = dfARDTest(TempData,[],0.05,'T');%adf检验,判断时间序列是否平稳化 
   end 
  %------------模型定阶或识别------------ 
    u = iddata(TempData(1:end-nfor));%训练数据 
    test = []; 
    for p = 1:10    %自回归对应PACF,给定滞后长度上限p和q 
       for q = 1:10   %移动平均对应ACF 
           m = armax(u,[p q]);         
           AIC = aic(m);  %armax(p,q),计算AIC 
           test = [test;p q AIC]; 
       end 
     end 
     for k = 1:size(test,1) %没太理解。。。 
      if test(k,3) == min(test(:,3)) %选择AIC值最小的模型 
        p_test = test(k,1); 
           q_test = test(k,2); 
           break; 
         end 
       end 
  %----------------1阶预测----------------- 
     n=iddata(TempData); 
     m = armax(u,[p_test q_test]);  %armax(p,q),[p_test q_test]对应AIC值最小 
    P1=predict(m,n,step); 
      PreR=P1.OutputData; 
   
  %----------------还原差分----------------- 
     if size(SaveDiffData,2)~=0 
        for index=size(SaveDiffData,1):-1:1 
              PreR=cumsum([SaveDiffData(index);PreR]); 
        end 
     end  
     tempx=PreR(size(SourceData,1)+1:size(PreR,1)); 
想请教各位大侠predict函数的原理是什么,我看了matlabhelp里的解释,还是不明白,这样编程的话结果是不是每次做一步预测的时候都用到了前一步的真实值?因为如果我把Xfor全部置0的话结果就不一样了,说明predict函数在预报的时候使用到了前一步的真实值,可对于一次性预报后面100个点的情况,这100个点的值都是未知的呀,只能在每次做一步预测的时候使用前一步的预测值,要怎么编呢?matlab有没有实现这一功能的自带函数呢?如果自己编的话,是不是要设一个循环,让数据每次向前滚动一个数,并且每次都要重新用armax函数重新建模,在用predict函数对下一时刻进行预报??我试着这样编了一下,发现效率太低,请问各位大侠这样做对不对,有没有更好的办法?谢谢大家了!!!
		 
		
		
		
		
		
		
			
				__________________ 
				growing up can be so strange,but some things will never change.
			 
		
		
		
		
	 |