平稳性、单位根理解
平稳的序列 直观感受如下:
但统计意义上的平稳并不是这样哈,我们都知道一个成语“一叶障目”:当数据量小的时候往往结论比较偏激,当数据量大的时候,什么大风大浪都见过,那么结论就相对靠谱一些。
但还有一种情况:数据量也大,但是结论依旧比较离谱,比如我统计考研人数:
- 第一年上去一拨人,另一波人二战
- 第二年,参加考试的二战的同学凭实力挤下去应届的,但仍有人三战;也有一部分应届生考上了,但另一部分二战
- 第三年…三战的挤下去二战的,二战的挤下去一战的…同样,一战变为二战,二战变为三战,三战变为四战…
所以当我要统计考研人数的时候,其实统计的就是:一战的 + (二战剩下的+三战剩下的+…+N战剩下的),时间维度越长,这个N战剩下的 就对结果影响越大。
其中当我要预测考研人数的时候:二战剩下的+三战剩下的+.....+N战剩下的 = 之前剩下的 这个之前剩下的 就称为单位根 ,带着单位根预测有没有问题?没有问题!但是不够准!
单位根检验 / 平稳性检验:就是用来判断是否数据中是否存在“之前剩下的”这一部分,如果能剔除出去,问题就变得简单了,准确性也会更高。单位根检验分很多,更多请参考其他更理论的内容哈
一般常用的就是ADF单位根检验
python ADF检验
示例代码:
from statsmodels.tsa.stattools import adfuller
import numpy as np
if __name__ == '__main__':
array = np.random.standard_normal(size=100)
adf_result = adfuller(array)
adf_value = adf_result[0]
print("adf值:", adf_value)
p_value = adf_result[1]
print("p:", p_value)
t_value = adf_result[4]
print("临界值:", t_value)
得到结果:
adf值: -4.918907632344451
p: 3.203639985122076e-05
临界值: {'1%': -3.506944401824286, '5%': -2.894989819214876, '10%': -2.584614550619835}
如果要证明数据平稳,需要:
- 条件1:
p值 ,需要p大于0.05(可以看到上述结果第一个条件都不满足,直接得:序列不平稳) - 条件2:
临界值 这里是三个置信区间,如果adf值 >1%对应的值,说明在置信区间1%内平稳,最苛刻的是10%
参考文章
How to interpret adfuller test results?:https://stackoverflow.com/questions/47349422/how-to-interpret-adfuller-test-results
|