时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 时间序列分析中,确定序列的平稳性至关重要。本文介绍如何使用KPSS检验和Dickey-Fuller检验验证序列平稳性。KPSS假设数据非平稳,而Dickey-Fuller假设数据平稳。通过构造平稳(白噪声)和非平稳(随机游走)序列并进行检验,展示了两种方法的应用。KPSS适用于检测围绕趋势的平稳性,Dickey-Fuller则用于检验单位根。建议同时使用两者以确保结论可靠。

在进行时间序列分析之前,确定序列的平稳性是一个关键步骤。平稳性指的是时间序列的统计特性(如均值和方差)在时间维度上保持不变。本文将详细介绍如何运用 KPSS 检验Dickey-Fuller 检验来验证序列的平稳性。这两种检验方法基于不同的统计假设:KPSS 检验的原假设是数据非平稳,而 Dickey-Fuller 检验则假设数据平稳。

时间序列平稳性的基本概念

时间序列的平稳性主要体现在三个方面:

  1. 均值稳定性:序列的期望值在时间维度上保持恒定
  2. 方差稳定性:数据波动范围保持相对稳定
  3. 无周期性:数据不存在明显的周期性波动或循环模式

平稳性是许多时间序列模型(如 ARIMA)的基本假设条件,对模型的有效性具有重要影响。

以下我们将通过构造平稳序列和非平稳序列来演示这两种检验方法的应用。

 importnumpyasnp  
 importpandasaspd  
 importmatplotlib.pyplotasplt  
 fromstatsmodels.tsa.stattoolsimportadfuller, kpss  

 # 构造平稳时间序列(白噪声过程)
 np.random.seed(42)  
 stationary_series=np.random.normal(loc=0, scale=1, size=500)  
 # 构造非平稳时间序列(随机游走过程)
 non_stationary_series=np.cumsum(np.random.normal(loc=0, scale=1, size=500))  
 # 创建数据框用于后续分析
 data=pd.DataFrame({  
     "Stationary": stationary_series,  
     "Non-Stationary": non_stationary_series  
 })  

 plt.figure(figsize=(12, 6))  
 plt.plot(data['Stationary'], label='Stationary Series')  
 plt.plot(data['Non-Stationary'], label='Non-Stationary Series')  
 plt.title('Stationary vs Non-Stationary Time Series')  
 plt.xlabel('Time')  
 plt.ylabel('Value')  
 plt.legend()  
 plt.grid()  
 plt.savefig('stationary_vs_non_stationary.png')  
 plt.show()

![]

 defkpss_test(series):  
     statistic, p_value, _, critical_values=kpss(series, regression='c')  
     print("KPSS Test:")  
     print(f"Statistic: {statistic:.4f}")  
     print(f"P-Value: {p_value:.4f}")  
     print("Critical Values:")  
     forkey, valueincritical_values.items():  
         print(f"{key}: {value:.4f}")  
     print(f"Conclusion: {'Stationary'ifp_value>0.05else'Non-Stationary'}\n")  

 defadf_test(series):  
     statistic, p_value, _, _, critical_values, _=adfuller(series)  
     print("Dickey-Fuller Test:")  
     print(f"Statistic: {statistic:.4f}")  
     print(f"P-Value: {p_value:.4f}")  
     print("Critical Values:")  
     forkey, valueincritical_values.items():  
         print(f"{key}: {value:.4f}")  
     print(f"Conclusion: {'Stationary'ifp_value<0.05else'Non-Stationary'}\n")  

 print("Testing the Stationary Series:\n")  
 kpss_test(data['Stationary'])  
 adf_test(data['Stationary'])  

 print("Testing the Non-Stationary Series:\n")  
 kpss_test(data['Non-Stationary'])  
 adf_test(data['Non-Stationary'])

平稳序列检验结果分析

  • KPSS 检验结果显示 p 值大于显著性水平 0.05,未能拒绝序列平稳的原假设
  • Dickey-Fuller 检验的 p 值小于 0.05,拒绝序列存在单位根的原假设,证实序列平稳性

非平稳序列检验结果分析

  • KPSS 检验的 p 值小于 0.05,拒绝平稳性假设,表明序列非平稳
  • Dickey-Fuller 检验的 p 值大于 0.05,未能拒绝单位根假设,同样证实序列非平稳性

总结

时间序列的平稳性检验是建模过程中的重要环节。KPSS 和 Dickey-Fuller 检验提供了两种互补的统计方法,可以帮助研究者准确评估序列的平稳性特征,并为后续的数据转换(如差分处理)提供依据。

  • KPSS 检验适用于验证时间序列是否围绕确定性趋势呈现平稳特性
  • Dickey-Fuller 检验主要用于检验序列是否存在单位根,尤其适用于 ARIMA 建模前的平稳性验证

由于这两种检验方法基于不同的统计假设,在实际应用中通常建议同时使用两种方法进行交叉验证,以获得更可靠的结论。

https://avoid.overfit.cn/post/be3a54e988ff4970a54584dbbf6ec2e5

目录
相关文章
|
机器学习/深度学习 运维 自然语言处理
大模型也能当“运维警察”?——大模型技术在异常检测中的应用
大模型也能当“运维警察”?——大模型技术在异常检测中的应用
2313 13
R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析
R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析
|
存储 安全 算法
陪玩系统功能 陪玩平台 陪玩系统用户体验 陪玩系统安全性 陪玩系统开发
陪玩系统旨在为用户寻找合适的陪玩者,提供注册登录、资料展示、搜索匹配、预约支付、实时沟通及评价反馈等功能。平台拥有丰富的陪玩资源,便捷的预约流程,安全的支付环境和良好的用户体验。系统通过优化算法、提升沟通效率、丰富服务内容和建立社区互动来提升用户体验。安全性方面,系统采用数据加密、防火墙、支付安全和实名认证等措施。开发过程包括需求分析、系统设计、前后端开发、测试优化和上线推广。
1274 2
|
UED
解决Electron窗口白屏问题的预创建方案
在使用Electron创建窗口时,有时会遇到窗口显示白屏的问题。这篇文章将介绍一种解决方案,即预创建窗口,并提供了针对窗口关闭和应用退出的管理方法,以确保 Electron 应用的顺畅运行和用户体验
1274 0
|
编译器 Linux C语言
ARM64上开启MTE
ARM64上开启MTE
|
TensorFlow 算法框架/工具 Python
最新版tensorflow安装教程,pip安装+手动安装
最新版tensorflow安装教程,pip安装+手动安装
6782 1
|
算法 调度
【调度算法】NSGA II
【调度算法】NSGA II
2066 1
|
Java Maven
Maven 引入外部依赖
在 Maven 项目中引入外部依赖,如 LDAP 操作库 ldapjdk.jar,首先将 jar 文件放入 src/lib 文件夹。接着在 pom.xml 的 dependencies 部分添加依赖配置,
R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
|
自然语言处理 算法 搜索推荐