MATLAB自回归预测模型实现方案

简介: MATLAB自回归预测模型实现方案

AR建模与预测工作流程

%% 1. 数据准备:生成/加载并可视化数据
% 假设您有自己的时间序列数据 `myData`
% 这里以模拟的平稳时间序列为例
rng(0); % 设置随机种子确保可重复性
T = 200; % 数据长度
y = 0.7*randn(T,1); % 生成白噪声
for t = 3:T
    y(t) = 0.5*y(t-1) - 0.3*y(t-2) + y(t); % 生成AR(2)过程
end

figure;
plot(y, 'LineWidth', 1.5);
title('原始时间序列数据');
xlabel('时间点'); ylabel('数值');
grid on;

%% 2. 平稳性检验与处理
% 进行ADF单位根检验(需要Econometric Toolbox的adftest函数)
% 如果检验结果为0(非平稳),则需要进行差分
try
    [h, pValue] = adftest(y, 'Model', 'ARD');
    if ~h
        disp('数据非平稳,进行一阶差分...');
        y_diff = diff(y);
        y = y_diff; % 用差分后的数据继续分析
    else
        disp('数据通过平稳性检验。');
    end
catch
    disp('未找到adftest函数,请确保已安装Econometric Toolbox。');
    % 作为备选,可以可视化观察或手动差分
    % y = diff(y); 
end

% 去中心化:减去均值(对平稳序列很重要)
y = y - mean(y);

%% 3. 模型识别:确定AR阶数(p)
% 方法一:绘制自相关(ACF)和偏自相关(PACF)图
figure;
subplot(2,1,1);
autocorr(y); title('样本自相关函数 (ACF)');
subplot(2,1,2);
parcorr(y); title('样本偏自相关函数 (PACF)'); 
% PACF在滞后p阶后“截尾”,即为建议的阶数

% 方法二:使用AIC/BIC信息准则自动定阶(更客观)
maxP = 10; % 设定最大搜索阶数
[aic, bic] = aicbic_custom(y, maxP); % 需自定义aicbic_custom函数,下方提供
[~, bestP_aic] = min(aic);
[~, bestP_bic] = min(bic);
fprintf('AIC建议最佳阶数 p = %d\n', bestP_aic-1); % 阶数从0开始
fprintf('BIC建议最佳阶数 p = %d\n', bestP_bic-1);

%% 4. 模型估计与拟合
p = bestP_bic - 1; % 选择BIC建议的阶数(通常更简洁)
% 使用aryule函数(Yule-Walker方法)估计AR参数
[ar_coeff, noise_var] = aryule(y, p);
ar_coeff = -ar_coeff(2:end); % 提取真正的自回归系数(去掉首项1% 构建AR模型对象(如果使用System Identification Toolbox)
if exist('ar', 'file') == 2
    sys = ar(y, p, 'yw');
    compare(sys, y, 10); % 对比模型拟合效果
end

%% 5. 模型诊断:检验残差是否为白噪声
% 计算残差
y_pred = filter([0; ar_coeff], 1, y); % 单步预测
residuals = y(p+1:end) - y_pred(p+1:end); % 预测残差

% 残差的自相关检验
figure;
subplot(2,1,1);
autocorr(residuals);
title('残差序列的自相关图'); 
% 如果大部分自相关系数在置信区间内,则通过

subplot(2,1,2);
histogram(residuals, 20);
title('残差直方图'); 
xlabel('残差'); ylabel('频数');

% Ljung-Box Q检验(更严格的统计检验)
[h_lbq, p_lbq] = lbqtest(residuals, 'Lags', [10, 15]);
if h_lbq
    fprintf('警告:残差可能不是白噪声 (p-value = %.4f)。考虑增加模型阶数或检查模型类型。\n', p_lbq);
else
    fprintf('残差通过白噪声检验 (p-value = %.4f)。\n', p_lbq);
end

%% 6. 预测与可视化
nForecast = 20; % 预测未来20个点
[y_forecast, y_forecast_mse] = forecast_ar(y, ar_coeff, nForecast); % 需自定义forecast_ar函数

% 计算95%置信区间
ci_bound = 1.96 * sqrt(y_forecast_mse);
lower_bound = y_forecast - ci_bound;
upper_bound = y_forecast + ci_bound;

% 绘制结果
figure;
hold on;
plot(1:length(y), y, 'b-', 'LineWidth', 1.2, 'DisplayName', '历史数据');
forecast_start = length(y) + 1;
forecast_x = forecast_start:forecast_start+nForecast-1;
plot(forecast_x, y_forecast, 'r--', 'LineWidth', 1.5, 'DisplayName', '预测值');
fill([forecast_x, fliplr(forecast_x)], ...
     [lower_bound', fliplr(upper_bound')], ...
     'r', 'FaceAlpha', 0.2, 'EdgeColor', 'none', 'DisplayName', '95%置信区间');
xline(length(y), 'k--', 'HandleVisibility', 'off');
legend('show', 'Location', 'best');
title('AR模型样本外预测');
xlabel('时间点'); ylabel('数值');
grid on;
hold off;

%% 自定义函数1:计算AIC和BIC值
function [aic, bic] = aicbic_custom(y, maxP)
    T = length(y);
    aic = zeros(maxP+1, 1);
    bic = zeros(maxP+1, 1);
    for p = 0:maxP
        [coeff, noise_var] = aryule(y, p);
        % 计算对数似然值(假设高斯分布)
        logL = -T/2 * log(2*pi*noise_var) - (T-p)/(2);
        % 计算AIC和BIC
        aic(p+1) = -2*logL + 2*(p+1); % 参数个数为 p+1 (包括方差)
        bic(p+1) = -2*logL + (p+1)*log(T-p);
    end
end

%% 自定义函数2:AR模型预测
function [y_forecast, forecast_mse] = forecast_ar(y, ar_coeff, nForecast)
    p = length(ar_coeff);
    y_extended = [y; zeros(nForecast, 1)]; % 扩展向量以存放预测值
    forecast_mse = zeros(nForecast, 1);
    noise_var = var(y - filter([0; ar_coeff], 1, y)); % 估计噪声方差

    for t = length(y)+1 : length(y)+nForecast
        % 使用过去p个值进行预测
        past_values = y_extended(t-p:t-1);
        y_forecast_local = sum(ar_coeff .* past_values(end:-1:1)); % 注意系数顺序
        y_extended(t) = y_forecast_local;

        % 计算预测误差的均方误差(逐步增大)
        if t == length(y)+1
            forecast_mse(t-length(y)) = noise_var;
        else
            % 对于多步预测,误差会累积
            forecast_mse(t-length(y)) = forecast_mse(t-length(y)-1) + noise_var * sum(ar_coeff(1:t-length(y)-1).^2);
        end
    end
    y_forecast = y_extended(end-nForecast+1:end);
    forecast_mse = forecast_mse(end-nForecast+1:end);
end

模型选择与优化关键点

  • 平稳性处理AR模型的核心假设是数据平稳。如果您的数据有趋势或季节性:
    • 趋势:使用 detrend 函数或进行差分(diff)。
    • 季节性:进行季节性差分(如 diff(y, 季节周期))。
  • 定阶方法
    • 观察PACF图:在滞后 p 阶后,如果PACF系数突然落入置信区间内(“截尾”),p 即为建议阶数。
    • 使用信息准则:AIC/BIC准则能平衡模型复杂度与拟合度。BIC通常给出更简洁的模型。
  • 模型诊断残差是否为白噪声是判断模型是否充分的黄金标准。如果残差仍存在自相关,考虑:
    1. 增加AR阶数。
    2. 改用ARMA模型(armax 函数)来同时建模自回归和移动平均部分。
  • 高级扩展
    • 多变量:使用向量自回归(VAR) 模型(varm, estimate 函数)。
    • 外生变量:使用带外生输入的ARX模型(arx 函数)。
    • 非线性:考虑非线性自回归(NAR) 神经网络模型(narnet 函数)。

参考代码 时间序列的自回归预测模型 www.youwenfan.com/contentali/96377.html

常见问题与解决方案

问题现象 可能原因 解决方案
预测值迅速收敛到均值 模型为纯AR过程且未包含外部驱动 检查模型形式,考虑引入外生变量(ARX)或使用SARIMA建模季节性
残差非白噪声,存在自相关 模型阶数不足或模型类型不当 增加 p,或改用ARMA模型(使用 armax
预测置信区间过宽 序列噪声大或预测步长过长 检查数据质量,缩短预测步长,或集成多个模型降低不确定性
新数据上的预测性能骤降 数据发生结构突变(如市场事件、系统故障) 使用滚动窗口重新估计模型,或采用状态空间模型(如您之前提到的UKF)进行自适应滤波
相关文章
|
6天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
7天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
737 7
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
7天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
720 6
|
7天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
7天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
751 148
|
7天前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
1894 3
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
7天前
|
人工智能 运维 自然语言处理
阿里云百炼Qwen3.7-Max模型详解:综合能力、核心优势与订阅计划参考指南
2026年,大模型技术持续向通用化、高性能、场景化方向迭代,阿里云百炼作为一站式大模型服务平台,持续推出迭代升级的模型产品,Qwen3.7-Max便是当前主力旗舰级大模型之一。该模型依托深度优化的底层架构与大规模训练数据,在文本理解、逻辑推理、多模态交互、代码生成、长文本处理等多个维度实现能力升级,同时搭配灵活的订阅计划体系,能够适配个人开发者、中小企业、大型企业、政企机构等不同类型用户的使用需求。
600 2
|
7天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1982 10
|
7天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
830 1

热门文章

最新文章