You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADF与KPSS检验结果解读:1204长度时间序列平稳性判断

时间序列平稳性检验结果解读与问题修正

一、KPSS检验结果解读

你的KPSS检验输出:

KPSS Statistic: 0.5599265678349569
p-value: 0.028169691929063764
Critial Values:
10% : 0.347
5% : 0.463
2.5% : 0.574
1% : 0.739

KPSS检验核心逻辑:原假设为序列平稳,备择假设为序列非平稳。

  • 你的p值(0.028)小于0.05显著性水平,因此拒绝原假设,判定序列在水平平稳假设下非平稳。
  • 同时,KPSS统计量(0.5599)接近2.5%临界值(0.574),也支持在2.5%显著性水平下拒绝平稳假设。

二、ADF检验结果解读

你的ADF检验输出:

Results of Dickey-Fuller Test:
ADF Statistic: -34.90080897499817
n_lags: 0.0
p-value: 0.0
Critial Values:
   1%, -3.43580201334162
Critial Values:
   5%, -2.8639475292642795
Critial Values:
   10%, -2.5680518110968684

ADF检验核心逻辑:原假设为序列存在单位根(非平稳),备择假设为序列平稳。

  • 你的p值(0.0)远小于0.05,因此拒绝原假设,判定序列平稳。
  • ADF统计量(-34.9)远小于1%临界值(-3.435),同样支持在1%显著性水平下拒绝单位根假设,确认序列平稳。

三、检验结果矛盾的原因与代码问题

1. 代码中的明显错误

你的ADF代码存在输出错误:

print(f'n_lags: {result[1]}')

result[1]对应的是ADF检验的p值,滞后阶数应该是result[2],这会导致你误读滞后阶数信息,修正后才能正确参考检验的滞后选择合理性。

2. 检验假设的差异

两个检验结果矛盾的常见原因是序列属于趋势平稳而非水平平稳:

  • KPSS默认参数regression='c'是检验水平平稳(序列均值、方差恒定),如果序列存在趋势,KPSS会拒绝平稳假设。
  • ADF默认参数regression='c'是检验无趋势的平稳性,但对于趋势平稳的序列,ADF检验仍可能拒绝单位根假设,误判为平稳。

四、代码修正与优化建议

修正后的ADF检验代码

import pandas as pd
from statsmodels.tsa.stattools import adfuller

series = pd.read_csv("C:/Users/28.csv") #, header=0, index_col=0)     
result = adfuller(series, autolag='AIC')
print(f'ADF Statistic: {result[0]}')
print(f'n_lags: {result[2]}')  # 修正为result[2],对应滞后阶数
print(f'p-value: {result[1]}')
for key, value in result[4].items():
    print(f'Critical Values {key}: {value}') 

优化后的KPSS检验代码(同时检验水平/趋势平稳)

from statsmodels.tsa.stattools import kpss   
import pandas as pd

data = pd.read_csv("C:/Users/28.txt")  

def kpss_test(data, regression='c'):    
    statistic, p_value, n_lags, critical_values = kpss(data, regression=regression)
    print(f'KPSS Test (假设:{"水平平稳" if regression=="c" else "趋势平稳"}):')
    print(f'KPSS Statistic: {statistic}')
    print(f'p-value: {p_value}')
    print(f'滞后阶数: {n_lags}')
    print('临界值:')
    for key, value in critical_values.items():
        print(f'   {key} : {value}')
    print(f'结论:序列{"不" if p_value < 0.05 else ""}符合当前假设的平稳性\n')

# 检验水平平稳
kpss_test(data, regression='c')
# 检验趋势平稳
kpss_test(data, regression='ct')

五、后续分析建议

  1. 运行修正后的代码,查看KPSS趋势平稳检验的结果:如果regression='ct'时p值>0.05,说明序列是趋势平稳,这就能解释两个检验的矛盾结论。
  2. 绘制序列的时序图、自相关图(ACF)、偏自相关图(PACF),直观观察序列的均值、方差是否随时间变化,辅助判断平稳性类型。
  3. 如果确认是趋势平稳,可以选择对序列去趋势后再建模,或者使用允许趋势项的时间序列模型(如带趋势的ARIMA)。

内容的提问来源于stack exchange,提问作者lena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:57:29