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')
五、后续分析建议
- 运行修正后的代码,查看KPSS趋势平稳检验的结果:如果
regression='ct'时p值>0.05,说明序列是趋势平稳,这就能解释两个检验的矛盾结论。 - 绘制序列的时序图、自相关图(ACF)、偏自相关图(PACF),直观观察序列的均值、方差是否随时间变化,辅助判断平稳性类型。
- 如果确认是趋势平稳,可以选择对序列去趋势后再建模,或者使用允许趋势项的时间序列模型(如带趋势的ARIMA)。
内容的提问来源于stack exchange,提问作者lena
相关产品推荐
相关产品推荐

