MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于AR模型与BIC准则的油价时间序列预测

基于AR模型与BIC准则的油价时间序列预测

资 源 简 介

本项目基于MATLAB环境开发,旨在利用时间序列分析中的自回归(AR)方法对国际原油价格波动进行深入分析与趋势预测。系统首先对输入的油价历史数据进行预处理,包括平稳性检验(如ADF检验)和必要的差分处理,以满足AR模型的建模前提。在模型定阶的关键步骤中,采用贝叶斯信息准则(BIC)作为评判标准,通过遍历计算不同滞后阶数下的BIC值并选取最小值,自动确定AR模型的最优阶数,从而在模型拟合优度与复杂度之间取得最佳平衡。确立模型结构后,利用最小二乘法(Least Squares Method)对模型参数进行精确估计,构建最终的预测方程。项目具备样本内拟合与样本外预测功能,能够输出未来特定时段的油价预测值,并提供残差分析(如白噪声检验)以及误差评估指标(如均方误差MSE、平均绝对百分比误差MAPE),通过可视化图表直观展示原始数据、拟合曲线及预测结果的对比。

详 情 说 明

基于AR模型与BIC准则的油价时间序列预测系统

项目简介

本项目是一个基于MATLAB环境开发的自动化时间序列分析与预测系统。旨在通过自回归(AR)模型对国际原油价格波动进行模拟、分析与趋势预测。系统集成了从数据生成、平稳性检验、模型定阶、参数估计到最终预测与评估的全流程功能。其核心特点在于利用贝叶斯信息准则(BIC)自动确定模型的最优阶数,并采用最小二乘法(OLS)进行参数估计,能够在保证模型简洁性的同时实现精确的预测。

功能特性

  • 模拟数据生成:内置数据模拟器,能够生成包含线性趋势、周期波动和随机噪声的非平稳油价模拟数据,便于算法验证。
  • 自动平稳性处理:具备自动差分逻辑,结合ADF检验(或启发式统计检验)自动将非平稳序列转化为平稳序列,最高支持二阶差分。
  • 智能模型定阶:基于BIC(Bayesian Information Criterion)准则,在指定范围内(1-15阶)自动搜索并选取最优AR模型 lag 阶数。
  • 鲁棒的参数估计:不依赖黑盒工具箱,底层实现基于OLS(普通最小二乘法)的参数估计算法。
  • 动态滚动预测:支持样本外(Out-of-sample)迭代步进预测,能够利用前一步的预测值作为输入预测下一步。
  • 综合误差评估:自动计算均方误差 (MSE)、平均绝对误差 (MAE)、平均绝对百分比误差 (MAPE) 及残差方差。
  • 多维可视化分析:生成包含原始数据趋势、BIC定阶曲线、拟合/预测对比图及残差分布分析的综合图表。

系统要求

  • MATLAB:任意较新版本。
  • 工具箱
* 推荐安装 Econometrics Toolbox(用于标准的 adftest)。 * 若未安装工具箱:系统内置了基于均值/方差分段统计特性的备用平稳性检验逻辑,确保代码在无工具箱环境下依然可以运行。

使用方法

直接运行 main 函数即可启动全流程分析。程序将自动执行以下步骤并在控制台输出分析日志,最后弹出综合结果图表。

详细功能与实现逻辑分析

本项目主要包含以下核心处理模块,逻辑严格对应代码实现:

1. 数据模拟与分割

  • 代码首先设定随机种子 rng(42) 以确保结果可复现。
  • 构建模拟油价序列:由线性趋势项(0.05*t)、正弦周期项(cycle)以及累积随机游走噪声(cumsum)叠加而成,模拟真实的非平稳油价数据。
  • 数据集划分为 训练集(前470个样本)和 测试集/预测集(后30个样本,作为未来验证真值)。

2. 平稳性检验与数据预处理

  • 采用 while 循环结构,依次对原始序列、一阶差分序列、二阶差分序列进行平稳性检验。
  • 检验逻辑:优先调用 adftest 函数。如果检测到环境缺失该函数,则自动切换至内置的启发式逻辑(比较序列前后半段的均值漂移是否超过3倍标准差)。
  • 一旦数据通过检验或达到最大差分次数(2次),循环终止,输出用于建模的平稳序列。

3. 基于BIC准则的模型定阶

  • 系统在 115 的范围内遍历可能的滞后阶数 p
  • 对每一个 p,使用OLS训练对应的AR模型并计算残差。
  • BIC计算公式:代码中显式实现了公式 BIC = n * ln(MSE) + k * ln(n),其中 n 为有效样本数,k 为参数数量(p + 截距项)。
  • 系统通过比较所有候选模型的BIC值,自动选择BIC最小的 p 值作为最优阶数 best_p

4. 模型训练与参数估计

  • 核心算法train_ar_ols 子函数手动构建了设计矩阵 X 和响应向量 Y
  • 矩阵求解:利用MATLAB的左除运算符 ` 求解线性方程组 beta = (X'X)^(-1) X'Y,相比直接求逆矩阵具有更高的数值稳定性。
  • 模型包含截距项(Bias)。
  • 样本内拟合还原:利用 restore_diff 函数,将模型在差分域上的拟合值结合原始数据的滞后项,还原为原始量纲的价格,用于可视化对比。

5. 样本外预测 (Forecasting)

  • 迭代机制:采用步进(Step-by-step)预测策略。
  • 特征构造:在每一步预测中,提取历史数据序列末尾的 best_p 个数据构成特征向量 [1; lag_features]
  • 动态更新:计算出的当前步预测值(差分域)会立即加入到历史数据队列中,用于辅助生成下一步的预测(即利用预测出的 t 时刻数据去预测 t+1 时刻)。
  • 预测还原:通过 restore_diff_forecast 函数,利用训练集末尾的真实值作为基准,将预测出的差分序列累加还原为绝对价格序列。

6. 误差分析与可视化

  • 指标计算:系统基于还原后的预测值与真实测试集数据,计算 MSE, MAE, MAPE。同时计算残差序列的方差。
  • 图表展示
1. 原始序列图:展示全量数据及训练/测试分割线。 2. BIC定阶图:绘制BIC值随阶数
p 变化的曲线,并高亮标记最小值点。 3. 预测结果对比:在同一坐标系下展示训练集真值、样本内拟合曲线、测试集真值以及模型预测曲线。 4. 残差分析:双轴图表,左轴展示残差波动序列,右轴展示残差的直方图分布,用于判断残差是否接近白噪声。

关键子函数说明

  • train_ar_ols(data, p):核心求解器。接收时间序列和阶数,构建自回归矩阵,利用普通最小二乘法返回回归系数 beta、残差和拟合值。
  • check_stationarity(x):平稳性检测器。封装了 try-catch 结构,确保在无工具箱情况下的兼容性。
  • restore_diff(...):样本内还原器。处理差分数据的逆运算,特别处理了一阶和二阶差分的基准值回溯逻辑。
  • restore_diff_forecast(...)`:预测还原器。专门用于处理未来时间步的差分还原,依据差分阶数(d=1或d=2),利用训练集末尾点作为初始状态进行累积求和。