본문 바로가기
통계/시계열 분석

[시계열 분석] ADF 검정 (Augmented Dickey-Fuller 검정) with R

by 근수짜세 2022. 8. 18.

 

 단위근 검정을 통해 모형이 단위근(확률적 추세)을 가지는지 판별할 수 있다. 같은 말로 모형이 정상성을 가지는지 또한 단위근 검정을 통해 확인할 수 있다. 대표적인 단위근 검정으로는 ADF검정과 KPSS검정이 있는데 이 둘은 가설이 반대로 설정된다.

  $H_{0}$ $H_{1}$
ADF 검정 $ \gamma=0 $ (Has unit root) $ \gamma <0 $ (Stationary)
KPSS 검정 $\sigma^{2}=0$ (Stationary) $\sigma^{2}>0$ (Has unit root)

 

 어떤 검정이 더 좋고 나쁘고는 차이가 없다고 한다. 다만 통계학개론에서 배웠듯이 어떤 오류를 통제하고 싶은지에 따라 입맛대로 선택하면 될 듯 하다. 즉 Stationary라고 판단했을 때 생기는 오류를 조절하고 싶으면 ADF검정을, 단위근을 가진다고 판단했을 때 생기는 오류를 조절하고 싶으면 KPSS검정을 선택하면 된다.

 

Augmented DF 검정


 시계열 $y_{t}$가 AR(p)를 따른다는 것을 기본으로 한 검정 방법이다. 특별한 경우인 AR(1)에 대해서만 검정통계량을 유도하고 그 이후 차수는 유도없이 바로 받아들이자. 재귀식으로 대입하면 일반적인 p에 대해서도 쉽게 유도된다.


  • DF :

\begin{align} y_{t} & = \phi_{1}y_{t-1} + a_{t} \\ \nabla y_{t} & = (\phi_{1}-1)y_{t-1} + a_{t} \tag{1} \end{align}

  • 상수를 포함한 DF :

\begin{align} y_{t} & = \alpha + \phi_{1}y_{t-1} + a_{t} \\ \nabla y_{t} & = \alpha + (\phi_{1}-1)y_{t-1} + a_{t} \tag{2} \end{align}

  • 선형 추세를 포함한 DF :

\begin{align} y_{t} & = \alpha +\beta t + \phi_{1}y_{t-1} + a_{t} \\ \nabla y_{t} & = \alpha + \beta t + (\phi_{1}-1)y_{t-1} + a_{t} \tag{3} \end{align}


 $\gamma = \phi_{1}-1$이라하면 AR(1)모형에서 단위근 검정 $H_{0} : \phi_{1} =1$은 $H_{0} : \gamma = 0$ 검정과 동일하게 된다. (AR(p)모형에 대해 일관된 표기법을 쓰기위해 $\gamma$로 바꿨을 뿐이다.) 이 때 검정통계량은 다음과 같다.

$$ \tau = \frac{\hat{\gamma}}{\sqrt{Var(\hat{\gamma})}} $$

 여기서 $\tau$의 분포는 왜도(Skewness)가 양수인 DF분포를 따른다. DF분포는 가정된 모형에 따라 다음과 같은 형태를 띈다.

 

 DF검정은 단측검정이기에 분포의 왼쪽 꼬리부분만 확인하면 된다. DF검정의 Motivation에 대해 간단히 설명하자면, 단위근 검정으로 z-검정을 사용하게 되면 단위근이 존재함(H0)에도 귀무가설을 기각하게 되는 오류를 범할 가능성이 커지게 된다. 따라서 제 1종 오류를 유지하는 새로운 임계치 설정이 필요했기에 모의실험을 통한 DF분포표가 제시된거라 볼 수 있다.

 

AR(p)모형으로 확장해보자. $\gamma $는 다음과 같이 유도된다. (유도 생략)

$$\gamma = -(1 - \Sigma_{i=1}^{p} \phi_{i} )$$

이후 절차는 p=1일 때와 동일하게 $H_{0} : \gamma=0$을 검정하면 된다.

 

 ADF검정에 대해 두 가지만 더 알아두자. 첫 번째는 ADF는 AR(p)를 기본으로 한 검정이기에 p가 알려져있다고 가정한 검정 방법이다. p는 모르는게 일반적인 상황이기에 p값을 결정해야한다. (p값을 선택하는 여러 절차들이 있던데 생략.) 두 번째로 MA(q)의 경우 가역성조건만 만족하면 AR(∞)로 재표현 가능하기 때문에 ARMA(p,q)가 아니라 AR(p)만 고려해도 충분하다.

 

마지막으로 R에서 ADF test를 수행해보자. 'tseries' 패키지의 'adf.test()' 함수를 이용하면 p값을 자동으로 선택(Documentation)하고 검정을 수행한다. 주의할 점은 선형추세와 절편을 고려한 모형만 사용할 수 있다. (Issue) 만약 시계열의 절편이 없거나 선형적 추세가 존재하지 않는다는 사실을 사전적으로 알고 있다면 검정결과를 신뢰할 수 없다. 'aTSA' 패키지의 'adf.test()'는 세 종류({no trend, no intercept}, {no trend, intercept}, {trend, intercept})의 결과를 모두 출력해준다.  두 패키지의 ADF 검정결과를 비교해보자.

library(tseries)
library(aTSA)
set.seed(1234)
WN <- runif(100, min = -0.5, max = 0.5)
WN.ts <- ts(data=WN, start=c(1,1),frequency = 1)

tseries::adf.test(WN.ts, alternative='stationary')
# Augmented Dickey-Fuller Test
# 
# data:  WN.ts
# Dickey-Fuller = -5.0505, Lag order = 4, p-value = 0.01
# alternative hypothesis: stationary
aTSA::adf.test(WN.ts, nlag = 4+1, output = TRUE)
# Augmented Dickey-Fuller Test 
# alternative: stationary 
# 
# Type 1: no drift no trend 
# lag    ADF p.value
# [1,]   0 -10.74    0.01
# [2,]   1  -6.35    0.01
# [3,]   2  -5.57    0.01
# [4,]   3  -4.82    0.01
# [5,]   4  -4.08    0.01
# Type 2: with drift no trend 
# lag    ADF p.value
# [1,]   0 -11.24    0.01
# [2,]   1  -6.81    0.01
# [3,]   2  -6.18    0.01
# [4,]   3  -5.55    0.01
# [5,]   4  -4.98    0.01
# Type 3: with drift and trend 
# lag    ADF p.value
# [1,]   0 -11.36    0.01
# [2,]   1  -6.93    0.01
# [3,]   2  -6.30    0.01
# [4,]   3  -5.68    0.01
# [5,]   4  -5.05    0.01
# ---- 
#   Note: in fact, p.value = 0.01 means p.value <= 0.01

댓글