R에서의 GARCH 모델
Kris Boudt
Professor of finance and econometrics
garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(model = "sGARCH"), distribution.model = "norm") garchfit <- ugarchfit(data = sp500ret, spec = garchspec) garchforecast <- ugarchforecast(fitORspec = garchfit, n.ahead = 3) sigma(garchforecast)2017-12-29 T+1 0.005034754 T+2 0.005127582 T+3 0.005217770
head(sigma(garchfit), 3)
1989-01-04 0.01099465
1989-01-05 0.01129167
1989-01-06 0.01084294
tail(sigma(garchfit), 3)
2017-12-27 0.005051926
2017-12-28 0.004947569
2017-12-29 0.004862908
선행정보 사용 편향: 미래 수익률을 사용해 변동성을 추정합니다.

for 루프 작성: 예측 시점을 따라 반복하며 ugarchfit()으로 모형을 추정하고 ugarchforecast()로 변동성을 예측합니다 rugarch 패키지의 내장 함수 ugarchroll()예측 시점에 사용 가능한 모든 수익률을 사용합니다

예측 시점에 사용 가능한 최신 수익률 관측치 중 고정 개수만 사용합니다

ugarchroll()의 계산 비용은 예측 시점 전반에 걸친 루프입니다:모형을 매 K개 관측치마다 추정하여 계산 비용을 줄입니다

garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
지정할 인자:
data : 사용할 수익률 데이터n.start: 초기 추정 표본 크기refit.window: 시간 경과에 따른 표본 변경 방식: "moving" 또는 "expanding"refit.every: 모형 재추정 주기4961개 관측치의 EUR/USD 일간 수익률(시작일 1999-01-05)에서, 2500개 관측치의 이동 추정 창 사용:

메서드 coef()는 각 추정에 대한 추정 계수 목록을 반환합니다
coef(garchroll)[[1]]
$index
"2008-12-08"
$coef
Estimate Std. Error t value Pr(>|t|)
mu -1.480000e-04 1.330915e-04 -1.11201737 0.2661307
ar1 -2.953484e-03 1.985344e-02 -0.14876432 0.8817396
omega 7.498928e-08 5.587618e-06 0.01342062 0.9892922
alpha1 2.805079e-02 6.401139e-02 0.43821564 0.6612300
beta1 9.709400e-01 6.080197e-02 15.96889122 0.0000000
shape 1.098068e+01 2.609293e+01 0.42082981 0.6738794
coef(garchroll)[[1]]$coef # 2008-12-08
Estimate Std. Error t value Pr(>|t|)
omega 7.498928e-08 5.587618e-06 0.01342062 0.9892922
alpha1 2.805079e-02 6.401139e-02 0.43821564 0.6612300
beta1 9.709400e-01 6.080197e-02 15.96889122 0.0000000
coef(garchroll)[[5]]$coef # 2016-11-28
Estimate Std. Error t value Pr(>|t|)
omega 8.982527e-08 2.639680e-05 0.003402885 9.972849e-01
alpha1 4.149787e-02 2.550381e-01 0.162712424 8.707449e-01
beta1 9.573885e-01 2.195782e-01 4.360125676 1.299878e-05
EUR/USD에서 n.start = 2500이면, 첫 예측은 관측치 2501(2008-12-09)입니다:

preds <- as.data.frame(garchroll)
head(preds, 3)
Mu Sigma Skew Shape Shape(GIG) Realized
2008-12-09 -8.271288e-05 0.01196917 0 10.98068 0 0.0003864884
2008-12-10 -1.495786e-04 0.01179742 0 10.98068 0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929 0 10.98068 0 -0.0203099142
참고:
preds$Mu: 예측 평균 시계열preds$Sigma: 예측 변동성 시계열garchvol <- xts(preds$Sigma, order.by = as.Date(rownames(preds)))
plot(garchvol)

preds <- as.data.frame(garchroll)
head(preds)
Mu Sigma Skew Shape Shape(GIG) Realized
2008-12-09 -8.271288e-05 0.01196917 0 10.98068 0 0.0003864884
2008-12-10 -1.495786e-04 0.01179742 0 10.98068 0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929 0 10.98068 0 -0.0203099142
2008-12-12 -8.845214e-05 0.01199756 0 10.98068 0 -0.0041201588
2008-12-15 -1.362683e-04 0.01184438 0 10.98068 0 -0.0230532787
2008-12-16 -8.034966e-05 0.01228900 0 10.98068 0 -0.0105720492
preds$Mu와 preds$Sigma의 정확도는 preds$Realized와 비교하여 평가합니다
# 평균의 예측 오차
e <- preds$Realized - preds$Mu
mean(e ^ 2)
3.867998e-05
# 평균의 예측 오차
e <- preds$Realized - preds$Mu
# 분산의 예측 오차
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2)
6.974161e-09
스튜던트 t 분포의 표준 GARCH
tgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"), distribution.model = "std")
garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
왜도 t 분포의 GJR GARCH
gjrgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
gjrgarchroll <- ugarchroll(gjrgarchspec, data = EURUSDret, n.start = 2500,
refit.window = "moving", refit.every = 500)
스튜던트 t 분포의 표준 GARCH
preds <- as.data.frame(garchroll)
e <- preds$Realized - preds$Mu
d <- e ^ 2 - preds$Sigma ^ 2
mean(d ^ 2) # yields 6.974161e-09
왜도 t 분포의 GJR GARCH
gjrpreds <- as.data.frame(gjrgarchroll)
e <- gjrpreds$Realized - gjrpreds$Mu
d <- e ^ 2 - gjrpreds$Sigma ^ 2
mean(d ^ 2) # yields 6.965095e-09
R에서의 GARCH 모델