时域方法---自回归积分滑动平均模型(ARIMA),变种SARIMA模型预测气温

介绍

自回归积分滑动平均模型(ARIMA,AutoRegressive Integrated Moving Average)是时间序列分析中非常重要的模型之一,广泛应用于经济学、金融学、气象学等领域的时间序列预测。ARIMA模型通过结合自回归(AR)、滑动平均(MA)和差分(Integrated)来处理和预测非平稳时间序列的数据

模型的基本概念

ARIMA模型由三个部分组成:
自回归(AR)部分:表示当前值与之前若干时刻的值之间的线性关系。通过AR部分,模型可以捕捉时间序列中的自相关性。
滑动平均(MA)部分:表示当前值与之前若干时刻的预测误差(残差)之间的线性关系。MA部分用于建模时间序列中随机波动的影响。
差分(Integrated)部分:用于处理非平稳时间序列。通过对时间序列进行差分操作,使其转化为平稳序列,以便应用ARMA模型。

模型的表示形式

ARIMA模型通常表示为ARIMA(p, d, q):

𝑝:自回归项的阶数,即使用前几个时刻的值来预测当前值。
𝑑:差分次数,即时间序列平稳化所需的差分次数。
𝑞:滑动平均项的阶数,即使用前几个时刻的预测误差来修正当前值。
一个ARIMA(p, d, q)模型可以表示为:
在这里插入图片描述

模型的建立步骤

建立ARIMA模型通常需要以下几个步骤

数据平稳性检验

在应用ARIMA模型之前,需要先检验时间序列是否平稳。如果序列不平稳,通常通过差分处理将其平稳化。常用的平稳性检验方法包括:
ADF(Augmented Dickey-Fuller)检验:用于检验时间序列的单位根。
KPSS(Kwiatkowski-Phillips-Schmidt-Shin)检验:用于检验时间序列是否为平稳的零假设。

确定模型阶数

在确定时间序列平稳化后,接下来需要确定AR和MA的阶数 𝑝和 𝑞常用的方法包括:
自相关函数(ACF)和偏自相关函数(PACF)图:通过分析ACF和PACF图,可以初步确定 𝑝 和 𝑞 的值。
信息准则:如AIC(Akaike信息准则)和BIC(贝叶斯信息准则),通过比较不同阶数的模型的AIC/BIC值来选择合适的阶数

模型参数估计

在确定了 𝑝𝑑 和 𝑞之后,接下来就是估计模型参数𝜙𝑖和 𝜃𝑗。常用的参数估计方法包括:

最大似然估计(MLE):通过最大化似然函数来估计模型参数。
最小二乘法(OLS):通过最小化残差平方和来估计参数

模型诊断

模型拟合后,需要对模型进行诊断,确保模型的适用性。常用的诊断方法包括:

残差分析:检查残差是否为白噪声,是否符合正态分布。
Ljung-Box检验:用于检验残差的自相关性

模型预测

通过ARIMA模型可以对未来的时间序列进行预测。模型预测的效果取决于数据的质量和模型的准确性。

ARIMA模型的应用

ARIMA模型在许多领域都有广泛的应用,尤其是在金融、经济和气象领域。以下是一些常见的应用场景:

金融领域

股票价格预测:利用ARIMA模型预测未来股票价格的趋势。
利率预测:对未来的利率进行预测,以便制定投资策略。

经济领域

GDP增长率预测:利用ARIMA模型预测国家经济增长率,为经济政策的制定提供参考。
失业率预测:分析并预测失业率的变化趋势。
气象领域
气温预测:利用历史气温数据预测未来的气温变化。
降水量预测:预测未来的降水量,为农业生产提供参考

模型的局限性

尽管ARIMA模型在时间序列分析中有广泛应用,但它也有一些局限性:

对平稳性的要求

ARIMA模型假设时间序列是平稳的,因此在处理非平稳时间序列时,需要先通过差分等方法将其转化为平稳序列,这增加了建模的复杂性。

长期预测的局限性

ARIMA模型在短期预测中表现较好,但在长期预测中,模型的准确性可能会显著下降。尤其是当时间序列具有复杂的季节性或趋势性时,ARIMA模型的预测能力可能不够理想。

参数选择的复杂性

ARIMA模型的阶数选择和参数估计可能较为复杂,尤其是在高阶模型中,可能会出现多重共##线性问题##,使得模型不稳定

扩展模型

为了克服ARIMA模型的一些局限性,学者们提出了一些扩展模型:

SARIMA(季节性ARIMA)模型
SARIMA模型在ARIMA模型的基础上增加了季节性成分,适用于具有季节性波动的时间序列。

ARIMAX模型
ARIMAX模型在ARIMA模型的基础上引入了外生变量(即解释变量),适用于那些受外部因素影响的时间序列数据。

GARCH模型
在处理具有异方差性的金融时间序列数据时,GARCH模型被广泛应用。GARCH模型可以捕捉到时间序列中的波动率聚集现象。

本文代码

使用SARIMA(季节性自回归积分滑动平均)模型进行气温预测,尤其是在复杂且具有季节性特征的气温时间序列中。SARIMA 模型是 ARIMA 模型的扩展,它能够处理具有周期性或季节性波动的时间序列

核心代码

% 设置随机数种子以保证结果可重复
rng(0);

% 生成合成的月度气温数据
n = 120; % 数据点数量,假设10年(120个月)的数据
t = (1:n)';

% 生成季节性成分 (12个月周期)
seasonality = 10 * sin(2 * pi * t / 12);

% 生成长期趋势 (线性增长)
trend = 0.05 * t;

% 添加白噪声
noise = randn(n, 1);

% 合成气温数据
temperature = 20 + trend + seasonality + noise;

% 绘制生成的气温时间序列
figure;
plot(t, temperature);
title('模拟的月度气温时间序列');
xlabel('时间 (月)');
ylabel('气温 (摄氏度)');

% 对差分后的数据应用季节性差分
seasonal_diff = 12;
temperature_seasonal_diff = diff(temperature_diff, seasonal_diff);

% 定义非季节性ARIMA部分(p=1, d=1, q=1)
nonSeasonalModel = arima('ARLags', 1, 'D', 0, 'MALags', 1);

% 定义季节性ARIMA部分的结构
% 因为Matlab不直接支持季节性ARIMA参数,我们通过手动构造模型
seasonalModel = arima('ARLags', 1, 'MALags', 1, 'Seasonality', seasonal_diff);

% 合并季节性和非季节性成分,构建综合模型


temperature);
disp('拟合的SARIMA模型参数:');
disp(estimatedModel);

% 获取残差
[residuals, v] = infer(estimatedModel, temperature);

% 绘制标准化残差
figure;
subplot(3,1,1);
plot(residuals);
title('标准化残差');
xlabel('时间');
ylabel('残差');

% 绘制残差自相关函数 (ACF)
subplot(3,1,2);
autocorr(residuals);
title('标准化残差的自相关函数');

% Ljung-Box Q 检验
[h, pValue] = lbqtest(residuals);
subplot(3,1,3);
bar(pValue);
title('Ljung-Box Q 检验 p 值');
xlabel('滞后数');
ylabel('p 值');
disp(['Ljung-Box 检验的 p 值: ', num2str(pValue')]);

% 预测未来12个月的气温
num_periods = 12;
[Y, YMSE] = forecast(estimatedModel, num_periods, 'Y0', temperature);

% 绘制预测结果
figure;
plot(t, temperature, 'k', 'LineWidth', 1.5); hold on;
plot(n+1:n+num_periods, Y, 'b-', 'LineWidth', 2);
plot(n+1:n+num_periods, Y + 1.96 * sqrt(YMSE), 'r--');
plot(n+1:n+num_periods, Y - 1.96 * sqrt(YMSE), 'r--');
title('未来12个月气温的预测');
xlabel('时间 (月)');
ylabel('气温 (摄氏度)');
legend('历史气温', '预测气温', '95% 置信区间');

代码说明

非季节性ARIMA部分:通过 arima 函数直接定义。

ARLags: 自回归滞后项
MALags: 滑动平均滞后项
D: 一阶差分
手动处理季节性部分:因为Matlab不直接支持季节性参数,通过手动差分并结合季节性滞后项的方式实现。

残差分析与预测:我们仍然对残差进行诊断,确保模型适用性,然后进行未来12个月的气温预测。

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

ARIMA模型是时间序列分析中的一种经典模型,通过对自回归、滑动平均和差分的结合,能够有效地对非平稳时间序列进行建模和预测。尽管ARIMA模型有其局限性,但通过适当的扩展和调整,它在各种领域中依然具有广泛的应用价值。通过合理地选择模型参数,并对模型进行充分的诊断和验证,可以提升ARIMA模型的预测效果,为实际问题的解决提供有力支持。

完整代码获取

关注下方公众号,回复“SARIMA模型”获取完整代码

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值