Я использую пакет rugarch, и у меня возникают проблемы с пониманием того, как работают внешние. Регрессоры.Комплект Rugarch с использованием внешних регрессоров
Например, я ожидал бы, что установка временного ряда с gjr-garch (1,1) должна дать те же результаты, что и при установке одинаковых временных рядов с простым ванильным garch (1,1), дополненным S_ (t- 1) * eps_ (t-1)^2 как внешний регресс.
Однако я не получаю одинаковых результатов.
В частности, это код, который я бегу:
rm(list = ls()) # empty memory
library(rugarch)
library(xts)
data(sp500ret)
spx <- xts(sp500ret, as.Date(rownames(sp500ret)))
t = length(spx)
# assuming mu = 0; r_t = eps_t
s = rep(0,t)
for(i in 1:t){
if(spx[i]<0){s[i]=1}
}
# eps.neg represents the leverage effect regressor
eps.neg <- xts(spx*s, as.Date(rownames(sp500ret)))
colnames(eps.neg)<-"eps.neg"
# lag eps.neg
eps.neg.lag = lag(eps.neg,1)
inputs<-na.omit(cbind(spx, eps.neg.lag, join="left"))
# gjrgarch(1,1)
gjr.spec <- ugarchspec(variance.model = list(model='gjrGARCH', garchOrder=c(1,1),
external.regressors = NULL, variance.targeting = T),
mean.model = list(armaOrder=c(0,0)),fixed.pars=list(mu = 0))
gjr.fit <- ugarchfit(spec=gjr.spec, data=inputs[,1],
solver.control=list(trace = 1))
# garch(1,1) augmented with inputs[,2]
aug.s.spec <- ugarchspec(variance.model = list(model='sGARCH', garchOrder=c(1,1),
external.regressors = inputs[,2]^2, variance.targeting = T),
mean.model = list(armaOrder=c(0,0)),fixed.pars=list(mu = 0))
aug.s.fit <- ugarchfit(spec=aug.s.spec, data=inputs[,1],
solver.control=list(trace = 1))
#results
gjr.fit
aug.s.fit
Однако эти результаты:
GJR-GARCH (1,1)
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 NA NA NA
alpha1 0.007933 0.000184 43.139 0
beta1 0.909048 0.000008 117316.512 0
gamma1 0.139258 0.004006 34.764 0
omega 0.000002 NA NA NA
Augmented-GARCH (1,1)
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000000 NA NA NA
alpha1 0.085378 0.002123 4.0223e+01 0.00000
beta1 0.904696 0.000001 1.0116e+06 0.00000
vxreg1 0.000000 0.000060 1.6700e-04 0.99987
omega 0.000001 NA NA NA
Я бы сделал ct vxreg1 и gamma1 эквивалентны, чего не происходит!
Что я делаю неправильно?
У меня отсутствовали хорошие оценки по умолчанию для внешних регрессоров. setbounds (aug.s.spec) <- list ("vxreg1" = c (-1, 1)) Установка границ для внешнего регресса Я получаю очень похожие результаты, но не то же самое ... – Luigi