ARCH/GARCH модели
“Количественные финансы”

Салихов Марсель ()

2021-01-20

Цели лекции

Выводы по ARMA-моделям

Напоминание из прошлой лекции:

Волатильность

Итог: если мы умеем прогнозировать волатильность, то мы можем более аккуратно оценивать стоимость опционов, создавать более продвинутые системы риск-менеджмента и можем создавать стратегии для торговли волатильностью.

Характеристики волатильности

Индекс VIX

require(quantmod)
require(highcharter)
getSymbols('VIXCLS', src = 'FRED')
[1] "VIXCLS"
hchart(VIXCLS)

Волатильность для акций

Пусть мы оцениваем волатильность акций Роснефти. Мы можем оценить волатильность по разным данным: 1) дневная доходность акций за каждый торговый день 2) внутридневная динамика торгов 3) стоимость опционов на акции Роснефти (если они есть). Эти три источника дают три возможных оценки волатильности:

Обычно волатильность сообщается на годовом уровне (% в год). Если вы оценили дневную волатильность, то вы можете оценить годовую волатильность, умножив ее на \(\sqrt{252}\), то есть квадратный корень из количества торговых дней в году (примерно равно 16)

Условная гетероскедастичность (Conditional Heteroskedasticity)

К примеру, если нестационарный временной ряд имеет выраженную сезонность или устойчивый тренд, то дисперсия ряда изменяется вместе с сезонностью или трендом. Такая регулярность приводит к гетероскедастичности ряда. Почему?

Структура финансового рынка и поведение участников приводит к дополнительным причинам, почему увеличение дисперсии приводит к еще большему увеличению дисперсии в реальной жизни. К примеру, если большое количество участников использует стратегию “защиты” портфеля от снижения стоимости, то падение рынка приводит к автоматическим продажам и росту спросу на инструменты “защиты” (опционы) – то есть, к росту волатильности. Пример - октябрь 1987 года.

Условное (conditional) среднее и дисперсия

Пусть есть стационарная серия доходности \(r_t\), тогда

Ту же самую логику можно использовать для волатильности:

Идентификация условной гетероскедастичности

plot.xts(MICEX.rtn, type = 'l',main  = 'Доходность индекса ММВБ')

t.test(MICEX.rtn) # тестируем среднее доходнстей

    One Sample t-test

data:  MICEX.rtn
t = 1.3281, df = 2769, p-value = 0.1843
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -0.0001508796  0.0007842848
sample estimates:
   mean of x 
0.0003167026 

Cудя по t-тесту, мы принимаем гипотезу о том, что среднее доходности равно 0.

ARCH-модель

Описание ARCH-модели

Это и есть базовый принцип ARCH.

Пусть временной ряд \({\epsilon_t}\) имеет следующий вид:

\[ \epsilon_t = \sigma_t w_t \] где \(w_t\) – белый шум с нулевым средним и единичной дисперсией (белый шум может иметь нормальное распределение, но это не обязательно, распределение может быть и иным).

Часть \(\sigma_t\) – условная дисперсия (conditional variance), она имеет вид:

\[\sigma_t^2 = a_0 + a_1 \epsilon_{t-1}^2 \] \(a_0\) и \(a_1\) – это параметры модели, которые необходимо оценить.

Условная дисперсия ряда по определению равно \(\sigma_t^2 = Var(\epsilon_t | e_{t-1}, \ldots)\) ;

В этом случае ряд \({\epsilon_t}\) является процессом ARCH(1). Можно записать модель в следующем виде:

\[\epsilon_t = w_t \sqrt{a_0 + a_1 \epsilon_{t-1}^2} \] \(a_0 >0\) и \(a_1 > 0\) для того, чтобы часть под корнем была больше 0.

\(a_0 + a_1<1\) для того, чтобы ряд оставался стационарным с конечной дисперсией.

Почему ARCH моделирует волатильность?

Немного математики:

\[ Var(\epsilon_t) = E[\epsilon_t^2] - (E[\epsilon_t])^2 = E[\epsilon_t^2] =E[w_t^2]E[a_0 + a_1 \epsilon_{t-1}^2]= \] \[=E[a_0 + a_1 \epsilon_{t-1}^2] = a_0 + a_1 Var(\epsilon_{t-1}) = a_0 + a_1 \epsilon_{t-1}^2 \]

учитывая, что среднее \(w_t\) равно 0, дисперсия – 1, а \(E[\epsilon_t] = 0\)

Когда можно использовать ARCH?

Достоинства и недостатки ARCH

Достоинства:

  1. Модель может “создавать” кластеры волатильности
  2. Модель может “создавать” heavy tails

Недостатки:

  1. Модель трактует положительные и отрицательные шоки одинаковым образом с точки зрения влияния на волатильность. Эмпирические наблюдения и здравый смысл говорят, что эти шоки различны.
  2. Модель ARCH накладывает достаточно сильные ограничения на значения коэффициентов модели. Это ограничивает возможности моделировать более высокие моменты (к примеру, избыточный эксцесс). ARCH хорошо моделирует вспышки волатильности (burst), но не очень хорошо моделирует более длительные смены режимов волатильности.
  3. Модель ARCH не дает возможность оценки источников шоков, это просто механистический способ оценки поведения условной дисперсии.
  4. Модель ARCH недооценивает волатильность, так как достаточно медленно реагирует на большие по значению шоки.
  5. Модель на фактических требует достаточно большого количество параметров для оценки, что увеличивает вероятность overfitting.

ARCH(p)

Модель ARCH порядка \(p\) имеет следующий вид:

\[\sigma_t^2 = w_t \sqrt{a_0 + \sum_{i=1}^{p} a_i \epsilon_{t-i}^2} \]

Тестирование ARCH-эффекта

Пусть уравнение для среднего выглядит следующим образом: \(a_t = r + \mu_t\). Мы можем использовать квадраты остатков (\(a_t^2\)), чтобы проверить серию на условную гетерокседастичность (ARCH-эффект). Есть два варианта тестирования ARCH-эффекта:

  1. Использовать тест Льюнга-Бокса (Ljung-Box test) для серии \(\{a_t^2\}\) – мы проходили этот тест в ARMA-моделях
  2. Использовать тест множителей Лагранжа (см. Engle (1982)). Этот тест эквивалентен обычному F-тесту на тестирование гипотезы (\(\alpha_i = 0\)) в уравнении:

\[ a_t^2 = \alpha _0 + \alpha_1 a_{t-1}^2 +\ldots + \alpha_{t-m}^2 + \epsilon_t, t = m +1, ..., T \]

Проверка ARCH-эффекта для доходностей индекса ММВБ

require(FinTS)
Loading required package: FinTS

Attaching package: 'FinTS'
The following object is masked from 'package:forecast':

    Acf
y <- MICEX.rtn - mean(MICEX.rtn)
Box.test(y^2,lag = 10,type = 'Ljung')

    Box-Ljung test

data:  y^2
X-squared = 527.63, df = 10, p-value < 2.2e-16
ArchTest(y,12) 

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  y
Chi-squared = 253.16, df = 12, p-value < 2.2e-16

Оба теста указывают на присутствие ARCH-эффекта в серии

Определение порядка ARCH модели

Pacf(y^2)

Можем оценить ARMA(1,1) модель для среднего доходностей и посмотреть на квадраты остатков этой модели:

arma11 <- Arima(MICEX.rtn, order=c(1, 0, 1))
Pacf(resid(arma11)^2)

Как видно, требуется достаточно много лагов (порядок модели), чтобы использовать ARCH.

Симулирование AR(1) + ARCH(1)

AR(1) модель для среднего и ARCH(1) для дисперсии можно симулировать следующим образом:

n = 10200 #
e = rnorm(n)
a = e # ARCH
y = e # AR + ARCH
sig2 = e^2 # условная дисперсия
# параметры для ARCH
omega = 1
alpha = 0.55
#параметры для AR
phi = 0.8
mu = 0.1
omega/(1-alpha) # безусловное ст. отклонение
[1] 2.222222
sqrt(omega/(1-alpha))
[1] 1.490712
set.seed("1234")
for (t in 2:n)
{
  a[t] = sqrt(sig2[t])*e[t]
  y[t] = mu + phi*(y[t-1]-mu) + a[t] # моделирование AR
  sig2[t+1] = omega + alpha * a[t]^2 # моделирование ARCH
}

par(mfrow=c(2,4))
plot(e[10001:n],type="l",xlab="t",ylab=expression(epsilon),main="(a) белый шум")
plot(sqrt(sig2[10001:n]),type="l",xlab="t",ylab=expression(sigma[t]),
     main="(b) условная дисперсия")
plot(a[10001:n],type="l",xlab="t",ylab="a",main="(c) ARCH")
plot(y[10001:n],type="l",xlab="t",ylab="y",main="(d) AR+ARCH")
acf(a[10001:n],main="(e) ARCH")
acf(a[10001:n]^2,main="(f) ARCH squared")
acf(y[10001:n],main="(g) AR+ARCH")
acf(y[10001:n]^2,main="(h) AR+ARCH squared")

par(mfrow=c(1,1))

Оценка ARCH-модели

Оценим ARCH(1)-модель для доходностей ММВБ при допущении о том, что среднее доходностей является константой. Используем помощью функцию garchFit из пакета fGarch.

library(fGarch)
arch1 <- garchFit(~1+garch(1,0),data=MICEX.rtn,trace=F)
summary(arch1)

Title:
 GARCH Modelling 

Call:
 garchFit(formula = ~1 + garch(1, 0), data = MICEX.rtn, trace = F) 

Mean and Variance Equation:
 data ~ 1 + garch(1, 0)
<environment: 0x00000000260d9770>
 [data = MICEX.rtn]

Conditional Distribution:
 norm 

Coefficient(s):
        mu       omega      alpha1  
0.00044228  0.00012838  0.18042783  

Std. Errors:
 based on Hessian 

Error Analysis:
        Estimate  Std. Error  t value Pr(>|t|)    
mu     4.423e-04   2.291e-04    1.931   0.0535 .  
omega  1.284e-04   4.252e-06   30.190  < 2e-16 ***
alpha1 1.804e-01   2.605e-02    6.927  4.3e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Log Likelihood:
 8269.523    normalized:  2.985387 

Description:
 Tue Jan 19 22:59:36 2021 by user: marce 


Standardised Residuals Tests:
                                Statistic p-Value     
 Jarque-Bera Test   R    Chi^2  7960.916  0           
 Shapiro-Wilk Test  R    W      0.9398179 0           
 Ljung-Box Test     R    Q(10)  7.46831   0.6806164   
 Ljung-Box Test     R    Q(15)  15.09148  0.444848    
 Ljung-Box Test     R    Q(20)  29.58857  0.07680031  
 Ljung-Box Test     R^2  Q(10)  124.068   0           
 Ljung-Box Test     R^2  Q(15)  155.9343  0           
 Ljung-Box Test     R^2  Q(20)  168.5281  0           
 LM Arch Test       R    TR^2   101.4284  3.330669e-16

Information Criterion Statistics:
      AIC       BIC       SIC      HQIC 
-5.968609 -5.962190 -5.968611 -5.966291 
res  <- residuals(arch1,standardize=T) # используем стандартизированные остатки для диагностики модели 
Acf(res,lag=20)

Pacf(res,lag=20)

# plot(arch1) диагностические графики для модели 
plot(arch1, which = 13) # QQ-Plot of Standardized Residuals   

Оцененная модель имеет вид:

\[ r_t = 0.00044228 + a_t, \sigma^2 = 0.00012838 + 0.18042783 a_{t-1}^2 \] Все коэффициенты являются значимыми. ACF и PACF указывают на отсутствие автокорреляции в остатках

Оценка ARCH(1) c распределением Стьюдента для шоков

Та же самая модель с t-распределением Стьюдента для моделирования шоков серии.

arch1_student <- garchFit(~1+garch(1,0),data=MICEX.rtn,trace=F, cond.dist="std")
summary(arch1_student)

Title:
 GARCH Modelling 

Call:
 garchFit(formula = ~1 + garch(1, 0), data = MICEX.rtn, cond.dist = "std", 
    trace = F) 

Mean and Variance Equation:
 data ~ 1 + garch(1, 0)
<environment: 0x000000001e31e5c8>
 [data = MICEX.rtn]

Conditional Distribution:
 std 

Coefficient(s):
        mu       omega      alpha1       shape  
0.00060358  0.00012331  0.19347015  4.66362128  

Std. Errors:
 based on Hessian 

Error Analysis:
        Estimate  Std. Error  t value Pr(>|t|)    
mu     6.036e-04   1.976e-04    3.054  0.00226 ** 
omega  1.233e-04   6.949e-06   17.745  < 2e-16 ***
alpha1 1.935e-01   3.612e-02    5.356  8.5e-08 ***
shape  4.664e+00   4.047e-01   11.524  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Log Likelihood:
 8461.216    normalized:  3.054591 

Description:
 Tue Jan 19 22:59:38 2021 by user: marce 


Standardised Residuals Tests:
                                Statistic p-Value     
 Jarque-Bera Test   R    Chi^2  8134.921  0           
 Shapiro-Wilk Test  R    W      0.9396215 0           
 Ljung-Box Test     R    Q(10)  7.359412  0.6911341   
 Ljung-Box Test     R    Q(15)  14.71742  0.471957    
 Ljung-Box Test     R    Q(20)  28.97493  0.0882542   
 Ljung-Box Test     R^2  Q(10)  113.932   0           
 Ljung-Box Test     R^2  Q(15)  144.5092  0           
 Ljung-Box Test     R^2  Q(20)  155.9373  0           
 LM Arch Test       R    TR^2   95.98045  3.441691e-15

Information Criterion Statistics:
      AIC       BIC       SIC      HQIC 
-6.106293 -6.097735 -6.106297 -6.103202 
res  <- residuals(arch1_student,standardize=T) # используем стандартизированные остатки
Acf(res,lag=20)

Pacf(res,lag=20)

plot(arch1_student, which = 13) # QQ-Plot of Standardized Residuals   

Использование распределения с более “тяжелыми хвостами” несколько уменьшило значение ARCH-коэффициента. График квантиль-квантиль также подтверждает, что использование распределения Стьюдента для шоков, приводит к более “нормальным” остаткам модели

Определение GARCH

Временной ряд \({\epsilon_t}\) имеет следующий вид:

\[ \epsilon_t = \sigma_t w_t \]

где \(w_t\) – белый шум с нулевым средним и единичной дисперсией, а часть \(\sigma_t^2\) имеет вид:

\[\sigma_t^2 = a_0 +\sum_{i=1}^{q} a_i \epsilon_{t-i}^2+ \sum_{j=1}^{p} \beta_i \sigma_{t-j}^2 \]

где \(\alpha_i\) и \(\beta_j\) – это параметры модели. Процесс \(\epsilon_t\) является GARCH(p,q)

Симулирование GARCH(1,1)

GARCH(1,1) будет иметь следующий вид:

\[\epsilon_t = \sigma_t w_t \] \[ \sigma_t^2 = a_0 + a_1 \epsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2 \]

set.seed(2)
# параметры модели 
a0 <- 0.2
a1 <- 0.5
b1 <- 0.3
w <- rnorm(10000) ## белый шум
eps <- rep(0, 10000) ## исходный ряд, пока заполненный нулями 
sigsq <- rep(0, 10000) ## компонента GARCH

for (i in 2:10000) {
   sigsq[i] <- a0 + a1 * (eps[i-1]^2) + b1 * sigsq[i-1]
   eps[i] <- w[i]*sqrt(sigsq[i])
}

plot(eps, type = 'l')

Acf(eps)

вроде бы ничего необычного. Но если мы построим корелограмму квадратов рядов, то увидим выраженное убывание на последующих лагах (характеристика AR-процесса)

Acf(eps^2)

Pacf(eps^2)

Оценка симулированной GARCH(1,1)-модели

Мы можем также использовать функцию garch из пакета tseries

library(tseries)
eps.garch <- garch(eps, trace=FALSE)
summary(eps.garch)

Call:
garch(x = eps, trace = FALSE)

Model:
GARCH(1,1)

Residuals:
     Min       1Q   Median       3Q      Max 
-4.11672 -0.66558  0.01997  0.68409  3.53687 

Coefficient(s):
    Estimate  Std. Error  t value Pr(>|t|)    
a0  0.197947    0.009858    20.08   <2e-16 ***
a1  0.465840    0.019720    23.62   <2e-16 ***
b1  0.323213    0.018907    17.09   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diagnostic Tests:
    Jarque Bera Test

data:  Residuals
X-squared = 0.40598, df = 2, p-value = 0.8163


    Box-Ljung test

data:  Squared.Residuals
X-squared = 0.49885, df = 1, p-value = 0.48
confint(eps.garch)
       2.5 %    97.5 %
a0 0.1786255 0.2172683
a1 0.4271900 0.5044903
b1 0.2861566 0.3602687

Оценка GARCH(1,1) для индекса ММВБ

Оценим GARCH(1,1) при допущении о том, что среднее доходностей является константой:

library(fGarch)
garch11 <- fGarch::garchFit(~1+garch(1,1),data = MICEX.rtn,trace=F) # часть ~1 говорит о том, что надо оценивать константу
summary(garch11)

Title:
 GARCH Modelling 

Call:
 fGarch::garchFit(formula = ~1 + garch(1, 1), data = MICEX.rtn, 
    trace = F) 

Mean and Variance Equation:
 data ~ 1 + garch(1, 1)
<environment: 0x000000001ec066e8>
 [data = MICEX.rtn]

Conditional Distribution:
 norm 

Coefficient(s):
        mu       omega      alpha1       beta1  
6.8373e-04  4.8906e-06  8.3033e-02  8.8698e-01  

Std. Errors:
 based on Hessian 

Error Analysis:
        Estimate  Std. Error  t value Pr(>|t|)    
mu     6.837e-04   2.026e-04    3.375 0.000737 ***
omega  4.891e-06   9.562e-07    5.114 3.15e-07 ***
alpha1 8.303e-02   1.084e-02    7.658 1.89e-14 ***
beta1  8.870e-01   1.352e-02   65.605  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Log Likelihood:
 8449.8    normalized:  3.050469 

Description:
 Tue Jan 19 22:59:42 2021 by user: marce 


Standardised Residuals Tests:
                                Statistic p-Value  
 Jarque-Bera Test   R    Chi^2  12780.31  0        
 Shapiro-Wilk Test  R    W      0.9514622 0        
 Ljung-Box Test     R    Q(10)  7.362503  0.6908363
 Ljung-Box Test     R    Q(15)  9.895236  0.8262776
 Ljung-Box Test     R    Q(20)  16.44121  0.6889026
 Ljung-Box Test     R^2  Q(10)  1.199285  0.9996066
 Ljung-Box Test     R^2  Q(15)  1.640106  0.9999922
 Ljung-Box Test     R^2  Q(20)  2.550332  0.999999 
 LM Arch Test       R    TR^2   1.166496  0.9999667

Information Criterion Statistics:
      AIC       BIC       SIC      HQIC 
-6.098050 -6.089492 -6.098054 -6.094959 
coef(garch11)
          mu        omega       alpha1        beta1 
6.837316e-04 4.890593e-06 8.303282e-02 8.869753e-01 
v11 = garch11@sigma.t*sqrt(252)*100
plot(index(MICEX.rtn), v11,type='l', xlab= 'год',ylab='% год', main = 'Оценка волатильности индекса ММВБ на основе GARCH(1,1) модели') 

Мы можем также использовать критерии AIC/BIC для выбора лучшей GARCH модели

Варианты для моделей доходностей

Мы используем только одну серию для моделирования – серию фактических доходностей. Модель GARCH раскладывает эту серию на три части:

  1. Среднее арифметическое доходности в момент \(t\)
  2. Условная дисперсия в момент времени \(t\)
  3. Шок в момент времени \(t\).

Мы можем использовать разные подходы для оценки среднего доходностей (часть 1):

Спецификация модели GARCH позволяется определить каким образом, рассчитываются части 2 и 3.

Оценка GARCH(1,1) с ARMA-моделью

Мы пришли к выводу, что ARMA(1,1) является оптимальной моделью для серии.

garch_best <- garchFit(~ arma(1,1)+ garch(1,1), data=MICEX.rtn,
                         trace = F, include.mean = TRUE)

Предупреждение указывает на то, что оптимизатор не смог найти значения коэффициентов. Поэтому текущие значения коэффициентов не имеют большого смысла.

Оценка GARCH(1,1) + ARMA(3,3) для доходностей индекса ММВБ с помощью rugarch

попробуем использовать пакет rugarch. В этом пакете сначала необходимо создать объект, определяющиий тип оцениваемой модели, с помощью функции ugarchspec. Функция ugarchfit уже оценивает непосредственно модель. Для сложных моделей оценка может занимать определенное время.

library(rugarch)
spec = ugarchspec(
                 variance.model=list(garchOrder=c(1,1)),
                 mean.model=list(armaOrder=c(3,3), include.mean=T),
                 distribution.model="sged")

fit = tryCatch(
       ugarchfit
       (
         spec, 
         MICEX.rtn, 
         solver = 'hybrid'
       ), 
       error=function(e) e, 
       warning=function(w) w
     )
(fit)

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics   
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model  : ARFIMA(3,0,3)
Distribution    : sged 

Optimal Parameters
------------------------------------
        Estimate  Std. Error    t value Pr(>|t|)
mu      0.000424    0.000102     4.1792 0.000029
ar1     0.238641    0.016278    14.6601 0.000000
ar2     0.365775    0.015568    23.4950 0.000000
ar3     0.336452    0.014442    23.2963 0.000000
ma1    -0.214936    0.013586   -15.8198 0.000000
ma2    -0.416820    0.000146 -2863.6284 0.000000
ma3    -0.338400    0.005354   -63.2086 0.000000
omega   0.000004    0.000002     1.9971 0.045812
alpha1  0.073719    0.010746     6.8602 0.000000
beta1   0.901728    0.012305    73.2804 0.000000
skew    0.931830    0.025378    36.7183 0.000000
shape   1.361341    0.045058    30.2131 0.000000

Robust Standard Errors:
        Estimate  Std. Error    t value Pr(>|t|)
mu      0.000424    0.000115     3.6825 0.000231
ar1     0.238641    0.008679    27.4962 0.000000
ar2     0.365775    0.013660    26.7778 0.000000
ar3     0.336452    0.012390    27.1549 0.000000
ma1    -0.214936    0.006906   -31.1221 0.000000
ma2    -0.416820    0.000100 -4175.8666 0.000000
ma3    -0.338400    0.002625  -128.9265 0.000000
omega   0.000004    0.000007     0.4918 0.622859
alpha1  0.073719    0.013140     5.6103 0.000000
beta1   0.901728    0.029967    30.0909 0.000000
skew    0.931830    0.033238    28.0347 0.000000
shape   1.361341    0.088693    15.3489 0.000000

LogLikelihood : 8561.171 

Information Criteria
------------------------------------
                    
Akaike       -6.1727
Bayes        -6.1470
Shibata      -6.1727
Hannan-Quinn -6.1634

Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
                         statistic p-value
Lag[1]                       1.348  0.2456
Lag[2*(p+q)+(p+q)-1][17]     6.637  1.0000
Lag[4*(p+q)+(p+q)-1][29]    11.257  0.9126
d.o.f=6
H0 : No serial correlation

Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
                        statistic p-value
Lag[1]                    0.06575  0.7976
Lag[2*(p+q)+(p+q)-1][5]   0.52868  0.9532
Lag[4*(p+q)+(p+q)-1][9]   0.76934  0.9939
d.o.f=2

Weighted ARCH LM Tests
------------------------------------
            Statistic Shape Scale P-Value
ARCH Lag[3]   0.07316 0.500 2.000  0.7868
ARCH Lag[5]   0.32584 1.440 1.667  0.9333
ARCH Lag[7]   0.40023 2.315 1.543  0.9865

Nyblom stability test
------------------------------------
Joint Statistic:  9.4863
Individual Statistics:              
mu     0.39537
ar1    0.11031
ar2    0.13475
ar3    0.16051
ma1    0.13858
ma2    0.16118
ma3    0.19770
omega  0.36519
alpha1 0.51354
beta1  0.75780
skew   0.18411
shape  0.07543

Asymptotic Critical Values (10% 5% 1%)
Joint Statistic:         2.69 2.96 3.51
Individual Statistic:    0.35 0.47 0.75

Sign Bias Test
------------------------------------
                   t-value   prob sig
Sign Bias           0.7513 0.4526    
Negative Sign Bias  0.2199 0.8260    
Positive Sign Bias  1.1397 0.2545    
Joint Effect        5.8979 0.1167    


Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
  group statistic p-value(g-1)
1    20     42.04     0.001749
2    30     48.85     0.011971
3    40     62.38     0.010117
4    50     69.78     0.027120


Elapsed time : 3.50649 
#plot(fit)
resid <- residuals(fit, standardize = TRUE)
Acf(resid)

Pacf(resid)

v33 <- sqrt(252) * fit@fit$sigma*100
head(v33)
[1] 19.88745 19.88745 19.88745 20.03223 19.28927 20.22600
plot(sqrt(252) * fit@fit$sigma, type='l')

plot(fit, which = 1)

Сравнение оценок GARCH разных моделей среднего

сравним оценку волатильности доходностей индекс ММВБ двух разных моделей:

  1. GARCH(1,1) + константа для доходностей
  2. GARCH(1,1)+ARMA(3,3)
plot(index(MICEX.rtn),v11,type="l",col="red", xlab= 'год', ylab = '% ujl')
lines(index(MICEX.rtn),v33,col="green")

Оценки модели очень близки друг к другу.

Прогнозирование с помощью GARCH

GARCH модели позволяют строить прогнозы исходной серии и прогнозы для волатильности:

fcst = ugarchforecast(fit, n.ahead=10)
plot(fcst, which = 1) # прогноз для ряда

plot(fcst, which = 3) # прогноз для волатильности

Использованные источники:

  1. “An Introduction to Analysis of Financial Data with R” (Ruey S. Tsay)
  2. “Statistics and Data Analysis for Financial Engineering” (David Ruppert & David Matteson)
  3. Analyzing Financial Data and Implementing Financial Models Using R (Clifford Ang)
  4. Forecasting Financial Time Series (Patrick Perry)
  5. Generalised Autoregressive Conditional Heteroskedasticity GARCH(p, q) Models for Time Series Analysis (Michael Halls-Moore)