資源簡介
ARIMA模型MATLAB實(shí)現(xiàn)代碼,通過一批現(xiàn)有數(shù)據(jù)(本代碼中batch=100),向后預(yù)測后n個(gè)數(shù)據(jù),n越大,預(yù)測效果越差。代碼可以直接運(yùn)行,有實(shí)例支持,可以很快上手。壓縮包包括以下三部分:主程序(ARIMA_main.m),輔助函數(shù)(Inverse_BoxCox.m),測試數(shù)據(jù)(testdata.xls)。

代碼片段和文件信息
%ARIMA,是通過一批現(xiàn)有數(shù)據(jù)(本代碼中batch=100),向后預(yù)測后n個(gè)數(shù)據(jù),這個(gè)n越大,預(yù)測效果越差
[data]?=?xlsread(‘testdata‘);
%?設(shè)置數(shù)據(jù)塊大小
batch?=?100;
%預(yù)測數(shù)量
predict_num?=?10;
%?Box_Cox轉(zhuǎn)換
[transdatalambda]=boxcox(data(:1));
%?ARIMA模型處理???利用前100真實(shí)數(shù)據(jù)??滑動(dòng)窗口預(yù)測
Predict=transdata(1:batch1);
for?iii=1:predict_num???????????????????????????
????Data=Predict(iii:iii+batch-11);????????????????????%滑動(dòng)窗口大小為100
????SourceData=Data(1:batch1);????????????????%前100個(gè)訓(xùn)練集
????step=1;?????????????????????????????????????????????%向后預(yù)測一個(gè)(效果比較好)
????TempData=SourceData;
????TempData=detrend(TempData);???????????%去趨勢線
????TrendData=SourceData-TempData;????????%趨勢函數(shù)
%?????--------差分,平穩(wěn)化時(shí)間序列---------
????H=adftest(TempData);
????difftime=0;
????SaveDiffData=[];
????while?~H
??????SaveDiffData=[SaveDiffDataTempData(11)];
??????TempData=diff(TempData);???????????%差分,平穩(wěn)化時(shí)間序列
??????difftime=difftime+1;???????????????%差分次數(shù)
??????H=adftest(TempData);???????????????%adf檢驗(yàn),判斷時(shí)間序列是否平穩(wěn)化
????end
%?????---------模型定階或識(shí)別------------
????u?=?iddata(TempData);
????test?=?[];
????for?p?=?1:5??????????????????????????%自回歸對應(yīng)PACF給定滯后長度上限p和q,一般取為T/10、ln(T)或T^(1/2)這里取T/10=12
??????for?q?=?1:5????????????????????????%移動(dòng)平均對應(yīng)ACF
????????m?=?armax(u[p?q]);????????
????????AIC?=?aic(m);????????????????????%armax(pq)計(jì)算AIC
????????test?=?[test;p?q?AIC];
??????end
????end
????for?k?=?1:size(test1)
??????if?test(k3)?==?min(test(:3))?????%選擇AIC值最小的模型
????????p_test?=?test(k1);
????????q_test?=?test(k2);
????????break;
??????end
????end
%????----------1階預(yù)測-----------------
????TempData=[TempData;zeros(step1)];
????n=iddata(TempData);?
????m?=?armax(u[p_test?q_test]);????????%armax(pq)[p_test?q_test]對應(yīng)AIC值最小,自動(dòng)回歸滑動(dòng)平均模型?????????
????P1=predict(mn1);
????PreR=P1.OutputData;
????PreR=PreR‘;
%????----------還原差分-----------------
????if?size(SaveDiffData2)~=0
??????for?index=size(SaveDiffData2):-1:1
????????PreR=cumsum([SaveDiffData(index)PreR]);
??????end
????end?
%????----------預(yù)測趨勢并返回結(jié)果--------
????mp1=polyfit([1:size(TrendData‘2)]TrendData‘1);
????xt=[];
????for?j=1:step
??????xt=[xtsize(TrendData‘2)+j];
????end
????TrendResult=polyval(mp1xt);
????PreData=TrendResult+PreR(size(SourceData‘2)+1:size(PreR2));
????tempx=[TrendData‘TrendResult]+PreR;????%?tempx為預(yù)測結(jié)果
????Predict(100+iii1)=tempx(1101);
end
%?求逆變換?%?最后的預(yù)測值在Inverse_transdata中
Inverse_transdata=Inverse_BoxCox(Predictlambda);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????2671??2020-05-13?23:14??ARIMA\ARIMA_main.m
?????文件????????203??2017-10-27?09:08??ARIMA\Inverse_BoxCox.m
?????文件??????23040??2020-05-13?22:55??ARIMA\testdata.xls
?????目錄??????????0??2020-05-13?23:14??ARIMA
-----------?---------??----------?-----??----
????????????????25914????????????????????4
- 上一篇:ID3的MATLAB實(shí)現(xiàn)
- 下一篇:matlab 石頭剪刀布
評(píng)論
共有 條評(píng)論