clc;clear;
warning off all
data=xlsread('data.xlsx');
%预报步长
step=24;
TempData=data;
output=data;
%去趋势线
TempData=detrend(TempData);
%趋势函数
TrendData=data-TempData;
%差分,平稳化时间序列
[H,PValue,TestStat,CriticalValue] = adftest(TempData);
difftime=0;
SaveDiffData=[];
while ~H
%差分,平稳化时间序列
SaveDiffData=[SaveDiffData,TempData(1,1)];
TempData=diff(TempData);
%差分次数
difftime=difftime+1;
%adf检验,判断时间序列是否平稳化
[H,PValue,TestStat,CriticalValue] = adftest(TempData);
end
%模型定阶或识别
test = [];
%自回归对应PACF,给定滞后长度上限p和q
for p = 0:5
%移动平均对应ACF
for q = 0:5
if(p + q ~= 0)
m = armax(TempData,[p q]);
%armax(p,q),计算AIC
AIC = aic(m);
test = [test;p q AIC];
end
end
end
for k = 1:size(test,1)
%选择AIC值最小的模型
if test(k,3) == min(test(:,3))
p_test = test(k,1);
q_test = test(k,2);
break;
end
end
%armax(p,q),[p_test q_test]对应AIC值最小
m = armax(TempData,[p_test q_test]);
ARIMA_Predict = predict(m,TempData,step);
ARIMA_Forcast = forecast(m,TempData,step);
PreR=[ARIMA_Predict' ARIMA_Forcast'];
%还原差分
if size(SaveDiffData,2)~=0
for index=size(SaveDiffData,2):-1:1
%差分还原
PreR=cumsum([SaveDiffData(index),PreR]);
end
end
%预测趋势并返回结果
TrendData=TrendData';
mp1=polyfit(1:size(TrendData,2),TrendData,1);
xt=[];
for j=1:step
xt=[xt,size(TrendData,2)+j];
end
TrendResult=polyval(mp1,xt);
ARIMAoutput=[TrendData,TrendResult]+PreR;
ARIMAoutput_Predict=ARIMAoutput(1:end-step)';
ARIMAoutput_Forcast=ARIMAoutput(end-step+1:end)';
%% 数据输出
error=ARIMAoutput_Predict-output;
pererror=error./output;
avererror=sum(abs(error))/length(error);
averpererror=sum(abs(pererror))/length(pererror);
RMSE = sqrt(mean((error).^2));
disp('ARIMA模型预测平均绝对误差MAE');
disp(avererror)
disp('ARIMA模型预测平均绝对误差百分比MAPE');
disp(averpererror)
disp('ARIMA模型预测均方根误差RMSE')
disp(RMSE)
disp('未来年预报')
disp(ARIMAoutput_Forcast)
%% 可视化
figure
plot(ARIMAoutput,':.','linewidth',2);
hold on
plot(data,'k--','linewidth',2);
legend('预测值', '实际值','Location','NorthWest')
title('ARIMA模型预测')
xlabel('时间')
ylabel('结果')
axis tight
hold off
%-------------------------------------------------------------------------------------
figure
subplot(2,1,1)
autocorr(data)
subplot(2,1,2)
parcorr(data)
%-------------------------------------------------------------------------------------
figure()
plot(pererror,'-.','Color',[128 0 255]./255,'linewidth',2)
legend('ARIMA模型预测相对误差','Location','NorthEast','FontName','华文宋体')
title('ARIMA模型相对误差图','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
axis tight
%-------------------------------------------------------------------------------------
figure();
histogram(error);
title(['Error Mean = ' num2str(mean(error)) ', Error StD = ' num2str(std(error))]);
xlabel('Error Histogram');
没有合适的资源?快使用搜索试试~ 我知道了~
【ARIMA时序预测】基于ARIMA实现股价序列预测附matlab代码.zip
共6个文件
png:4个
xlsx:1个
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 166 浏览量
2022-06-23
21:18:14
上传
评论
收藏 120KB ZIP 举报
温馨提示
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
资源推荐
资源详情
资源评论
收起资源包目录
【ARIMA时序预测】基于ARIMA实现股价序列预测附matlab代码.zip (6个子文件)
3.png 38KB
1.png 42KB
4.png 14KB
data.xlsx 9KB
ARIMA.m 3KB
2.png 28KB
共 6 条
- 1
资源评论
- rd863_10012024-06-12果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
天天Matlab科研工作室
- 粉丝: 4w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功