Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sm-segmentation
- Dice Loss
- loss function
- LightGBM
- SSAC
- Satellite Image
- segmentation
- Satel
- 시계열
- focal loss
Archives
- Today
- Total
고양이는 털털해
시계열 : arima, garch 본문
시계열모형을 이용한 예측
- 목차
- 1. ARIMA 모형의 진단
- 1) 과대적합진단
- 2) 잔차분석
- 2. ARIMA 모형의 예측
- 1) AR 모형의 예측
- 2) MA 모형의 예측
- 3) ARMA 모형의 예측
- 4) ARIMA 모형의 예측
- 3. 변동성 모형 작성 및 예측
- 1) ARCH 모형
- 2) GARCH 모형
- 1. ARIMA 모형의 진단
1. ARIMA 모형의 진단¶
- 추정한 모형이 타당한지를 검토한다.
- 1) 과대적합진단을 통해 간결원칙으로 정한 간결한 모델보다 복잡한 모형이 더 설명력이 있는지를 판단한다.
- 2) 잔차분석을 통해 추정한 모델의 예측값에 대한 잔차가 랜덤한지 판단한다.
In [1]:
shhh <- suppressPackageStartupMessages # 불러올 때 연결 패키지 등의 메시지 출력하지 않도록 하기 위해 작성
shush <- suppressWarnings # 불러올 때 경고 메시지 출력하지 않도록 하기 위해 작성
shush(shhh(library(dplyr))) # 파이프 오퍼레이터 쓰려고 불러옴
In [2]:
# 임의 시계열 만들기
options(repr.plot.width=20, repr.plot.height=7) # 그래프 길이 높이 지정하려고 작성
set.seed(417)
ar1_sim <- ts(arima.sim(list(order=c(1,0,0), ar=0.6), n=201), start=1970, freq=4) # 1970년부터 2021년 1분기까지의 계수가 0.6인 임의의 AR(1)형태의 시계열을 작성
ar1_sim %>% ts.plot() # 생성된 임의의 시계열을 시계열 그래프로 표현
In [3]:
# 잠정모형으로 AR(1) 모형 작성하기
ar1_fit <- arima(ar1_sim, order=c(1,0,0)) # AR(1) 모형 작성 ; AR(1) = ARIMA(1,0,0)
ar1_fit
- z-value 와 p-value의 계산
In [4]:
shush(shhh(library(lmtest))) # coeftest 사용하려기 위해 불러옴
coeftest(ar1_fit)
- z-value 또는 t-value의 계산
- $\frac{coefficient}{s.e.}$
In [5]:
0.555923/0.058645 # ar1 coefficient estimate z value 계산
In [6]:
0.069896/0.161196 # intercept estimate z value 계산
- p value의 계산
In [7]:
2*pnorm(q=0.4336, lower.tail=FALSE) # 표준정규분포에서의 확률
In [8]:
shush(shhh(library(ggplot2)))
ggplot(data.frame(x=c(-3,3)), aes(x=x)) +
geom_area(stat='function', fun=dnorm, xlim=c(qnorm(1-0.332), 3), fill='steelblue') +
geom_area(stat='function', fun=dnorm, xlim=c(-3, qnorm(.332)), fill='steelblue') +
stat_function(fun=dnorm)
In [1]:
2*pnorm(q=1.96, lower.tail=FALSE) # 95%의 퀀타일 = 1.96
In [10]:
ggplot(data.frame(x=c(-3,3)), aes(x=x)) +
geom_area(stat='function', fun=dnorm, xlim=c(qnorm(.975), 3), fill='steelblue') +
geom_area(stat='function', fun=dnorm, xlim=c(-3, qnorm(0.025)), fill='steelblue') +
stat_function(fun=dnorm)
- 또 다른 p 값 계산 법
In [11]:
ar1_fit$coef
In [12]:
ar1_fit$var.coef
In [13]:
(1-pnorm(abs(ar1_fit$coef)/sqrt(diag(ar1_fit$var.coef))))*2
- arima 모형 적합이 최대가능도 방식으로 이루어졌기 때문에 likelihood ratio 계산을 통해 p 값을 계산할 수 있다고도 한다.
1.1 과대적합진단¶
- 더 복잡하게 작성한 새로운 모형이 간단하게 작성한 모형보다 더 설명력이 있는지를 판단하고 복잡한 모형이 더 적합하다면 복잡한 모형을 선택한다.
- 이를 위해서
- 1) 복잡한 모형의 모수가 유의한지를 확인한다.
- 2) 복잡한 모형의 모수가 유의하다면 복잡한 모형의 잔차 분산이 간단한 모형의 잔차 분산보다 작은지를 비교한다.
- 3) 복잡한 모형이 모수도 유의하고 잔차분산도 더 작다면 복잡한 모형을 선택한다.
In [14]:
# 과대적합진단을 위해 한단계 더 복잡한 ARIMA 모형 작성하기
ar2_overfit <- arima(ar1_sim, order=c(2,0,0)) # AR(2) 모형 작성하기
ar1ma1_overfit <- arima(ar1_sim, order=c(1,0,1)) # ARMA(1,1) 모형 작성하기
ar2_overfit
ar1ma1_overfit
In [15]:
coeftest(ar2_overfit)
- 추가된 ar2 항 계수의 p value 를 통해 유의성 판단
- ar2 항 계수가 유의하지 않다.
In [16]:
coeftest(ar1ma1_overfit)
- 추가된 ma1항 계수의 p value를 통해 유의성 판단
- ma1 항 계수가 유의하지 않다.
1.2 잔차분석¶
- 잔차가 백색잡음 형태인지를 검정
- 1) 잔차 도표를 그려본다.
- 2) 잔차에 자기상관이 남아있는지 상관도표와 부분상관도표를 그려본다.
- 3) 포트맨두 검정(융-박스 검정)을 통해 잔차의 이론적 자기상관계수가 0인지를 검정한다. ; $H_0$ : 자기상관계수 = 0
- 4) 잔차의 스펙트럼을 통해서 잔차가 백색잡음인지를 판단한다.
- 스펙트럼을 이용해 잔차의 임의성(랜덤성)을 검정하는 방법으로 피셔-카파 검정과 베르틀레 코모고로프-스미르노프 검정이 있다고 한다.
- 5) 잔차가 정규분포를 따르는지 정규성 검정을 시행하기도 한다.
- 정규성 검정은 자크베라 검정 또는 샤피로 윌크스 검정을 이용한다.
- 시계열 표본수가 일정 수 이상이면 중심극한정리에 따라 잔차가 정규분포에 수렴하게 되므로 실제 분석에서 자주 생략한다고 한다.
- 다만 시계열에 이분산성이 있을 경우 이분산성 모형화 할 때 유용하게 사용할 수 있다고 한다.
- 보통 1~3까지가 기본검정이며 이를 묶어서 보여주는 r 함수가 많이 있다.
- 잔차분석 함수 1
In [17]:
shush(shhh(library(forecast))) # checkresiduals 함수 쓰기 위해 불러옴
options(repr.plot.width=15, repr.plot.height=10)
checkresiduals(ar1_fit)
- 잔차에 특별한 패턴이 없는 것으로 보인다.
- 대부분의 자기상관계수가 점선 내 존재한다.
- 잔차의 분포가 정규분포와 유사해 보인다.
- 모형이 적절한 것으로 보인다.
- 잔차분석 함수 2
In [18]:
options(repr.plot.width=10, repr.plot.height=10)
tsdiag(ar1_fit)
- 표준화된 잔차에 트별한 패턴이 없는 것 같다.
- 거의 모든 자기상관계수가 점선 내에 있다.
- 융 박스 검정의 모든 시차에서 유의수준 0.05보다 큰 유의확률이 나타난다.
- 모형이 적절한 것으로 보인다.
+ 목차로¶
2. ARIMA 모형의 예측¶
- 실제 시계열이 추정한 모형에서 생성되었고 별 다른 일이 없으면 이러한 패턴대로 움직일 것이라는 가정 하에 동 모형을 이용해 미래의 시계열을 예측한다.
- 즉 단기적으로는 예측과 살제 관측값 간 큰 차이가 없으나 장기적으로 충격 등으로 시계열 패턴이 바뀌는 경우 예측값과 실제 관측값 간 차이가 커질 수 있다.
- 표기법의 이해
- 관측값이 n개가 있다고 할 때 마지막 관측값을 $Y_n$이라고 미래 $l$ 시차 후 관측하게 될 시계열 값을 $Y_{n+1}$, 모델을 통해 예측하는 값은 $Y_n(l)$이라고 한다.
- 예측에는 오차가 따르는데 이를 예측오차라 하며 $l$ 시차 후 예측값에 대한 오차를 $\hat{\varepsilon}_n(l)$이라고 한다.
- $ \hat{\varepsilon}_n(l) = Y_{n+1}-Y_n(l)$ : 예측오차 = 실제 관측값 - 예측값
- 예측 오차가 크다면 모형 설정이 잘못 되었거나 최근 시계열의 행태가 변했다고 할 수 있다. 예측 오차를 살펴봄으로써 모형을 수정해야하는지를 알 수 있다.
- 좋은 예측값을 얻기 위해서 예측오차의 제곱의 기댓값을 최소화 하는 과정을 통해서 예측값을 결정하는 경우 이를 통해 얻은 예측값을 최소 MSE 기준 예측값이라고 한다.
- $Y_{n+l}$의 95% 예측 구간
- $Y_n(l) \pm 1.96 \sqrt{Var[\hat{\varepsilon_n}(l)]}$
- $l$이 증가하면 예측오차 $\hat{\varepsilon_n}(l)$가 매우 커지면서 $Var[\hat{\varepsilon_n}(l)]$도 매우 커지면서 예측구간이 의미 없는 경우가 많다고 한다.
- 시계열 모형에 의한 예측은 주로 단기 예측에 쓰이며 장기 예측에는 적당하지 않다.
- AR, MA, ARMA 형태의 안정 시계열은 시간이 지남에 따라 예측값들이 수렴한다.
2.1 AR 모형의 예측¶
- AR(1) 모형 : $Y_t = \mu+ \phi Y_{t-1} + \varepsilon_t$
- $Y_n(l)$의 계산 : 최소 MSE 기준에 의해 도출할 경우
- $Y_n(1) = \hat{\mu} + \hat{\phi}Y_n$
- $Y_n(2) = \hat{\mu} + \hat{\phi}Y_n(1) = \hat{\mu} + \hat{\phi}(\hat{\mu} + \hat{\phi}Y_n) = \hat{\mu} + \hat{\phi}\hat{\mu} + \hat{\phi}^2Y_n = (1+\hat{\phi})\hat{\mu} + \hat{\phi}^2Y_n$
- $Y_n(l) = (1+\hat{\phi}+\hat{\phi}^2 + \cdots + \hat{\phi}^{l-1}) \hat{\mu}+ \hat{\phi}^lY_n$
- 시계열이 단위근이 없는 안정 시계열 모형이면 $|\hat{\phi}| <1$ 이므로 공비의 절대값이 1보다 작고 초항이 1인 등비수열의 합이 $\hat{\mu}$에 곱해지게 되며 $Y_n$에 곱해지는 값 $\hat{\phi}$는 $l$이 커질 수록 0에 가까워진다.
2.2 MA 모형의 예측¶
- MA(1) 모형 : $Y_t = \mu + \theta \varepsilon_{t-1} + \varepsilon_t$
- $Y_n(l)$의 계산 : 최소 MSE 기준에 의해 도출할 경우
- $Y_n(1) = \hat{\mu} + \hat{\theta}\cdot\hat{\varepsilon_n}$
- $l>2$인 경우 MA(1) 구조식은 예측에 도움이 되지 않고 $Y_n(l) = \hat{\mu}$로 예측된다.
2.3 ARMA 모형의 예측¶
- ARMA(1,1) 모형 : $Y_t = \mu + \phi Y_{t-1} + \theta \varepsilon_{t-1} + \varepsilon_t$
- $Y_n(l)$의 계산
- $Y_n(1) = \hat{\mu} + \hat{\phi}Y_n + \hat{\theta}\hat{\varepsilon_n}$
- $l>2$인 경우 MA항은 사라지며 AR 형태만 남는다. 즉 AR모형의 $Y_n(l)$의 예측값과 동일한 형태가 된다.
- ARMA(p,q) 모형의 형태와 예측값?
2.4 ARIMA 모형의 예측¶
- 불안정시계열 $Y_t$를 1차 차분한 시계열이 ARMA(p,q)를 따르면 $Y_t$는 ARIMA(p,1,q) 모형을 따른다고 할 수 있다.
- ARIMA(1,1,0) 모형
- $W_t = Y_t - Y_{t-1}$
- $W_t = \mu + \phi W_{t-1}+\varepsilon_t$
- $\begin {aligned} (Y_t - Y_{t-1}) &= \mu + \phi(Y_{t-1} - Y_{t-2})+\varepsilon_t \\ Y_t &= \mu + Y_{t-1} + \phi Y_{t-1} - \phi Y_{t-2} + \varepsilon_t \\ Y_t &= \mu + (1+\phi) Y_{t-1} -\phi Y_{t-2} + \varepsilon_t \end {aligned}$
- AR(2) 모형과 유사한 형태가 된다.
- $d \geq 2$ 인 경우에도 ARIMA(p,d,q) 의 예측은 ARMA(p+d, q)의 예측과 동일하다.
- $d=2$인 경우
- $W_t = (Y_t - Y_{t-1}) - (Y_{t-1} - Y_{t-2})$
- 위의 식으로 ARIMA(1,2,0) 모형을 풀어보면 AR(3) 모형과 유사한 형태가 되는 것을 확인할 수 있다.
- $d=2$인 경우
In [19]:
shush(shhh(library(quantmod))) # getSymbols 사용하려고 불러옴
ks <- getSymbols(Symbols='^KS11', from='2016-01-01', to='2021-04-14', auto.assign=FALSE)
head(ks)
In [20]:
summary(ks)
In [21]:
colSums(is.na(ks))
In [22]:
na_list <- which(is.na(ks$KS11.Close))
for (i in na_list) {
print(ks[i,])
}
- 야후 파이낸스에서 해당 값들이 결측치로 들어 있어서 이런 결측치가 존재한다.
- 네이버 금융은 2019년 11월 14일 kospi 값이 있는 것을 보니 야후 파이낸스의 문제인 모양이다.
- 결측치를 제거하고 진행하기로 한다.
In [23]:
kospi_close <- na.omit(ks$KS11.Close) # kospi 데이터 중 종가만 결측치 제거하고 가져옴
options(repr.plot.width=20, repr.plot.height=10)
ggplot(data=kospi_close, aes(x=index(kospi_close), y=KS11.Close)) +
geom_line(size=1.2, color='red', alpha=0.5)
In [24]:
acf(log(kospi_close))
- 로그를 취하고 자기상관도표를 그려보면 자기상관계수가 시간이 지남에 따라 서서히 감소하는 추세가 있는 시계열임을 확인할 수 있다.
- 추제 제거를 위해 차분을 한다.
In [25]:
kospi_close %>% log() %>% diff() %>% na.omit() %>% acf()
- 2차에서 유의하게 큰 값이 있는 것으로 보인다.
- ma2 모형으로 식별하고 모형 적합을 진행해 보기로 한다.
In [26]:
kospi_close %>% log() %>% diff() %>% na.omit() %>% pacf()
- 부분자기상관도표를 그려보면 2기에서 유의하게 큰 값이 있는 것처럼 보인다.
- ar2 모형으로 식별해 모형을 적합해 보기로 한다.
In [27]:
plot(diff(log(kospi_close)))
- 대체적으로 안정적으로 보이나 변동성이 커졌다 작아지는 구간이 있다.
In [28]:
ggplot(kospi_close, aes(x=diff(log(kospi_close)))) +
geom_histogram(aes(y=..density..), colour="black", fill="white", bins= 25)+
geom_density(alpha=.2, fill="pink")
- 꼬리가 길고 뾰족한 분포를 갖는 것으로 보인다.
In [29]:
spectrum(na.omit(diff(log(kospi_close))), spans=c(2,2), main="kospi_close", col="black")
- 스펙트럼 그림을 그려 봤을 때 특별히 값이 큰 주파수는 없는 것 같다.
- 추세나 계절성이 있는 것으로 판단하기는 어려울 것 같다.
- arima(2,1,2) 모형으로 적합해 본 후 과대적합진단을 진행해 보기로 하자.
- arima (2, 1, 2)로 적합
In [30]:
kospi_fit1 <- arima(log(kospi_close), order=c(2,1,2))
coeftest(kospi_fit1)
print('')
print('--------------------------------------------------------------------')
print('')
summary(kospi_fit1)
- ar2항이 유의하지 않다.
- arima(2, 1, 3) 적합
In [31]:
kospi_fit2 <- arima(log(kospi_close), order=c(2,1,3))
coeftest(kospi_fit2)
print('')
print('--------------------------------------------------------------------')
print('')
summary(kospi_fit2)
- ma 3항이 유의하지 않다.
In [32]:
kospi_fit3 <- arima(log(kospi_close), order=c(3,1,2))
coeftest(kospi_fit3)
print('')
print('--------------------------------------------------------------------')
print('')
summary(kospi_fit3)
- ar3 항이 유의하지 않다.
- arima (1, 1, 2) 적합
In [33]:
kospi_fit5 <- arima(log(kospi_close), order=c(1,1,2))
coeftest(kospi_fit5)
print('')
print('--------------------------------------------------------------------')
print('')
summary(kospi_fit5)
- ar2항이 유의하지 않았으므로 arima(1,1,2)로 적합해 보니 모든 항이 유의한 것으로 나타났다.
- auto arima 적합
In [34]:
kospi_fit_auto <- auto.arima(log(kospi_close))
kospi_fit_auto
coeftest(kospi_fit_auto)
- 모든 항이 유의하진 않지만 aic 값이 제일 작다.
- auto-arima로 적합된 모델로 추후 분석을 진행해 보기로 한다.
In [35]:
checkresiduals(kospi_fit_auto)
In [36]:
tsdiag(kospi_fit_auto)
In [37]:
plot(forecast(kospi_fit_auto, h= 60))
- ma 모형이기 때문에 점 추정은 일정한 값으로 유지
- 기간이 지남에 따라 오차가 급격히 증가한다.
- 안정시계열 모형만으로 kospi 시계열을 예측하기는 어려울 수도 있겠다.
+ 목차로¶
3. 변동성 모형 작성 및 예측 ; ARCH, GARCH 모형¶
- 참고영상1, 참고영상2, 참고영상3, 참고영상4
- 시간에 따라 분산이 변하는 경우 변동성이 있다고 하며 금융시장 데이터는 이슈에 따라 크게 변화하고 변동성이 생겼다가 사라질 때까지 시간이 걸리는 특성이 있다.
- 즉 어제의 변동성이 컸으면 오늘의 변동성도 크다.
- 따라서 이전의 오차항이 현재의 분산에 영향을 갖는 조건부 분산을 연구하는 모델이 나타났다.
- 이처럼 변동성이 큰 상황이 뭉쳐서 발생하여 수익률의 분포가 정규분포보다 꼬리가 두터운 경우 ; 극단적 상황이 정규분포보다 자주 관측 되는 경우, 이를 설명하는 모델로 ARCH, GARCH 모형이 있다.
- ARIMA 모델로 추정 후 잔차를 변동성 모형으로 설명하기도 한다.
- 즉 어제의 변동성이 컸으면 오늘의 변동성도 크다.
- 표현의 정리 : 수익률 $r_t$
- $p_t, p_{t+1}$을 각각 현재의 자산가격, 1기 후의 자산가격이라고 할 때 $r_t = \frac{p_{t+1}-p_t}{p_t}$
- 수익률은 자산가격을 로그 차분한 값과 같다고 한다.
- 수익률 식을 $p_{t+1}$에 대해 정리하면 $p_{t+1} = p_t(1+r)$
- 자산가격을 로그 차분하면 $\log{p_{t+1}} - \log{p_t}$
- 이 식에 $p_t$에 대해 정리한 수익률 식을 대입하면 $ \log{p_t(1+r)} - \log{p_t} = \log{\frac{p_t(1+r)}{p_t}} = \log{(1+r)} \approx r, \quad if\; r<1$
- $log(1+r) \approx r$ 이해 못함 링크
- 이 식에 $p_t$에 대해 정리한 수익률 식을 대입하면 $ \log{p_t(1+r)} - \log{p_t} = \log{\frac{p_t(1+r)}{p_t}} = \log{(1+r)} \approx r, \quad if\; r<1$
- $p_t, p_{t+1}$을 각각 현재의 자산가격, 1기 후의 자산가격이라고 할 때 $r_t = \frac{p_{t+1}-p_t}{p_t}$
3.1 ARCH 모형¶
- 변동성 모형 또는 조건부 분산 모형이라고도 한다.
- $r_t$ 가 자산 수익률이라고 할 때.
- $E(r_t|r_{t-1}, r_{t-2}, \dots)=0$ 가정 하에 조건부 분산은 $Var(r_t|r_{t-1},r_{t-2}, \dots) = E(r_t^2|r_{t-1}, r_{t-2}, \dots)$ 를 만족한다고 한다.
- ARCH(1) 모형:
- $r_t = \sigma_{t|t-1}\varepsilon_t$
- 현재 수익률은 이번기 오차와 이번기 조건부 분산에 의해 결정 ; 동기 오차에 의해 예측할 수 없게 변화한다는 의미이지 않을까.
- $\sigma_{t|t-1}^2 = \alpha_0 + \alpha_1 r_{t-1}^2$
- 현재 조건부 분산은 전기 오차로 결정된 수익률의 제곱에 의해 결정. 이전 오차의 제곱이 동기 조건부 분산에 영향을 준다. 이전의 충격으로 수익률이 커지거나 작아지면 다음기 분산이 커지거나 작아진다.
- $r_t = \sigma_{t|t-1}\varepsilon_t$
- ARCH(p) 모형:
- $\sigma_{t|t-1}^2 = \alpha_0 + \sum_{i=1}^p \alpha_i r_{t-i}^2$
- $r_t$ 기대값이 0이고 시점간 공분산 값이 0이다. 조건부 기댓값은 $r_t$는 예측이 불가능하지만 조건부 분산 $r_t^2$는 예측이 가능하다.
- 검정법 ARCH-LM 검정
- 현재의 분산이 과거의 오차항의 제곱에 의해 표현이 될 때 과거 오차항의 계수가 모두 0인지를 귀무가설로 두고 검정
- 검정 통계량 : (총 관측치 - ARCH 항 수 p) 모형의 결정계수 R^2 ~ 카이제곱 분포(자유도 ARCH 항 수 p)
- ARCH 모델은 조건부 분산에 영향을 미치는 것이 전기의 수익률이기 때문에 변동성이 한동안 유지되는 것을 잘 예측하지 못한다고 한다.
3.2 GARCH 모형¶
- ARCH 모형을 일반화 한 모형이 GARCH(p,q)이다.
- AR(1) 에서 ARMA(1,1)로 확장되는 것과 유사한 방식으로 ARCH(1) 에서 GARCH(1,1)으로 확장된다.
- GARCH(1,1) 모형:
- $r_t = \sigma_{t|t-1}\varepsilon_t$
- 이 식은 동일
- $\sigma_{t|t-1}^2 = w + \alpha r_{t-1}^2 + \beta \sigma_{t-1|t-2}^2$
- $r_t = \sigma_{t|t-1}\varepsilon_t$
- GARCH(p,q) 모형:
- $r_t = \sigma_{t|t-1}\varepsilon_t$
- $\sigma_{t|t-1}^2 = w + \sum_{i=1}^p{\alpha_i r_{t-i}^2} + \sum_{j=1}^q{\beta_j \sigma_{t-j|t-j-1}^2}$
- GARCH 모형의 작성 절차
- 1) 자크-베라 검정 같은 정규성 검정을 통해 시계열이 정규분포를 따르는지 검정 : GARCH 모형 시계열은 정규분포보다 꼬리가 두껍다고 한다.
- 2) 륭-박스 검정 또는 ARCH-LM 검정으로 시계열의 제곱에 대해 자기상관이 존재하는지 검정
- 3) 2)번 검정 결과 조건부 이분산성이 존재하지 않는다는 귀무가설을 기각하면 ARCH 형태의 이분산성이 존재한다고 판단한다.
- 4) GARCH 모형 작성 후 모형이 제대로 작성되었는지는 잔차 제곱의 상관도표 또는 잔차제곱에 대한 륭-박스 검정을 통해 잔차에 이분산성이 없고 독립적이라고 판단할 수 있는지를 살펴본다.
- ARMA 모형과 GARCH 모형의 조합
- 상기 GRACH(p,q) 의 평균함수는 $r_t$가 백색잡음인 $\varepsilon$에 대한 곱으로 되어 있어 평균이 0인 함수를 뜻한다.
- GARCH 모형에 ARMA 모형을 결합해 $r_t$를 구하는 평균함수를 0이 아닌 ARMA 형태로 구성할 수 있다.
- $r_t = \mu + \phi r_{t-1} + \theta \nu_{t-1} + \nu_t$
- ARMA 모형 형태
- $\nu_t = \sigma_{t|t-1} \varepsilon_t$
- $\sigma_{t|t-1}^2 = w+ \alpha \nu_{t-1}^2 + \beta \sigma_{t-1|t-2}^2$
- $r_t = \mu + \phi r_{t-1} + \theta \nu_{t-1} + \nu_t$
In [42]:
gar_kospi <- kospi_close %>% log() %>% diff() %>% na.omit()
hist(gar_kospi, breaks=100, freq=FALSE, main='dlog Kospi')
In [52]:
shush(shhh(library(tseries))) # 자크베라 검정 사용하기 위해 불러옴
jarque.bera.test(gar_kospi)
- 정규분포가 아니다.
In [53]:
options(repr.plot.width=10, repr.plot.height=5)
acf(gar_kospi)
In [54]:
pacf(gar_kospi)
In [55]:
acf(gar_kospi^2)
In [56]:
pacf(gar_kospi^2)
- 정규성검정을 통과하지 못했다.
- 제곱은 임계치 밖에 있다. 백색잡음으로 보기 어렵다.
- 이분산성을 가진 시계열일 수 있다. garch나 arch모형으로 적합해 보는 것이 좋겠다.
In [57]:
shush(shhh(library(fGarch)))
gg <- garchFit(~garch(1,1), gar_kospi)
summary(gg)
- 계수들은 5% 유의수준에서 대체로 유의하다.
- 잔차(r)와 잔차 제곱(r^2)의 융박스 검정은 유의하지 않아 변동성이 남아있지 않는 것으로 보여 모형이 적절하게 작성된 것 같다.
- 잔차에 대한 arch lm 검정 결과 이분산성이 존재하지 않는 것으로 보인다.