시계열(Time series) > Autoregressive model(자기회귀모형)

2020. 12. 21. 23:51계량경제학

반응형

Autoregrssive model(AR model)은 예측하는 문제에 있어 정말 활발히 활용되고 있는 모형입니다. 해당 모형의 기본적인 아이디어는 time t에 일어난 일을 예측하는데 제일 좋은 Predictor는 t-1에서 일어난 일이라는 것입니다. 

가장 기본적인 1차 AR model은 아래와 같습니다.

좀 더 고차수를 가지는 AR model은 다음과 같이 표현할 수 있습니다.

Backshift operator를 활용하면 아래와 같습니다.

위와 같이 차수 p를 가진 모형을 일반적으로 AR(p) 모형이라고 부릅니다.

전통적인 Regression과 유사하게 생겼지만, 계수 $\phi$가 -1과 1사이의 값을 가진다는 추가적인 제약조건이 필요합니다.

Python을 활용하여 AR model을 추정해보겠습니다. 다만 여기서는,  모형을 식별하는 과정은 생락하고 차후에 Box-Jenkins Modeling Process를 다룰때 모형 식별 및 진단과정에 대해서 정리하도록 하겠습니다.

### AR model
from statsmodels.tsa.arima_model import ARMA
from scipy.stats.distributions import chi2

##AR(1)
model_ar_1 = ARMA(df["Close"], order = (1,0))
result_ar_1 = model_ar_1.fit()
result_ar_1.summary()

'''
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
const        1401.7855   1230.944      1.139      0.255   -1010.820    3814.391
ar.L1.Close     0.9999      0.000   9517.978      0.000       1.000       1.000
                                                                      
=============================================================================
'''

##AR(2)
model_ar_2 = ARMA(df["Close"], order=(2,0))
results_ar_2 = model_ar_2.fit()
results_ar_2.summary()

'''
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
const        1401.7401   1261.399      1.111      0.266   -1070.556    3874.037
ar.L1.Close     0.9593      0.001   1246.935      0.000       0.958       0.961
ar.L2.Close     0.0407      0.001     52.839      0.000       0.039       0.042
                                                                      
=============================================================================
'''

##AR(3)
model_ar_3 = ARMA(df["Close"], order=(3,0))
results_ar_3 = model_ar_3.fit()
results_ar_3.summary()

'''
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
const        1401.7771   1290.464      1.086      0.277   -1127.485    3931.039
ar.L1.Close     0.9576      0.001   1421.840      0.000       0.956       0.959
ar.L2.Close     0.0002      0.012      0.013      0.990      -0.024       0.024
ar.L3.Close     0.0422      0.012      3.482      0.000       0.018       0.066
                                                                    
=============================================================================
'''

##AR(4)
model_ar_4 = ARMA(df["Close"], order=(4,0))
results_ar_4 = model_ar_4.fit()
results_ar_4.summary()

'''
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
const        1401.7724   1290.036      1.087      0.277   -1126.652    3930.197
ar.L1.Close     0.9576      0.001   1419.407      0.000       0.956       0.959
ar.L2.Close     0.0002      0.012      0.013      0.990      -0.024       0.024
ar.L3.Close     0.0426      0.017      2.534      0.011       0.010       0.076
ar.L4.Close    -0.0004      0.012     -0.032      0.975      -0.024       0.023
                                                                      
=============================================================================
'''

추가적으로 Likelihood Ratio Test에 대해서 정리하도록 하겠습니다. Likeihood Ratio(LR)은 아래와 같이 정의됩니다.

이 때$l$은 log-likelihood를 나타냅니다. LR statistic은 Chi-sqaure 분포를 따르며 두 모형의 파라미터수 차이만큼의 자유도(DF)를 가지게 됩니다.,

최종적으로 Chi-square 분포를 활용하여 유의성 검증을 하게 되며, LR Test의 귀무가설 및 대립가설은 아래와 같습니다.

 따라서 LR Test 결과가 0.05미만이라면 Null hypothesis를 기각하고 대립가서를 채택하게 됩니다. 일반적으로 Null hypothesis에는 차수가 낮은 AR 모형을 설정하게 됩니다.

def LLR_test(mod_1, mod_2, DF=1):
    L1 = mod_1.fit().llf
    L2 = mod_2.fit().llf
    LR = (2*(L2-L1))
    p = chi2.sf(LR, DF).round(3)
    return p

LLR_test(model_ar_1, model_ar_2) ## 0.001
LLR_test(model_ar_2, model_ar_3) ## 0.001
LLR_test(model_ar_3, model_ar_4) ## 0.975
LLR_test(model_ar_2, model_ar_4, DF=2) ##0.002

ACF, PACF등을 이용하여 더 자세히 모형을 식별해야겠지만, 단순히 LR Test를 보면, AR(3)이 가장 타당한 모형이 될 가능성이 높다고 해석해볼 수 있을 것입니다.

반응형