适用平台:Matlab2021版及以上
时间序列预测的主要目标是基于历史数据模式来预测未来的值。常见的研究方向包括:电池SOC、股票预测、碳价预测、轴承寿命预测、气温、降雨、风速等气象变量预测、道路、铁路或航空的交通流量预测等等!一个模型可以嵌套多种研究方向。广泛发表于高水平期刊上
ARIMA模型:即自回归差分移动平均模型(AutoRegressive Integrated Moving Average Model),是一种广泛用于时间序列数据分析和预测的统计模型。ARIMA模型结合了三种主要的时间序列建模方法:自回归(AR)、差分(I)和移动平均(MA)。下面将简单地解释每个部分:
1自回归(AR):
自回归部分表示当前值与其之前的一系列值(滞后值)之间的关系。可以理解为,当前的数据点是基于它之前的一个或多个数据点的加权和。这里的“自”指的是自身,即当前值是它自己过去值的函数。
2差分(I):
差分是为了使时间序列数据达到平稳状态。平稳意味着时间序列的统计特性(如均值和方差)不随时间变化。在实际应用中,许多时间序列数据(如新能源波动数据、股票价格)会表现出趋势或季节性模式,这会使数据非平稳。通过差分一次或多次,可以消除这些时间依赖的结构,从而简化后续的分析和预测。
3移动平均(MA):
移动平均部分考虑了模型中的随机误差项及其滞后值的线性组合。这意味着当前的观测值受到一系列过去误差项的影响。这一部分可以帮助模型捕捉时间序列中的随机波动,即使在滞后的误差中也可能存在某种影响或模式。
将这三部分结合起来,ARIMA模型就能够描述和预测具有复杂模式的时间序列数据,包括那些显示出明显趋势或季节性的数据。这使得ARIMA模型成为金融、机械、电气、新能源等预测等领域中非常强大的工具。
数据格式:
-
功能:时间序列预测是用于预测随时间变化的数据的未来趋势,通常用于处理时间相关的数据,如股票预测、房价预测、天气变化等。
-
数据格式:由时刻1—4的值预测时刻5的值,由时刻2—5的值预测时刻6的值,由时刻3—6的值预测时刻7的值,以此类推。
预测结果:
部分代码
%% 来自公众号:《创新优化及预测代码》
%% 清空环境变量
warning off % 关闭警告信息
close all % 关闭所有打开的图窗
clear % 清空所有变量
clc % 清空命令行界面
%% 导入数据
data=xlsread('示例数据.xlsx'); % 从xlsx文件中读取数据
step=24; % 设置预报步长
TempData=data; % 临时存储原始数据
output=data; % 输出数据初始化
% 去趋势处理
TempData=detrend(TempData); % 从数据中移除线性趋势
% 计算趋势函数
TrendData=data-TempData; % 计算原数据和去趋势后数据的差值
% 差分,平稳化时间序列
[H,PValue,TestStat,CriticalValue] = adftest(TempData); % 使用ADF测试判断序列是否平稳
difftime=0; % 初始化差分次数计数器
SaveDiffData=[]; % 初始化存储差分数据的数组
while ~H
% 差分,平稳化时间序列
SaveDiffData=[SaveDiffData,TempData(1,1)]; % 保存每次差分的首个数据点
TempData=diff(TempData); % 对数据进行差分
difftime=difftime+1; % 差分次数加一
[H,PValue,TestStat,CriticalValue] = adftest(TempData); % 再次进行ADF测试
end
% 模型定阶或识别
test = [];
% 自回归对应PACF,给定滞后长度上限p和q
for p = 0:5
for q = 0:5
if(p + q ~= 0)
m = armax(TempData,[p q]); % 使用ARMAX模型估计参数
AIC = aic(m); % 计算AIC值用于模型比较
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模型进行预测
ARIMA_Forcast = forecast(m,TempData,step); % 使用ARIMA模型进行预测
PreR=[ARIMA_Predict' ARIMA_Forcast']; % 结合预测结果
部分图片来源于网络,侵权联系删除!
关注小编会不定期推送高创新型、高质量的学习资料、文章程序代码,为你的科研加油助力!