7. Оценка параметров распределения
library(ghyp)
fit.*…+uv(dax,symmetric=FALSE,silent=TRUE)
# если symmetric == FALSE, то оценивается скошенное
# распределение, иначе — симметричное;
# вместо *…+ следует подставить название распределения:
# ghyp — обобщённое гиперболическое
# hyp — гиперболическое
# NIG — нормально-обратное гауссовское
# VG — Variance-Gamma
# t — t-распределение Стьюдента
# gauss — нормальное
8. Графический анализ модели
dax.ghyp <- fit.ghypuv(dax,symmetric=FALSE,silent=TRUE)
hist(dax.ghyp) # гистограмма
qqghyp(dax.ghyp) # график квантиль-квантиль
Histogram of data Generalized Hyperbolic Q-Q Plot
Asymm ghyp Asymm ghyp
Gaussian
Gaussian
0.04
50
0.02
40
0.00
Sample Quantiles
30
Density
-0.02
-0.04
20
-0.06
10
-0.08
0
-0.10 -0.05 0.00 0.05 -0.04 -0.02 0.00 0.02 0.04
data Theoretical Quantiles
9. Выбор наилучшей модели
Отношение правдоподобия
Н0: более общая модель обладает той же объясняющей
силой, что и её частный случай
dax.t <- fit.tuv(dax,symmetric=FALSE,silent=TRUE)
lik.ratio.test(dax.ghyp,dax.t,conf.level=0.95)
Информационный критерий Акаике
aic.uv <- stepAIC.ghyp(dax,dist=c("gauss","t","ghyp"),
symmetric=NULL,silent=TRUE)
summary(aic.uv$best.model) # статистики по модели
11. Кривая VaR
Используется для тестирования качества оценок риска
Кривая VaR — набор последовательных во времени значений VaR
# разделим выборку на обучающую и экзаменующую
T1 <- 6*260; T2 <- T - T1
# на пространстве экзаменующей выборки построим набор
# последовательных значений VaR
VaR <- numeric()
h <- 0.5 * 260 # длина обучающей выборки
for (i in (T1+1):(T1+T2)) {
h.dax <- dax[(i-h):(i-1)]
dax.fit <- stepAIC.ghyp(h.dax,dist=c("gauss","t","ghyp"),
symmetric=NULL,silent=TRUE)
VaR[i-T1] <- qghyp(alpha,object=dax.fit$best.model)
}
12. Кривая VaR
# сравнение оценок риска с фактом
fact <- dax[(T1+1):(T1+T2)]
plot(fact,type="l")
lines(VaR,col="red")
0.04
0.02
0.00
fact
-0.02
-0.04
-0.06
0 50 100 150 200 250 300
Index
13. Кривая VaR
•
alpha 0.100
alpha0 0.130
p.value 0.092
15. Домашнее задание
• рассчитать оценки риска для биржевого индекса по всей
совокупности наблюдений на основе наилучшей модели
• построить кривую VaR и проверить качество оценок
• проделать то же самое для нормального распределения и
сравнить результаты
Исходные данные — EuStockMarkets[, "SMI"]
Бонусные задания (необязательные):
• провести тест Колмогорова–Смирнова на эквивалентность
распределения доходностей биржевого индекса и
выбранной вами наилучшей модели
• выполнить основное задание для индекса DAX, исключив
одну наименьшую доходность, и определить, как
изменились оценки риска
16. Двумерный случай
smi <- EuStockMarkets[,"SMI"]
smi <- smi[2:(T+1)]/smi[1:T] - 1
# доходности портфеля из двух активов
prt <- array(c(dax,smi),dim=c(T,2))
# оценка параметров модели
prt.fit <- fit.*…+mv(prt,symmetric=FALSE,silent=TRUE)
aic.mv <- stepAIC.ghyp(prt, *…+)
# оценки риска
prt.fit <- fit.ghypmv(prt,symmetric=FALSE,silent=TRUE)
w <- c(0.5,0.5) # веса активов в портфеле
sim <- rghyp(n=N,object=prt.fit)
prt.sim <- w[1]*sim[,1]+w[2]*sim[,2]
prt.sim <- sort(prt.sim)
VaR <- prt.sim[alpha*N]
ES <- mean(prt.sim[1:(alpha*N-1)])
VaR -0.009
ES -0.017
17. Оптимизация портфеля
# выбор оптимальных весов активов в портфеле
opt <- portfolio.optimize(prt.fit,
risk.measure="value.at.risk",type="minimum.risk",
target.return=NULL,risk.free=NULL,level=0.95,silent=TRUE)
• risk.measure определяет целевой измеритель риска
"sd", "value.at.risk", "expected.shortfall"
• type — вид оптимизации
"minimum.risk" — по минимальному риску
"tangency" — по соотношению "(доходность – безрисковая
ставка) / риск"
"target.return" — минимальный риск при заданной
доходности
opt$opt.weights # искомые веса
18. Домашнее задание
• рассчитать оценки риска для портфеля из двух биржевых
индексов по всей совокупности наблюдений на основе
наилучшей модели
Исходные данные — пара индексов CAC–SMI
Бонусное задание (необязательное):
• построить кривую VaR для портфеля и проверить качество
оценок
31. Тесты на единичный корень в R
library(urca)
# ADF-тест
summary(ur.df(dax.gfit@residuals,type="none"/"drift"/"trend"
, selectlags="Fixed"/"AIC"/"BIC",lags=10))
punitroot(-3.5,N=T,trend="nc"/"c"/"ct")
# PP-тест
summary(ur.pp(dax.gfit@residuals,type="Z-tau",
model="constant"/"trend",lags="short"/"long"))
# KPSS-тест
summary(ur.kpss(dax.gfit@residuals,type="mu"/"tau",
lags="short"/"long"/"nil"))
32. ADF-тест
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression drift
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-0.092449 -0.005302 -0.000251 0.005692 0.049013
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0001904 0.0002397 0.794 0.427
z.lag.1 -1.0260733 0.0329483 -31.142 <2e-16 ***
z.diff.lag 0.0255134 0.0233010 1.095 0.274
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.0103 on 1845 degrees of freedom
Multiple R-squared: 0.5001, Adjusted R-squared: 0.4995
F-statistic: 922.8 on 2 and 1845 DF, p-value: < 2.2e-16
Value of test-statistic is: -31.1419 484.9111
Critical values for test statistics:
1pct 5pct 10pct
tau2 -3.43 -2.86 -2.57
phi1 6.43 4.59 3.78
33. PP-тест
##################################
# Phillips-Perron Unit Root Test #
##################################
Test regression with intercept
Call:
lm(formula = y ~ y.l1)
Residuals:
Min 1Q Median 3Q Max
-0.092499 -0.005368 -0.000231 0.005668 0.051371
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0001905 0.0002386 0.798 0.425
y.l1 -0.0007721 0.0232333 -0.033 0.973
Residual standard error: 0.01028 on 1856 degrees of freedom
Multiple R-squared: 5.95e-07, Adjusted R-squared: -0.0005382
F-statistic: 0.001104 on 1 and 1856 DF, p-value: 0.9735
Value of test-statistic, type: Z-tau is: -43.1312
aux. Z statistics
Z-tau-mu 0.7995
Critical values for Z statistics:
1pct 5pct 10pct
critical values -3.436737 -2.863576 -2.567875
34. KPSS-тест
#######################
# KPSS Unit Root Test #
#######################
Test is of type: mu with 8 lags.
Value of test-statistic is: 0.4598
Critical value for a significance level of:
10pct 5pct 2.5pct 1pct
critical values 0.347 0.463 0.574 0.739
35. Прогноз по модели ARMA-GARCH
# прогноз среднего и дисперсии на i шагов вперёд
dax.frc <- predict(dax.gfit,n.ahead=i)
dax.frc[,1] # вектор средних
dax.frc[,3]^2 # вектор дисперсий
# расчёт границы потерь
alpha <- 0.05
VaR <- dax.frc[1,1]+dax.frc[1,3]*qged(alpha,mean=0,sd=1,
nu=dax.gfit@fit$par["shape"])
36. 0.04
Кривая VaR
0.02
0.00
fact
VaR <- numeric()
-0.02
h <- 0.5*260
-0.04
for (i in (T1+1):(T1+T2)) {
h.dax <- dax[(i-h):(i-1)]
-0.06
0 50 100 150 200 250 300
Index
dax.gfit <- garchFit(formula=~aparch(1,1),data=h.dax,
delta=2,include.delta=FALSE,leverage=TRUE,cond.dist="sged",
shape=1.5,include.shape=FALSE,trace=FALSE)
dax.frc <- predict(dax.gfit,n.ahead=1)
VaR[i-T1] <- dax.frc[1,1]+dax.frc[1,3]*qsged(alpha,mean=0,sd=1,
nu=1.5,xi=dax.gfit@fit$par["skew"])
}
37. Домашнее задание
• рассчитать оценки риска для биржевого индекса по всей
совокупности наблюдений на основе GARCH-модели
• построить кривую VaR и проверить качество оценок
Исходные данные — EuStockMarkets[, "SMI"]