Подключаем пакет для оценки гарчей в R и прочие удобства:
library("rugarch")
library("forecast")
library("lubridate")
library("xts")
В пакете rugarch
есть встроенный набор данных по индексу SP500
. Достаём этот набор данных из недр пакета:
data("sp500ret")
Посмотрим на начало ряда:
head(sp500ret)
## SP500RET
## 1987-03-10 0.008840447
## 1987-03-11 -0.001892734
## 1987-03-12 0.003129678
## 1987-03-13 -0.004577455
## 1987-03-16 -0.005742768
## 1987-03-17 0.014603325
Исходный ряд — это data.frame
. Преобразуем его в xts
временной ряд. Это немного другой формат хранения данных. Более удобный для временных рядов.
y <- sp500ret$SP500RET
t <- ymd(rownames(sp500ret))
sp500xts <- xts(y, order.by=t)
Построим график доходностей и ACF/PACF:
tsdisplay(sp500xts)
Пакет rugarch
оценивает целый зоопарк GARCH моделей. Мы выберем для примера самую простую, ARMA(1,1)-GARCH(1,1) модель.
То есть уравнение для доходности имеет вид: \[ (y_t-\mu)=\phi_1 (y_{t-1}-\mu) + \theta_1 \varepsilon_{t-1} + \varepsilon_t \]
А уравнение для волатильности, \(\varepsilon_t = \sigma_t \cdot \nu_t\), имеет вид:
\[ \sigma^2_t=w + \alpha_1 \varepsilon^2_{t-1}+ \beta_1 \sigma^2_{t-1} \]
Сначала указываем желаемую спецификацию, а затем оцениваем.
model <- ugarchspec(
variance.model = list(garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 1)))
model_est <- ugarchfit(spec = model,
data=sp500xts)
Смотрим на результаты оценивания:
model_est
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(1,0,1)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000522 0.000087 5.9878 0.00000
## ar1 0.871332 0.071687 12.1547 0.00000
## ma1 -0.898444 0.064089 -14.0188 0.00000
## omega 0.000001 0.000001 1.3891 0.16481
## alpha1 0.087715 0.013720 6.3930 0.00000
## beta1 0.904954 0.013767 65.7328 0.00000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000522 0.000130 4.014118 0.000060
## ar1 0.871332 0.087565 9.950649 0.000000
## ma1 -0.898444 0.079625 -11.283381 0.000000
## omega 0.000001 0.000014 0.093146 0.925788
## alpha1 0.087715 0.186997 0.469074 0.639016
## beta1 0.904954 0.192511 4.700801 0.000003
##
## LogLikelihood : 17902.41
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.4807
## Bayes -6.4735
## Shibata -6.4807
## Hannan-Quinn -6.4782
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 5.523 1.876e-02
## Lag[2*(p+q)+(p+q)-1][5] 6.409 1.422e-05
## Lag[4*(p+q)+(p+q)-1][9] 7.162 1.132e-01
## d.o.f=2
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 1.103 0.2936
## Lag[2*(p+q)+(p+q)-1][5] 1.495 0.7410
## Lag[4*(p+q)+(p+q)-1][9] 1.955 0.9104
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.01958 0.500 2.000 0.8887
## ARCH Lag[5] 0.17499 1.440 1.667 0.9713
## ARCH Lag[7] 0.53740 2.315 1.543 0.9749
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 174.7772
## Individual Statistics:
## mu 0.2104
## ar1 0.1471
## ma1 0.1047
## omega 21.3752
## alpha1 0.1345
## beta1 0.1128
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.49 1.68 2.12
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.4302 6.670e-01
## Negative Sign Bias 2.9467 3.226e-03 ***
## Positive Sign Bias 2.3928 1.675e-02 **
## Joint Effect 28.9717 2.270e-06 ***
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 179.0 4.775e-28
## 2 30 187.8 3.641e-25
## 3 40 218.4 8.218e-27
## 4 50 228.1 6.432e-25
##
##
## Elapsed time : 0.85976
Можно на каждый из результатов глянуть отдельно. Например, информационные критерии:
infocriteria(model_est)
##
## Akaike -6.480683
## Bayes -6.473495
## Shibata -6.480686
## Hannan-Quinn -6.478177
Можно построить кучу заготовленных графиков. Мы построим два, и настоятельно советуем попробовать plot(model_est)
:
График автокорреляционной функции самого ряда:
plot(model_est, which=4)
Есть и положительные, и отрицательные корреляции, отчасти значимые.
График автокорреляционной функции для квадратов доходностей:
plot(model_est, which=5)
Все автокорреляции положительны, первые автокорреляции квадратов значимы.
Прогнозируем на 10 шагов вперёд:
prognoz <- ugarchforecast(model_est)
prognoz
##
## *------------------------------------*
## * GARCH Model Forecast *
## *------------------------------------*
## Model: sGARCH
## Horizon: 10
## Roll Steps: 0
## Out of Sample: 0
##
## 0-roll forecast [T0=2009-01-30]:
## Series Sigma
## T+1 0.0016642 0.02480
## T+2 0.0015172 0.02473
## T+3 0.0013892 0.02467
## T+4 0.0012775 0.02460
## T+5 0.0011803 0.02454
## T+6 0.0010956 0.02448
## T+7 0.0010217 0.02442
## T+8 0.0009574 0.02435
## T+9 0.0009013 0.02429
## T+10 0.0008525 0.02423