时间序列平稳性检验(Matlab)

  时间序列平稳性检验是判断时间序列是否满足平稳性要求的方法,AI介绍的常见的方法有以下几种:

  1. 绘制时间序列图和自相关图:通过观察时间序列图和自相关图的特征,可以初步判断时间序列是否具有平稳性。

  2. 统计量检验:常见的统计量检验方法有ADF检验、KPSS检验、Phillips-Perron检验等。其中ADF检验用于判断时间序列是否具有弱平稳性,KPSS检验用于判断时间序列是否具有趋势稳定性,Phillips-Perron检验可用于检验具有自相关或趋势的非平稳序列。

  3. 平稳性转换:如果时间序列不满足平稳性要求,可以进行平稳性转换,例如差分法、对数转换等方法。

  4. 模型拟合:基于AR、MA、ARMA模型等,对时间序列进行拟合,通过估计残差序列的自相关和偏自相关系数,判断时间序列是否具有平稳性。

  需要注意的是,通过单一的检验方法判断时间序列平稳性可能存在偏差,建议采用多种方法综合判断。所以,时间序列平稳性检验貌似并不能找到一个很准确的判定。
  最近在理解ARMA的时候,构建了模拟数据,在用模拟数据进行平稳性检测时ADF检验和KPASS检验出现了不太一样的结果,这里做个记录。

时间序列构建

  时间序列由周期、半周期、趋势、随机误差项组成,对各分量分别构建模拟序列,然后按比例叠加,可生成一个完整序列,生成的代码如下:

clear;
n = 132; % 模拟11年的数据,用10年的数据作为训练值
ntest = 12;  %用最后1年数据作为预测比对值
x = 1:n;

% 周期信号
a1 = cos(2*pi*x/12) + 0.6 * sin(2*pi*x/24);
figure(1)
subplot(2,2,1)
plot(x,a1); 
title('a1 周期信号')

% 趋势信号
subplot(2,2,2);
x2=0.14;
a2 = mapminmax(x2 * x,0,1);
plot(x,a2);
title('a2 趋势信号')

% 随机信号(0-1的随机值)
subplot(2,2,3)
a3 = rand(1,n);
plot(x,a3);
title('a3 随机信号')

% 三种信号叠加 生成模拟信号
subplot(2,2,4) % 
a41 = 2 .* a1; % 1 只有周期项
%a41 = 2 .* a1 + 3.2 * a3; % 2 周期 + 随机
%a41 = 2 .* a1 + 5 * a2 + 3.2 * a3; % 3 周期 + 趋势 + 随机
%a41= 2 .* a1 + 5 * a2; % 4 周期+趋势 
plot(x,a41);
title('a4 叠加序列')

在这里插入图片描述
平稳性检验使用ADF检验和KPASS检验

%% 平稳检验
a4 = a41(1:n-ntest);
ad1 = adftest(a4); % 1平稳 0非平稳
ad2 = kpsstest(a4); % 0 平稳  1 非平稳

if (ad1 == 1 && ad2 == 0)
   % 平稳
   type = 3;
else
    % 非平稳
    type = 4;
end

  发现当序列包含不同的信号时,两种检验方法可能存在差异;

方案ADF检验结果KPASS检验结果
周期平稳平稳
周期+随机噪声平稳平稳
周期+随机噪声+趋势非平稳平稳
周期+趋势非平稳平稳

  将周期序列向y轴正方向移动5个单位,然后进行平稳性检验,发现此时ADF检验结果显示为非平稳,Kpass仍为平稳。
在这里插入图片描述

  从上可以看出只要加了趋势项或序列非集中分布在X轴附近ADF检验结果就表现出非平稳性,所以最好结和多种检验方法,保证时间序列/差分序列绝对平稳,然后再应用到ARMA模型的预测等可能才会有较好的结果。也可以尝试更多的平稳性检验方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咋(za)说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值