别再只盯着h=1了!Matlab adftest函数实战:用GDP数据手把手教你三种平稳性判断方法
2026/6/14 1:06:54 网站建设 项目流程

别再只盯着h=1了!Matlab adftest函数实战:用GDP数据手把手教你三种平稳性判断方法

在时间序列分析中,ADF检验是判断数据平稳性的黄金标准。但很多Matlab用户在使用adftest函数时,往往只关注h值这一单一指标,忽略了pValue、stat和cValue等同样重要的统计量。本文将带你深入理解ADF检验的完整输出,通过实际GDP数据分析,掌握三种交叉验证的平稳性判断方法。

1. ADF检验的核心逻辑与输出参数解析

ADF检验(Augmented Dickey-Fuller test)的核心在于检验时间序列是否存在单位根。原假设(H₀)认为序列存在单位根(非平稳),而备择假设(H₁)则认为序列不存在单位根(平稳)。

adftest函数的完整调用格式为:

[h, pValue, stat, cValue] = adftest(y, 'alpha', 0.05);

关键输出参数解读

参数数学含义判断标准实际意义
h假设检验结果h=0接受H₀(非平稳)
h=1拒绝H₀(平稳)
最直观的判断指标
pValue观察到的显著性水平p>α接受H₀
p<α拒绝H₀
反映拒绝H₀的证据强度
stat检验统计量stat>cValue接受H₀
stat<cValue拒绝H₀
直接比较统计量与临界值
cValue临界值由显著性水平α决定提供统计量的比较基准

注意:这三种判断方法在理论上应该得出相同结论,但在实际数据分析中可能出现不一致,这正是需要交叉验证的原因。

2. 实战案例:中国GDP数据的平稳性检验

让我们以1978-2020年中国GDP数据为例,演示如何全面解读ADF检验结果。

2.1 原始序列检验

首先加载并可视化原始GDP数据:

data = [3678.70, 4100.45, 4587.58, ..., 1015986.20]; % 完整数据见文末 plot(data, 'LineWidth', 1.5); title('中国GDP原始序列(1978-2020)');

执行ADF检验:

[h, pValue, stat, cValue] = adftest(data, 'alpha', 0.05);

检验结果对比

  1. h值判断:h=0 → 接受原假设(非平稳)
  2. pValue判断:p=0.999 > 0.05 → 接受原假设
  3. 统计量判断:stat=13.433 > cValue=-1.947 → 接受原假设

三种方法一致表明原始GDP序列是非平稳的,这与直观趋势图显示的持续增长特征相符。

2.2 一阶差分序列检验

对数据进行一阶差分:

datad1 = diff(data, 1); plot(datad1, 'LineWidth', 1.5); title('GDP一阶差分序列');

检验结果:

h = 0 pValue = 0.2810 stat = -0.9989 cValue = -1.9475

关键发现

  • 虽然差分后序列的stat值已低于原始序列,但仍大于cValue
  • pValue虽有下降(从0.999→0.281),但仍大于0.05
  • 图形仍显示明显趋势,验证了非平稳结论

2.3 二阶差分序列检验

继续对数据进行二阶差分:

datad2 = diff(data, 2); plot(datad2, 'LineWidth', 1.5); title('GDP二阶差分序列');

检验结果:

h = 1 pValue = 1.0000e-03 stat = -4.3792 cValue = -1.9476

综合分析

  • h=1、p<0.05、stat<cValue → 三种方法一致判断为平稳
  • 图形显示序列在零值附近随机波动,无明显趋势
  • 这表明GDP序列经过二阶差分后达到了平稳状态

3. 三种判断方法的深入比较与应用场景

虽然h、pValue和stat/cValue理论上应该一致,但实际分析中可能出现以下情况:

案例1:临界情况下的判断分歧当stat接近cValue时,可能出现:

  • h=0(不拒绝H₀)
  • 但pValue略小于0.05(如0.04)

此时建议:结合图形分析,考虑进行更长时间的观察或收集更多数据。

案例2:小样本数据的特殊表现样本量较小时:

  • pValue可能不够稳定
  • stat与cValue的比较更为可靠

实用建议

  1. 常规分析:优先查看h值,快速判断
  2. 深入研究:必须检查pValue和stat/cValue
  3. 结果存疑时:绘制序列图形,进行多方法交叉验证

4. 高级技巧与常见问题排查

4.1 显著性水平α的选择

α值不仅影响cValue,也决定了h和pValue的判断标准:

α值影响适用场景
0.01更严格金融等高精度领域
0.05默认值大多数经济数据分析
0.10更宽松探索性分析或小样本研究

修改α值的调用方式:

[h, pValue, stat, cValue] = adftest(data, 'alpha', 0.01);

4.2 模型设定选项

adftest支持多种模型设定,通过'model'参数指定:

% 三种可选模型 [h1] = adftest(data, 'model', 'ARD'); % 含截距项和趋势项(默认) [h2] = adftest(data, 'model', 'TS'); % 含趋势项 [h3] = adftest(data, 'model', 'NC'); % 不含常数项和趋势项

选择建议

  1. 观察数据图形,判断是否明显存在趋势
  2. 不确定时,使用默认'ARD'模型
  3. 比较不同模型的结果,选择最一致的结论

4.3 滞后阶数的确定

adftest会自动选择滞后阶数,也可手动指定:

[h] = adftest(data, 'lags', 2); % 指定滞后2阶

经验法则

  • 年度数据:滞后1-2阶
  • 季度数据:滞后4-5阶
  • 月度数据:滞后12阶左右

5. 完整代码实现与数据准备

为方便读者复现,这里提供完整代码:

% 数据准备 gdp = [3678.70, 4100.45, 4587.58, 4935.83, 5373.35, 6020.92, 7278.50, ... 9098.95, 10376.15, 12174.59, 15180.39, 17179.74, 18872.87, ... 22005.63, 27194.53, 35673.23, 48637.45, 61339.89, 71813.63, ... 79715.04, 85195.51, 90564.38, 100280.14, 110863.12, 121717.42, ... 137422.03, 161840.16, 187318.90, 219438.47, 270092.32, 319244.61, ... 348517.74, 412119.26, 487940.18, 538579.95, 592963.23, 643563.10, ... 688858.22, 746395.06, 832035.95, 919281.13, 990865.11, 1015986.20]; % 原始序列检验 figure(1) plot(gdp, 'LineWidth', 1.5) title('中国GDP原始序列(1978-2020)') [h, p, stat, cval] = adftest(gdp, 'alpha', 0.05); % 一阶差分 figure(2) d1 = diff(gdp, 1); plot(d1, 'LineWidth', 1.5) title('GDP一阶差分序列') [h1, p1, stat1, cval1] = adftest(d1, 'alpha', 0.05); % 二阶差分 figure(3) d2 = diff(gdp, 2); plot(d2, 'LineWidth', 1.5) title('GDP二阶差分序列') [h2, p2, stat2, cval2] = adftest(d2, 'alpha', 0.05);

在实际分析中,我发现当三种判断方法出现分歧时,往往意味着数据处于平稳与非平稳的边界状态。这时最好的做法是结合业务背景知识,或者尝试不同的差分阶数和模型设定,而不是机械地依赖单一指标。例如,某些具有弱趋势的序列可能在某些检验方法下显示为平稳,但从业务角度看仍需要进一步处理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询