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

发布时间:2026/6/14 1:07:44
别再只盯着h=1了!Matlab adftest函数实战:用GDP数据手把手教你三种平稳性判断方法 别再只盯着h1了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假设检验结果h0接受H₀非平稳h1拒绝H₀平稳最直观的判断指标pValue观察到的显著性水平pα接受H₀pα拒绝H₀反映拒绝H₀的证据强度stat检验统计量statcValue接受H₀statcValue拒绝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);检验结果对比h值判断h0 → 接受原假设非平稳pValue判断p0.999 0.05 → 接受原假设统计量判断stat13.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值已低于原始序列但仍大于cValuepValue虽有下降从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综合分析h1、p0.05、statcValue → 三种方法一致判断为平稳图形显示序列在零值附近随机波动无明显趋势这表明GDP序列经过二阶差分后达到了平稳状态3. 三种判断方法的深入比较与应用场景虽然h、pValue和stat/cValue理论上应该一致但实际分析中可能出现以下情况案例1临界情况下的判断分歧当stat接近cValue时可能出现h0不拒绝H₀但pValue略小于0.05如0.04此时建议结合图形分析考虑进行更长时间的观察或收集更多数据。案例2小样本数据的特殊表现样本量较小时pValue可能不够稳定stat与cValue的比较更为可靠实用建议常规分析优先查看h值快速判断深入研究必须检查pValue和stat/cValue结果存疑时绘制序列图形进行多方法交叉验证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); % 不含常数项和趋势项选择建议观察数据图形判断是否明显存在趋势不确定时使用默认ARD模型比较不同模型的结果选择最一致的结论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);在实际分析中我发现当三种判断方法出现分歧时往往意味着数据处于平稳与非平稳的边界状态。这时最好的做法是结合业务背景知识或者尝试不同的差分阶数和模型设定而不是机械地依赖单一指标。例如某些具有弱趋势的序列可能在某些检验方法下显示为平稳但从业务角度看仍需要进一步处理。

月新闻