MATLAB时间序列分析与预测工具箱
项目介绍
本项目是一个自包含的MATLAB时间序列分析工具箱,旨在演示从数据生成、预处理、特征分析、模型构建到文档生成的完整工作流。该项目不完全依赖MATLAB官方的高级时规工具箱函数,而是底层实现了多种核心算法(如Durbin-Levinson递归算法计算PACF、最小二乘法估计AR模型参数等),适合用于教学、算法研究及轻量级的时间序列处理任务。
功能特性
本项目在单一脚本中实现了以下核心功能:
- 模拟数据生成:能够生成包含线性趋势、正弦季节性波动、高斯白噪声以及随机缺失值的复杂时间序列数据。
- 数据预处理:提供缺失值线性插值填补、移动平均平滑以及基于多项式拟合的趋势项提取。
- 统计特征分析:底层实现了自相关函数(ACF)和偏自相关函数(PACF)的计算与绘图。
- 频域分析:基于快速傅里叶变换(FFT)的功率谱密度分析,用于识别数据的频率特征。
- 模型构建与预测:
*
AR模型:支持AR(p)模型的自动定阶(基于AIC准则)、参数估计(最小二乘法)及多步迭代预测。
*
GARCH模型:实现了GARCH(1,1)模型的波动率估计,采用极大似然估计法(MLE)。
- 可视化展示:生成包含6个子图的综合分析面板,直观展示分析全过程及结果。
- 文档自动生成:程序运行结束后自动生成交互式HTML说明文档。
系统要求
- MATLAB R2016b 或更高版本。
- 推荐安装 Optimization Toolbox(用于GARCH参数优化的
fmincon 函数),若未安装,脚本会自动回退到 fminsearch 进行求解。
使用方法
直接运行
main.m 脚本即可。程序将依次执行数据生成、处理、分析和建模,弹出综合分析图表窗口,并在当前目录下生成
toolbox_doc.html 帮助文档。
详细功能实现与算法原理
本项目代码完全通过 main.m 实现,主要包含主控流程与多个底层子函数,具体实现逻辑如下:
1. 数据生成与加载
程序首先通过
generate_sample_data 函数构建模拟环境。它通过叠加线性增长趋势($0.05t$)、周期为24的正弦波季节项和标准正态分布噪声合成原始数据。为了模拟真实世界的脏数据,随机选取5%的数据点将其置为
NaN(缺失值)。
2. 数据预处理
预处理模块
preprocess_data 执行以下三步操作:
- 缺失值填补:识别数据中的
NaN 索引,利用非缺失值的线性插值(interp1)填补空白,确保序列连续。 - 数据平滑:使用窗口大小为5的移动平均滤波器(卷积操作)去除高频噪声。
- 趋势提取:利用
polyfit 进行一次多项式拟合,提取数据的线性趋势分量。
3. 特征统计 (ACF/PACF)
本模块不使用MATLAB内置函数,而是手动实现了统计算法:
- 自相关系数 (calc_acf):通过计算不同滞后阶数(Lags)下的协方差与方差之比得到。
- 偏自相关系数 (calc_pacf):采用了经典的 Durbin-Levinson 递归算法。该算法通过之前的低阶AR系数递归计算当前阶数的偏相关系数,不仅计算效率高,且直观反映了PACF的数学定义。
4. 谱分析
spectral_analysis 函数将时域信号转换为频域信号。首先对数据去均值(去除直流分量),然后应用快速傅里叶变换(FFT)。计算结果经过归一化处理转换为单边功率谱密度,用于直观展示信号的主要频率成分。
5. AR模型自动定阶与预测
auto_ar_model 函数实现了一个完整的自回归模型构建流程:
- 模型识别:遍历 $p=1$ 到 $p=5$ 的不同阶数。
- 参数估计:对于每一个 $p$,构建设计矩阵 $X$,使用 普通最小二乘法 (OLS) 解析解 $beta = (X^TX)^{-1}X^TY$ 快速估算自回归系数。
- AIC定阶:计算赤池信息准则(AIC),选取AIC值最小的模型作为最佳模型。
- 预测:利用最佳模型的系数,通过迭代方式进行未来10步的单步滚动预测。
6. GARCH(1,1) 波动率估计
estimate_garch 函数用于分析AR模型残差的异方差性:
- 模型定义:设定 GARCH(1,1) 波动率方程 $sigma_t^2 = omega + alpha epsilon_{t-1}^2 + beta sigma_{t-1}^2$。
- 目标函数:构建负对数似然函数(Negative Log-Likelihood),假设残差服从正态分布。
- 非线性优化:使用
fmincon(有约束优化)在参数空间 $omega>0, alpha ge 0, beta ge 0, alpha+beta<1$ 内寻找最优参数。如果环境中没有优化工具箱,利用 try-catch 机制自动降级使用无约束的 fminsearch。
7. HTML文档生成
generate_html_doc 函数将CSS样式表和HTML标记硬编码在MATLAB字符串中,并通过文件I/O操作写入
toolbox_doc.html。生成的文档包含项目说明及函数接口定义,便于用户离线查看。