时间序列中的平稳性检验之单位根检验

本文详细解析了单位根检验的基本概念及其与非平稳时间序列之间的关系。首先介绍了平稳时间序列的定义,随后深入探讨了ARMA过程,并解释了为何单位根的存在会导致时间序列非平稳。最后,文章提及了ADF检验作为检测单位根的一种基本方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对序列的平稳性的检验中最常用的方法是单位根的检验。单位根检验是指检查序列中是否存在单位根,如果存在单位根就是非平稳时间序列了。下面是找的解释为什么单位根存在就是非平稳时间序列的原因。

作者:五雷
链接:https://www.zhihu.com/question/22385598/answer/21221607
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

  1. 首先要理解什么是平稳的时间序列,一般时间序列书中给出的平稳的定义以弱平稳为主也就是一个随机变量{y_{t} }的无条件期望不变、方差恒定且协方差不随时间改变,也就是E[y_{t}]=a,Var[y_{t}]=\sigma^{2},Cov(y_{t},y_{t-i})=\sigma_{i},注意关键在于方差是有限的,并且协方差是不随时间改变的。为什么这么设定?主要是给定这些假设前提后,就可以便于技术上的处理,例如平稳变量的谱分析;
  2. 然后,需要知道一般什么样的时间序列是平稳的,例如最常用的ARMA过程y_{t}=A(L)y_{t-1}+B(L)\epsilon_{t},关键在于理解这个方程实际上是一个随机差分方程,差分项就是变量自身,随机项就是\epsilon_{t},将上面这个方程稍微变换,可以看到可以写成y_{t}=B(L)\epsilon_{t}/(1-A(L)),这也就是随机微分方程的一个解,方程1-A(L)=0称为逆特征方程,解也就是逆特征解,跟差分方程的齐次解成倒数关系。现在可以知道,差分方程要平稳,那么其解应该在单位圆内,或者对应的逆特征方程的特征根在单位圆外。如果有根在单位圆上,那么对应着就是有单位根了;
  3. 最后,看什么样的序列存在单位根,最简单的情况y_{t}=y_{t-1}+\epsilon_{t},可以看到对应的特征根是1,这样得出的解为y_{t}=\sum_{i=0}^{\infty }{\epsilon_{t-i}},可以看到这种情况下,离当前时间t很久远的时刻的一个随机冲击对现在的影响仍然没有衰减,这样就是单位根过程了。如果时间序列存在这种情况,对时间序列的未来值的预测就难以进行。再从平稳的定义看,此时随机变量的方差就会逐渐增大到\infty,而不会是有限的方差,这样长期的时间序列就没有预测意义了。

上面陈述的就是最基本的单位根与非平稳时间序列的关系,那么怎么检验单位根过程?最基本的或者最通用的检验是ADF检验,要理解ADF检验需要弄清假设检验的一般原理,知道检验统计量的size distortion和power的含义,然后就能清楚为什么普通的t检验不能检验是否存在单位根而需要通过monte carlo实验来获取临界值了。系统的学习请参考hamilton~

 

### PP单位根检验简介 PP(Phillips-Perron)单位根检验是一种用于检测时间序列数据是否存在单位根的方法。它通过修正异方差性和自相关性的影响来提高检验的有效性[^1]。 在Python中,可以利用`statsmodels`库中的` PhillipsPerron `类来进行PP单位根检验。以下是详细的说明和代码实现: --- ### Python 实现 PP 单位根检验 #### 导入必要的库 为了执行PP单位根检验,需要先安装并导入一些常用的时间序列处理库: ```python import numpy as np import pandas as pd from statsmodels.tsa.stattools import PhillipsPerron ``` #### 数据准备 假设有一个时间序列数据存储在一个 Pandas Series 或 NumPy 数组中。例如: ```python # 创建一个模拟的时间序列数据 np.random.seed(42) data = np.cumsum(np.random.randn(100)) # 非平稳随机游走过程 time_series = pd.Series(data, name="Time_Series") ``` #### 执行PP单位根检验 调用`PhillipsPerron`函数即可完成测试: ```python pp_test_result = PhillipsPerron(time_series) print("PP Test Statistic:", pp_test_result.stat) print("p-value:", pp_test_result.pvalue) print("Lags Used:", pp_test_result.lags) ``` 解释输出结果: - **Test Statistic**: 检验统计量的值。 - **p-value**: 原假设(存在单位根)成立的概率。如果 p 值小于显著性水平(通常为0.05),则拒绝原假设,认为该时间序列为平稳序列。 - **Lags Used**: 自动选择的滞后阶数。 --- ### R 中的 PP 单位根检验 R 提供了一个强大的包`tseries`,其中包含了PP单位根检验的功能。具体实现如下: #### 安装与加载 tseries 包 ```r install.packages("tseries") # 如果尚未安装此包,则运行这一行 library(tseries) ``` #### 准备数据 创建或读取一个时间序列对象: ```r set.seed(42) data <- cumsum(rnorm(100)) # 随机游走序列 ts_data <- ts(data) # 转换为时间序列对象 ``` #### 进行PP单位根检验 使用`tseries::pp.test()`函数进行检验: ```r pp_test_result <- pp.test(ts_data) cat("PP Test Statistic:", pp_test_result$statistic, "\n") cat("p-value:", pp_test_result$p.value, "\n") ``` 同样地,可以通过比较 p 值与显著性水平判断是否接受原假设。 --- ### 结果解读 无论是Python还是R的结果,都需要关注以下几点: - 若 p 值较小(<0.05),表明有充分证据拒绝原假设,即时间序列不存在单位根,可能是平稳的。 - 反之,若 p 值较大(≥0.05),无法拒绝原假设,意味着可能存在单位根,需进一步差分或其他方法使其平稳化[^2]。 --- ### 注意事项 尽管PP检验能够有效应对某些形式的异方差性和自相关性,但在实际应用中仍可能遇到复杂情况。因此,在分析前应仔细检查数据特性,并结合其他工具(如ADF检验、KPSS检验等)综合评估时间序列平稳性[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值