Ich benutze das rugarch-Paket und ich habe Probleme zu verstehen, wie die external.regressors arbeiten.Rugarch-Paket mit externen Regressoren
Zum Beispiel würde ich erwarten, dass die Anpassung einer Zeitreihe mit gjr-garch (1,1) zu den gleichen Ergebnissen führen würde, wie die gleiche Zeitreihe mit dem plain vanilla garch (1,1) mit S_ (t- 1) * eps_ (t-1)^2 als externer Regressor.
Allerdings bekomme ich nicht die gleichen Ergebnisse.
Insbesondere ist dies der Code, den ich laufen:
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
aber diese sind die Ergebnisse:
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
Ich würde erfahren ct vxreg1 und gamma1 sind äquivalent, was nicht passiert!
Was mache ich falsch?
Mir fehlten gute Standardgrenzen für die externen Regressoren. setbounds (aug.s.spec) <- list ("vxreg1" = c (-1, 1)) Festlegen der Grenzen für den externen Regressor Ich bekomme sehr ähnliche Ergebnisse, aber nicht die gleichen ... – Luigi