我发现adf出现分歧的原因了!
这是adf.test函数的形式:
adf.test(x, alternative = c("stationary", "explosive"),k = trunc((length(x)-1)^(1/3)))
注意那个k,k居然是根据数据长度算出来的!
当然我们也可以指定这个滞后阶数,令k等于自己想要的阶数。
下面举个例子:
- adf.test(diff(hp))
- Augmented Dickey-Fuller Test
- data: diff(hp)
- Dickey-Fuller = -3.3614, Lag order = 4, p-value = 0.06521
- alternative hypothesis: stationary
复制代码
默许滞后阶数是4,结论是10%的显著性水平下拒绝存在单位根的零假设。
- adf.test(diff(hp),k=2)
- Augmented Dickey-Fuller Test
- data: diff(hp)
- Dickey-Fuller = -4.2742, Lag order = 2, p-value = 0.01
- alternative hypothesis: stationary
- Warning message:
- In adf.test(diff(hp), k = 2) : p-value smaller than printed p-value
复制代码
这里我给定了2阶,结果是在1%的显著性水平下拒绝存在单位根的零假设,而且伴随概率非常低。
我们通常判断的一个阈值是10%,当我们利用不同阶数得出的p值分别落在阈值两侧时,就会出现截然不同的结论。这大概能解释adf检验为什么会出现不同结果的原因了,至于pp和kpss函数,里面有个lshort的逻辑参数,我试着改了改,对于p值有影响,但是对于最终结论没有颠覆性的影响。