MATLAB 时间序列预测方法实战
算法运行环境为 MATLAB R2021B,执行几种时间序列预测方法,包括:
- Autoregression (AR)
- Moving Average
- Autoregressive Moving Average
- Autoregressive Integrated Moving Average (ARIMA)
- Seasonal Autoregressive Integrated Moving-Average (SARIMA)
- Seasonal Autoregressive Integrated Moving Average with Exogenous Regressors (SARIMAX)
- Vector Autoregression (VAR)
- GARCH Model
- Glostan, Jagannathan and Runkle GARCH Model

数据准备
首先准备测试数据。假设手头有个股票收盘价序列,长度 500 天:
data = cumsum(randn(500,1)*0.5 + 0.01) + 50; % 模拟股票价格
plot(data);
title('模拟股票价格');
这串随机数生成器造的数据有微弱正趋势,标准差 0.5,初始值 50。cumsum 让数据有持续性特征,符合金融时间序列特性。

AR 模型实战
自回归的核心就是拿历史数据当预测依据。比如用前 3 天的数据预测明天:
Mdl = arima('ARLags',1:3);
EstMdl = estimate(Mdl, data);
[YF, YMSE] = forecast(EstMdl, 5, data); % 预测未来 5 天
这里'ARLags'参数指定滞后阶数,1:3 表示用 t-1,t-2,t-3 时刻的值。estimate 函数会返回模型参数估计值,注意 MATLAB 自动做了标准化处理。预测时 YMSE 是预测方差,可以画置信区间。

ARIMA 进阶版
加上差分处理非平稳数据更稳健:
Mdl = arima(2,1,1); % AR 阶 2,差分阶 1,MA 阶 1
EstMdl = estimate(Mdl, data);
[YF, YMSE] = forecast(EstMdl, 5, 'Y0', data);
差分阶数 1 表示做一阶差分消除趋势。模型训练时注意看命令行输出的参数显著性,p 值小于 0.05 的项才有保留价值。如果 MA 项系数不显著,可以降阶试试。





