- 과거내용
- 공적분 검정
비정상 시계열의 차분 횟수가 d라고 할 때, 이를 적분 차수라고 부른다.
시계열의 적분 차수가 모두 d일때, 시계열의 선형 결합의 적분 차수가 d보다 작을 때 시계열 사이에 공적분 관계가 존재한다고 한다.
그레인저 검정을 했을 때 로그 변환과 차분을 통해 정상성을 만족시켜 검정을 진행했다.
하지만 이런 경우 통계학적 문제는 해결되나 장기적인 관계에 대한 정보는 잃어버린다.
그래서 공적분 검정을 통해 공적분 관계를 찾으면 "오차수정모형"을 사용해
장, 단기에 대한 정보도 파악할 수 있다.
- 공적분 검정 기초
def cointegration(KDW):
from statsmodels.tsa.vector_ar.vecm import coint_johansen
coint_result = coint_johansen(KDW,1,1)
cvt_result = pd.DataFrame(coint_result.cvt)
#공적분 통계량
cvt_result.columns=['90%','95%','99%']
cvt_result.index=['KS','DW']
print(cvt_result)
-결과값
90% 95% 99%
KS 16.1619 18.3985 23.1485
DW 2.7055 3.8415 6.6349
공적분 통계량의 값을 유의수준에 따라 나타낸 결과가 나온다.
한국어로는 coint_johansen에 대한 내용이 많이 없어서
영어로 검색하며 공부했다. 아래 링크를 참고하면 좋을 듯 하다.
- 공적분 검정
def cointegration(KDW):
from statsmodels.tsa.vector_ar.vecm import coint_johansen
out = coint_johansen(KDW,1,1)
#공적분 결과값이 해당 유의수준 통계량보다 크면 유의하다.
stats = [round(x,2) for x in out.lr1] #공적분 통계량
sigs = [round(x,2) for x in out.cvt[:, 1]] #유의수준 0.05 관측치
yns = [x>y for x,y in zip(stats,sigs)] # 유의 여부(장기 안정성)
dist = np.mean(np.array(stats) - np.array(sigs)) #안정성의 강도
print('stats: ',stats)
print('sig-level: ',sigs)
print('significant_yn: ',[x>y for x,y in zip(stats,sigs)])
print('dist: ', round(dist,2))
공적분 검정은 유의수준 0.05에서 보통 판단을 한다.
즉 95% 관측치의 값보다 공적분 결과값이 크면 유의하다고 할 수 있다.
유의하다는 것은 장기적으로 안정적인 연관이 있다는 의미이다.
- 결과값
stats: [38.91, 4.3]
sig-level: [18.4, 3.84]
significant_yn: [True, True]
dist: 10.48
sig-level은 위에서 구했던 95% 관측치의 값과 동일하다.
즉 stats가 이 값보다 크기 때문에 True로 나타냈다.
즉 장기적으로 안정적인 연관이 있다는 것이다.
-결론
유의수준 0.05에서 코스피와 다우지수는
장기적으로 안정적인 연관이 있다고 할 수 있다.
이후 VAR 모형 또는 VECM 모형으로 돌아오려 하는데,
공적분 관계에 있는 시계열은 차분을 거치지 않고 바로 모형에
사용 가능하기에 VECM을 선택할 듯 하다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
EDA - 1단계 : 데이터 다루기 - 객체 내 연산 (1) | 2023.07.07 |
---|---|
EDA - 1단계 : 데이터 다루기 - 객체 간 연산 (1) | 2023.07.07 |
데이터 분석 - 데이터 추출 및 자료 구조 다루기 (2) | 2023.01.21 |
[알고리즘] 백준 2644 파이썬 - 촌수계산 (1) | 2023.01.21 |
데이터 분석 - 의사결정 나무 모델 만들기 (5) | 2023.01.19 |