arima模型预测 matlab,ARIMA模型预测问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

y=[301.125

461.90625

647.25

458.71875

192.1875

168.5625

69.75

74.71875

47.0625

37.875

19.3125

42.65625

38.8125

23.34375

93

46.125

2.8125

0

0

0

0

0

16.78125

20.4375

31.96875

23.8125

37.96875

17.8125

68.8125

321

227.71875

143.71875

144.46875

148.21875

150.1875

146.625

];

Data=y;

SourceData=Data(1:24,1);

step=12;

TempData=SourceData;

TempData=detrend(TempData);%消除时间序列中的线性趋势项

TrendData=SourceData-TempData;

%--------差分,平稳化时间序列---------

H=adftest(TempData);

difftime=0;

SaveDiffData=[];

while ~H

SaveDiffData=[SaveDiffData,TempData(1,1)];

TempData=diff(TempData); %差分,平稳化时间序列

difftime=difftime+1; %差分次数

H=adftest(TempData); %adf检验,判断时间序列是否平稳化

end

%---------模型定阶或识别--------------

u = iddata(TempData);

test = [];

for p = 0:5 %自回归对应PACF,给定滞后长度上限p和q,一般取为T/10、ln(T)或T^(1/2),这里取T/10=12

for q = 0:5 %移动平均对应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阶预测-----------------

TempData=[TempData;zeros(step,1)];

n=iddata(TempData);

m = armax(u,[p_test q_test]);

%m = armax(u(1:ls),[p_test q_test]);

%armax(p,q),[p_test q_test]对应AIC值最小,自动回归滑动平均模型

P1=predict(m,n,1);

PreR=P1.OutputData;

PreR=PreR';

%----------还原差分-----------------

if size(SaveDiffData,2)~=0

for index=size(SaveDiffData,2):-1:1

PreR=cumsum([SaveDiffData(index),PreR]);

end

end

%-------------------预测趋势并返回结果----------------

mp1=polyfit([1:size(TrendData',2)],TrendData',1);

xt=[];

for j=1:step

xt=[xt,size(TrendData',2)+j];

end

TrendResult=polyval(mp1,xt);

PreData=TrendResult+PreR(size(SourceData',2)+1:size(PreR,2));

tempx=[TrendData',TrendResult]+PreR; % tempx为预测结果

plot(tempx,'r');

hold on

plot(Data,'b')

legend('预测输出','期望输出')

最后出来的图后十几个数据明显不对呀,误差太大了吧,求教!

667c49c274514a79683c7a57cab36c72.png

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值